private void testRequest(Function<WebClient, HttpRequest<Buffer>> reqFactory, Consumer<HttpServerRequest> reqChecker) throws Exception { waitFor(4); server.requestHandler(req -> { try { reqChecker.accept(req); complete(); } finally { req.response().end(); } }); startServer(); HttpRequest<Buffer> builder = reqFactory.apply(client); builder.send(onSuccess(resp -> complete())); builder.send(onSuccess(resp -> complete())); await(); }
private void testSendBody(Object body, BiConsumer<String, Buffer> checker) throws Exception { waitFor(2); server.requestHandler(req -> req.bodyHandler(buff -> { checker.accept(req.getHeader("content-type"), buff); complete(); req.response().end(); })); startServer(); HttpRequest<Buffer> post = client.post(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); if (body instanceof Buffer) { post.sendBuffer((Buffer) body, onSuccess(resp -> complete())); } else if (body instanceof JsonObject) { post.sendJsonObject((JsonObject) body, onSuccess(resp -> complete())); } else { post.sendJson(body, onSuccess(resp -> complete())); } await(); }
assertNull(dataHandler.get()); assertFalse(paused.get()); complete(); })); assertWaitUntil(() -> dataHandler.get() != null);
@Test public void testFileUploadWhenFileDoesNotExist() { HttpRequest<Buffer> builder = client.post("somepath"); MultipartForm form = MultipartForm.create() .textFileUpload("file", "nonexistentFilename", "nonexistentPathname", "text/plain"); builder.sendMultipartForm(form, onFailure(err -> { assertEquals(err.getClass(), HttpPostRequestEncoder.ErrorDataEncoderException.class); complete(); })); await(); }
@Test public void testConnectError() throws Exception { HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get.send(onFailure(err -> { assertTrue(err instanceof ConnectException); complete(); })); await(); }
@Test public void testFormUrlEncoded() throws Exception { server.requestHandler(req -> { req.setExpectMultipart(true); req.endHandler(v -> { assertEquals("param1_value", req.getFormAttribute("param1")); req.response().end(); }); }); startServer(); MultiMap form = MultiMap.caseInsensitiveMultiMap(); form.add("param1", "param1_value"); HttpRequest<Buffer> builder = client.post("/somepath"); builder.sendForm(form, onSuccess(resp -> complete())); await(); }
@Test public void testStreamHttpServerRequest() throws Exception { Buffer expected = TestUtils.randomBuffer(10000); HttpServer server2 = vertx.createHttpServer(new HttpServerOptions().setPort(8081)).requestHandler(req -> req.bodyHandler(body -> { assertEquals(body, expected); req.response().end(); })); startServer(server2); WebClient webClient = WebClient.create(vertx); try { server.requestHandler(req -> webClient.postAbs("http://localhost:8081/") .sendStream(req, onSuccess(resp -> req.response().end("ok")))); startServer(); webClient.post(8080, "localhost", "/").sendBuffer(expected, onSuccess(resp -> { assertEquals("ok", resp.bodyAsString()); complete(); })); await(); } finally { server2.close(); } }
@Test public void testFormMultipart() throws Exception { server.requestHandler(req -> { req.setExpectMultipart(true); req.endHandler(v -> { assertEquals("param1_value", req.getFormAttribute("param1")); req.response().end(); }); }); startServer(); MultiMap form = MultiMap.caseInsensitiveMultiMap(); form.add("param1", "param1_value"); HttpRequest<Buffer> builder = client.post("/somepath"); builder.putHeader("content-type", "multipart/form-data"); builder.sendForm(form, onSuccess(resp -> complete())); await(); }
private void testFileUploadFormMultipart(int size) throws Exception { Buffer content = Buffer.buffer(TestUtils.randomAlphaString(size)); vertx.fileSystem().writeFileBlocking(testFile.getPath(), content); server.requestHandler(req -> { req.setExpectMultipart(true); req.uploadHandler(upload -> { Buffer fileBuffer = Buffer.buffer(); assertEquals("file", upload.name()); assertEquals("test.txt", upload.filename()); assertEquals("text/plain", upload.contentType()); upload.handler(fileBuffer::appendBuffer); upload.endHandler(v -> assertEquals(content, fileBuffer)); }); req.endHandler(v -> { assertEquals("vert.x", req.getFormAttribute("toolkit")); assertEquals("jvm", req.getFormAttribute("runtime")); req.response().end(); }); }); startServer(); MultipartForm form = MultipartForm.create() .attribute("toolkit", "vert.x") .attribute("runtime", "jvm") .textFileUpload("file", testFile.getName(), testFile.getPath(), "text/plain"); HttpRequest<Buffer> builder = client.post("somepath"); builder.sendMultipartForm(form, onSuccess(resp -> complete())); await(); }
@Test public void testRedirectLimit() throws Exception { String location = "http://" + DEFAULT_HTTP_HOST + ":" + DEFAULT_HTTP_PORT + "/redirect"; server.requestHandler(req -> { assertEquals(HttpMethod.GET, req.method()); assertEquals("/redirect", req.path()); req.response().setStatusCode(302).putHeader("Location", location).end(); }); startServer(); HttpRequest<Buffer> builder = client .get("/redirect") .followRedirects(true); builder.send(onSuccess(resp -> { assertEquals(302, resp.statusCode()); assertEquals(location, resp.getHeader("Location")); assertNull(resp.body()); complete(); })); await(); }
@Test public void testInvalidRedirection() throws Exception { server.requestHandler(req -> { assertEquals(HttpMethod.POST, req.method()); assertEquals("/redirect", req.path()); req.response().setStatusCode(302).putHeader("Location", "http://www.google.com").end(); }); startServer(); HttpRequest<Buffer> builder = client .post("/redirect") .followRedirects(true); builder.send(onSuccess(resp -> { assertEquals(302, resp.statusCode()); assertEquals("http://www.google.com", resp.getHeader("Location")); assertNull(resp.body()); complete(); })); await(); }