Skip to content

Commit 99bbe33

Browse files
committed
Improve the HTTP client file upload test (race chasing)
1 parent ba56561 commit 99bbe33

File tree

1 file changed

+44
-41
lines changed

1 file changed

+44
-41
lines changed

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

Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import io.vertx.core.buffer.Buffer;
1717
import io.vertx.core.http.*;
1818
import io.vertx.core.impl.Utils;
19+
import io.vertx.test.core.Repeat;
1920
import io.vertx.test.core.TestUtils;
2021
import io.vertx.test.http.HttpTestBase;
2122
import org.junit.Assume;
@@ -33,6 +34,7 @@
3334
import java.util.Collections;
3435
import java.util.List;
3536
import java.util.function.BiConsumer;
37+
import java.util.function.Consumer;
3638

3739
public abstract class HttpClientFileUploadTest extends HttpTestBase {
3840

@@ -173,6 +175,7 @@ public void testFileUploadFormMultipart32K() throws Exception {
173175
testFileUploadFormMultipart(32 * 1024, false);
174176
}
175177

178+
@Repeat(times = 1000)
176179
@Test
177180
public void testFileUploadFormMultipart32M() throws Exception {
178181
Assume.assumeTrue(!Utils.isWindows());
@@ -195,14 +198,14 @@ private void testFileUploadFormMultipart(int size, boolean memory) throws Except
195198
ClientMultipartForm form = ClientMultipartForm.multipartForm()
196199
.attribute("toolkit", "vert.x")
197200
.attribute("runtime", "jvm");
198-
testFileUploadFormMultipart(form, Collections.singletonList(upload), (req, uploads) -> {
201+
List<Upload> uploads = testFileUploadFormMultipart(form, Collections.singletonList(upload), (req) -> {
199202
assertEquals("vert.x", req.getFormAttribute("toolkit"));
200203
assertEquals("jvm", req.getFormAttribute("runtime"));
201-
assertEquals(1, uploads.size());
202-
assertEquals("test", uploads.get(0).name);
203-
assertEquals("test.txt", uploads.get(0).filename);
204-
assertEquals(content, uploads.get(0).data);
205204
});
205+
assertEquals(1, uploads.size());
206+
assertEquals("test", uploads.get(0).name);
207+
assertEquals("test.txt", uploads.get(0).filename);
208+
assertEquals(content, uploads.get(0).data);
206209
}
207210

208211
@Test
@@ -214,30 +217,30 @@ public void testFileUploadsFormMultipart() throws Exception {
214217
Upload.fileUpload("test2", "test2.txt", content2)
215218
);
216219
ClientMultipartForm form = ClientMultipartForm.multipartForm();
217-
testFileUploadFormMultipart(form, toUpload, (req, uploads) -> {
218-
assertEquals(2, uploads.size());
219-
assertEquals("test1", uploads.get(0).name);
220-
assertEquals("test1.txt", uploads.get(0).filename);
221-
assertEquals("UTF-8", uploads.get(0).charset);
222-
assertEquals(content1, uploads.get(0).data);
223-
assertEquals("test2", uploads.get(1).name);
224-
assertEquals("test2.txt", uploads.get(1).filename);
225-
assertEquals("UTF-8", uploads.get(1).charset);
226-
assertEquals(content2, uploads.get(1).data);
220+
List<Upload> uploads = testFileUploadFormMultipart(form, toUpload, (req) -> {
227221
});
222+
assertEquals(2, uploads.size());
223+
assertEquals("test1", uploads.get(0).name);
224+
assertEquals("test1.txt", uploads.get(0).filename);
225+
assertEquals("UTF-8", uploads.get(0).charset);
226+
assertEquals(content1, uploads.get(0).data);
227+
assertEquals("test2", uploads.get(1).name);
228+
assertEquals("test2.txt", uploads.get(1).filename);
229+
assertEquals("UTF-8", uploads.get(1).charset);
230+
assertEquals(content2, uploads.get(1).data);
228231
}
229232

230233
@Test
231234
public void testFileUploadsFormMultipartWithCharset() throws Exception {
232235
Buffer content = Buffer.buffer(TestUtils.randomAlphaString(16));
233236
List<Upload> toUpload = Collections.singletonList(Upload.fileUpload("test1", "test1.txt", content));
234237
ClientMultipartForm form = ClientMultipartForm.multipartForm().charset(StandardCharsets.ISO_8859_1);
235-
testFileUploadFormMultipart(form, toUpload, (req, uploads) -> {
236-
assertEquals(1, uploads.size());
237-
assertEquals("test1", uploads.get(0).name);
238-
assertEquals("test1.txt", uploads.get(0).filename);
239-
assertEquals("ISO-8859-1", uploads.get(0).charset);
238+
List<Upload> uploads = testFileUploadFormMultipart(form, toUpload, (req) -> {
240239
});
240+
assertEquals(1, uploads.size());
241+
assertEquals("test1", uploads.get(0).name);
242+
assertEquals("test1.txt", uploads.get(0).filename);
243+
assertEquals("ISO-8859-1", uploads.get(0).charset);
241244
}
242245

243246
@Test
@@ -249,15 +252,15 @@ public void testFileUploadsSameNameFormMultipart() throws Exception {
249252
Upload.fileUpload("test", "test2.txt", content2)
250253
);
251254
ClientMultipartForm form = ClientMultipartForm.multipartForm();
252-
testFileUploadFormMultipart(form, toUpload, (req, uploads) -> {
253-
assertEquals(2, uploads.size());
254-
assertEquals("test", uploads.get(0).name);
255-
assertEquals("test1.txt", uploads.get(0).filename);
256-
assertEquals(content1, uploads.get(0).data);
257-
assertEquals("test", uploads.get(1).name);
258-
assertEquals("test2.txt", uploads.get(1).filename);
259-
assertEquals(content2, uploads.get(1).data);
255+
List<Upload> uploads = testFileUploadFormMultipart(form, toUpload, (req) -> {
260256
});
257+
assertEquals(2, uploads.size());
258+
assertEquals("test", uploads.get(0).name);
259+
assertEquals("test1.txt", uploads.get(0).filename);
260+
assertEquals(content1, uploads.get(0).data);
261+
assertEquals("test", uploads.get(1).name);
262+
assertEquals("test2.txt", uploads.get(1).filename);
263+
assertEquals(content2, uploads.get(1).data);
261264
}
262265

263266
@Test
@@ -269,22 +272,22 @@ public void testFileUploadsSameNameFormMultipartDisableMultipartMixed() throws E
269272
Upload.fileUpload("test", "test2.txt", content2)
270273
);
271274
ClientMultipartForm form = ClientMultipartForm.multipartForm().mixed(false);
272-
testFileUploadFormMultipart(form, toUpload, (req, uploads) -> {
273-
assertEquals(2, uploads.size());
274-
assertEquals("test", uploads.get(0).name);
275-
assertEquals("test1.txt", uploads.get(0).filename);
276-
assertEquals(content1, uploads.get(0).data);
277-
assertEquals("test", uploads.get(1).name);
278-
assertEquals("test2.txt", uploads.get(1).filename);
279-
assertEquals(content2, uploads.get(1).data);
275+
List<Upload> uploads = testFileUploadFormMultipart(form, toUpload, (req) -> {
280276
});
277+
assertEquals(2, uploads.size());
278+
assertEquals("test", uploads.get(0).name);
279+
assertEquals("test1.txt", uploads.get(0).filename);
280+
assertEquals(content1, uploads.get(0).data);
281+
assertEquals("test", uploads.get(1).name);
282+
assertEquals("test2.txt", uploads.get(1).filename);
283+
assertEquals(content2, uploads.get(1).data);
281284
}
282285

283-
private void testFileUploadFormMultipart(
286+
private List<Upload> testFileUploadFormMultipart(
284287
ClientMultipartForm form,
285288
List<Upload> toUpload,
286-
BiConsumer<HttpServerRequest,
287-
List<Upload>> checker) throws Exception {
289+
Consumer<HttpServerRequest> checker) throws Exception {
290+
List<Upload> uploads = Collections.synchronizedList(new ArrayList<>());
288291
File[] testFiles = new File[toUpload.size()];
289292
for (int i = 0;i < testFiles.length;i++) {
290293
Upload upload = toUpload.get(i);
@@ -300,7 +303,6 @@ private void testFileUploadFormMultipart(
300303

301304
server.requestHandler(req -> {
302305
req.setExpectMultipart(true);
303-
List<Upload> uploads = new ArrayList<>();
304306
req.uploadHandler(upload -> {
305307
Buffer fileBuffer = Buffer.buffer();
306308
assertEquals("text/plain", upload.contentType());
@@ -310,7 +312,6 @@ private void testFileUploadFormMultipart(
310312
});
311313
});
312314
req.endHandler(v -> {
313-
checker.accept(req, uploads);
314315
req.response().end();
315316
});
316317
});
@@ -322,6 +323,8 @@ private void testFileUploadFormMultipart(
322323
.expecting(HttpResponseExpectation.SC_OK)
323324
.compose(HttpClientResponse::body))
324325
.await();
326+
327+
return toUpload;
325328
}
326329

327330
static class Upload {

0 commit comments

Comments
 (0)