Skip to content

Commit 61c518d

Browse files
committed
Fix leaking creation of vertx instances during tests
Motivation: A few tests are incorrectly written and create vertx instances that are never closed and create file descriptor leaks. Changes: Fix incorrect tests.
1 parent 8c3bc97 commit 61c518d

File tree

10 files changed

+70
-30
lines changed

10 files changed

+70
-30
lines changed

vertx-core/src/main/java/io/vertx/core/http/impl/ClientMultipartFormUpload.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,9 @@ private void handleChunk(Object item) {
146146
return;
147147
}
148148
}
149-
handler.handle(item);
149+
if (handler != null) {
150+
handler.handle(item);
151+
}
150152
}
151153

152154
public void pump() {

vertx-core/src/test/java/io/vertx/tests/context/EventExecutorProviderTest.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,24 @@
1111
package io.vertx.tests.context;
1212

1313
import io.vertx.core.Context;
14+
import io.vertx.core.Future;
1415
import io.vertx.core.ThreadingModel;
1516
import io.vertx.core.Vertx;
1617
import io.vertx.core.internal.ContextInternal;
1718
import io.vertx.core.internal.VertxBootstrap;
1819
import io.vertx.test.core.AsyncTestBase;
20+
import io.vertx.test.core.VertxTestBase;
1921
import org.junit.Test;
2022

2123
import java.util.*;
22-
import java.util.concurrent.ConcurrentLinkedDeque;
24+
import java.util.concurrent.ArrayBlockingQueue;
25+
import java.util.concurrent.TimeUnit;
2326

2427
public class EventExecutorProviderTest extends AsyncTestBase {
2528

2629
@Test
27-
public void testExecuteTasks() {
28-
Deque<Runnable> toRun = new ConcurrentLinkedDeque<>();
30+
public void testExecuteTasks() throws Exception {
31+
ArrayBlockingQueue<Runnable> toRun = new ArrayBlockingQueue<>(50);
2932
VertxBootstrap bootstrap = VertxBootstrap.create();
3033
bootstrap.eventExecutorProvider(thread -> toRun::add);
3134
bootstrap.init();
@@ -41,9 +44,16 @@ public void testExecuteTasks() {
4144
cnt[0]++;
4245
});
4346
assertEquals(1, toRun.size());
44-
toRun.pop().run();
47+
toRun.take().run();
4548
assertEquals(1, cnt[0]);
4649
assertNull(Vertx.currentContext());
50+
Future<Void> fut = vertx.close();
51+
while(!fut.succeeded()) {
52+
Runnable task = toRun.poll(10, TimeUnit.MILLISECONDS);
53+
if (task != null) {
54+
task.run();
55+
}
56+
}
4757
}
4858

4959
@Test
@@ -52,7 +62,11 @@ public void testEventExecutorReturnsNull() {
5262
bootstrap.eventExecutorProvider(thread -> null);
5363
bootstrap.init();
5464
Vertx vertx = bootstrap.vertx();
55-
Context ctx = vertx.getOrCreateContext();
56-
assertEquals(ThreadingModel.EVENT_LOOP, ctx.threadingModel());
65+
try {
66+
Context ctx = vertx.getOrCreateContext();
67+
assertEquals(ThreadingModel.EVENT_LOOP, ctx.threadingModel());
68+
} finally {
69+
vertx.close().await();
70+
}
5771
}
5872
}

vertx-core/src/test/java/io/vertx/tests/file/FileResolverTestBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ public void testDisableCaching() throws Exception {
348348
}
349349

350350
private void testCaching(boolean enabled) throws Exception {
351-
VertxInternal vertx = (VertxInternal) Vertx.vertx(new VertxOptions().setFileSystemOptions(new FileSystemOptions().setFileCachingEnabled(enabled)));
351+
VertxInternal vertx = (VertxInternal) vertx(new VertxOptions().setFileSystemOptions(new FileSystemOptions().setFileCachingEnabled(enabled)));
352352
File tmp = File.createTempFile("vertx", ".bin");
353353
tmp.deleteOnExit();
354354
URL url = tmp.toURI().toURL();

vertx-core/src/test/java/io/vertx/tests/http/HttpDomainSocketTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ public class HttpDomainSocketTest extends HttpTestBase {
3232

3333
@Test
3434
public void testListenDomainSocketAddressNative() throws Exception {
35-
VertxInternal vx = (VertxInternal) Vertx.vertx(new VertxOptions().setPreferNativeTransport(true));
35+
VertxInternal vx = (VertxInternal) vertx(() -> Vertx.vertx(new VertxOptions().setPreferNativeTransport(true)));
3636
assumeTrue("Native transport must be enabled", vx.isNativeTransportEnabled());
3737
testListenDomainSocketAddress(vx);
3838
}
3939

4040
@Test
4141
public void testListenDomainSocketAddressJdk() throws Exception {
42-
VertxInternal vx = (VertxInternal) Vertx.vertx(new VertxOptions().setPreferNativeTransport(false));
42+
VertxInternal vx = (VertxInternal) vertx(() -> Vertx.vertx(new VertxOptions().setPreferNativeTransport(false)));
4343
assumeFalse("Native transport must not be enabled", vx.isNativeTransportEnabled());
4444
testListenDomainSocketAddress(vx);
4545
}

vertx-core/src/test/java/io/vertx/tests/http/fileupload/MultipartFormUploadTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class MultipartFormUploadTest extends HttpTestBase {
5252
@Before
5353
public void setUp() throws Exception {
5454
super.setUp();
55-
vertx = (VertxInternal) Vertx.vertx();
55+
vertx = (VertxInternal) super.vertx;
5656
}
5757

5858
@Test
@@ -136,5 +136,6 @@ private void testFileUpload(ContextInternal context, boolean paused) throws Exce
136136
fail(e);
137137
}
138138
});
139+
await();
139140
}
140141
}

vertx-core/src/test/java/io/vertx/tests/metrics/MetricsOptionsTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ public void testJsonOptions() {
6666

6767
@Test
6868
public void testMetricsEnabledWithoutConfig() {
69-
vertx.close();
70-
vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(new MetricsOptions().setEnabled(true)));
69+
Vertx vertx = vertx(() -> Vertx.vertx(new VertxOptions().setMetricsOptions(new MetricsOptions().setEnabled(true))));
7170
VertxMetrics metrics = ((VertxInternal) vertx).metrics();
7271
assertNull(metrics);
7372
}
@@ -76,12 +75,11 @@ public void testMetricsEnabledWithoutConfig() {
7675
public void testSetMetricsInstance() {
7776
VertxMetrics metrics = new VertxMetrics() {
7877
};
79-
vertx.close();
80-
vertx = Vertx
78+
Vertx vertx = vertx(() -> Vertx
8179
.builder()
8280
.with(new VertxOptions().setMetricsOptions(new MetricsOptions().setEnabled(true)))
8381
.withMetrics(new SimpleVertxMetricsFactory<>(metrics))
84-
.build();
82+
.build());
8583
assertSame(metrics, ((VertxInternal) vertx).metrics());
8684
}
8785
}

vertx-core/src/test/java/io/vertx/tests/net/NetTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1960,14 +1960,14 @@ public void start(Promise<Void> startPromise) {
19601960

19611961
@Test
19621962
public void testListenDomainSocketAddressNative() throws Exception {
1963-
VertxInternal vx = (VertxInternal) Vertx.vertx(new VertxOptions().setPreferNativeTransport(true));
1963+
VertxInternal vx = (VertxInternal)vertx(() -> Vertx.vertx(new VertxOptions().setPreferNativeTransport(true)));
19641964
assumeTrue("Native transport must be enabled", vx.isNativeTransportEnabled());
19651965
testListenDomainSocketAddress(vx);
19661966
}
19671967

19681968
@Test
19691969
public void testListenDomainSocketAddressJdk() throws Exception {
1970-
VertxInternal vx = (VertxInternal) Vertx.vertx(new VertxOptions().setPreferNativeTransport(false));
1970+
VertxInternal vx = (VertxInternal)vertx(() -> Vertx.vertx(new VertxOptions().setPreferNativeTransport(false)));
19711971
assumeFalse("Native transport must not be enabled", vx.isNativeTransportEnabled());
19721972
testListenDomainSocketAddress(vx);
19731973
}

vertx-core/src/test/java/io/vertx/tests/security/PrivateKeyParserTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Base64;
2525

2626
import io.vertx.core.net.impl.pkcs1.PrivateKeyParser;
27+
import io.vertx.test.core.VertxTestBase;
2728
import org.junit.Assume;
2829
import org.junit.Test;
2930

@@ -35,7 +36,7 @@
3536
* Verifies behavior of {@link PrivateKeyParser}.
3637
*
3738
*/
38-
public class PrivateKeyParserTest {
39+
public class PrivateKeyParserTest extends VertxTestBase {
3940

4041
/**
4142
* Verifies that the parser correctly identifies a
@@ -92,7 +93,6 @@ private void assertKeySpecType(byte[] encodedKey, String expectedAlgorithm) {
9293
public void testGetECKeySpecSucceedsForDEREncodedECPrivateKey() throws GeneralSecurityException {
9394

9495
Assume.assumeTrue("ECC is not supported by VM's security providers", TestUtils.isECCSupportedByVM());
95-
Vertx vertx = Vertx.vertx();
9696
String b = vertx.fileSystem().readFileBlocking("tls/server-key-ec-pkcs1.pem")
9797
.toString(StandardCharsets.US_ASCII)
9898
.replaceAll("-----BEGIN EC PRIVATE KEY-----", "")

vertx-core/src/test/java/io/vertx/tests/vertx/VertxBootstrapTest.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ public class VertxBootstrapTest {
5555
public void testCreate() {
5656
VertxBootstrap factory = VertxBootstrap.create().init();
5757
Vertx vertx = factory.init().vertx();
58-
assertNotNull(vertx);
58+
try {
59+
assertNotNull(vertx);
60+
} finally {
61+
vertx.close().await();
62+
}
5963
}
6064

6165
@Test
@@ -72,8 +76,12 @@ public void testCreateClustered() throws Exception {
7276
}
7377
});
7478
Vertx vertx = fut.get(10, TimeUnit.SECONDS);
75-
assertNotNull(vertx);
76-
assertNotNull(((VertxInternal)vertx).clusterManager());
79+
try {
80+
assertNotNull(vertx);
81+
assertNotNull(((VertxInternal)vertx).clusterManager());
82+
} finally {
83+
vertx.close().await();
84+
}
7785
}
7886

7987
@Test
@@ -85,7 +93,11 @@ public void testFactoryMetricsOverridesMetaInf() {
8593
factory.metricsFactory(options -> metrics);
8694
factory.init();
8795
Vertx vertx = factory.vertx();
88-
assertSame(metrics, ((VertxInternal)vertx).metrics());
96+
try {
97+
assertSame(metrics, ((VertxInternal)vertx).metrics());
98+
} finally {
99+
vertx.close().await();
100+
}
89101
});
90102
}
91103

@@ -113,7 +125,11 @@ public void testFactoryTracerOverridesMetaInf() {
113125
factory.tracerFactory(options -> tracer);
114126
factory.init();
115127
Vertx vertx = factory.vertx();
116-
assertSame(tracer, ((VertxInternal)vertx).getOrCreateContext().tracer());
128+
try {
129+
assertSame(tracer, ((VertxInternal)vertx).getOrCreateContext().tracer());
130+
} finally {
131+
vertx.close().await();
132+
}
117133
});
118134
}
119135

@@ -149,7 +165,11 @@ public void testFactoryClusterManagerOverridesMetaInf() throws Exception {
149165
});
150166
});
151167
Vertx vertx = res.get(10, TimeUnit.SECONDS);
152-
assertSame(clusterManager, ((VertxInternal)vertx).clusterManager());
168+
try {
169+
assertSame(clusterManager, ((VertxInternal)vertx).clusterManager());
170+
} finally {
171+
vertx.close().await();
172+
}
153173
}
154174

155175
@Test
@@ -161,7 +181,11 @@ public void testFactoryTransportOverridesDefault() {
161181
factory.transport(override);
162182
factory.init();
163183
Vertx vertx = factory.vertx();
164-
assertSame(override, ((VertxInternal)vertx).transport());
184+
try {
185+
assertSame(override, ((VertxInternal)vertx).transport());
186+
} finally {
187+
vertx.close().await();
188+
}
165189
}
166190

167191
@Test

vertx-core/src/test/java/io/vertx/tests/vertx/VertxBuilderTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,24 @@
1313
import io.vertx.core.Vertx;
1414
import io.vertx.core.internal.VertxInternal;
1515
import io.vertx.test.core.AsyncTestBase;
16+
import io.vertx.test.core.VertxTestBase;
1617
import io.vertx.test.fakemetrics.FakeVertxMetrics;
1718
import io.vertx.test.faketracer.FakeTracer;
1819
import org.junit.Test;
1920

20-
public class VertxBuilderTest extends AsyncTestBase {
21+
public class VertxBuilderTest extends VertxTestBase {
2122

2223
@Test
2324
public void testTracerFactoryDoesNotRequireOptions() {
2425
FakeTracer tracer = new FakeTracer();
25-
Vertx vertx = Vertx.builder().withTracer(options -> tracer).build();
26+
Vertx vertx = vertx(() -> Vertx.builder().withTracer(options -> tracer).build());
2627
assertEquals(tracer, ((VertxInternal)vertx).tracer());
2728
}
2829

2930
@Test
3031
public void testMetricsFactoryDoesNotRequireOptions() {
3132
FakeVertxMetrics metrics = new FakeVertxMetrics();
32-
Vertx vertx = Vertx.builder().withMetrics(options -> metrics).build();
33+
Vertx vertx = vertx(() -> Vertx.builder().withMetrics(options -> metrics).build());
3334
assertEquals(metrics, ((VertxInternal)vertx).metrics());
3435
}
3536
}

0 commit comments

Comments
 (0)