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(); }
@Test public void testResponseUnknownContentTypeBodyAsJsonObject() throws Exception { JsonObject expected = new JsonObject().put("cheese", "Goat Cheese").put("wine", "Condrieu"); server.requestHandler(req -> req.response().end(expected.encode())); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get.send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(expected, resp.bodyAsJsonObject()); testComplete(); })); await(); }
private void testTLS(WebClientOptions clientOptions, HttpServerOptions serverOptions, Function<WebClient, HttpRequest<Buffer>> requestProvider, Consumer<HttpServerRequest> serverAssertions) throws Exception { WebClient sslClient = WebClient.create(vertx, clientOptions); HttpServer sslServer = vertx.createHttpServer(serverOptions); sslServer.requestHandler(req -> { assertEquals(serverOptions.isSsl(), req.isSSL()); if (serverAssertions != null) { serverAssertions.accept(req); } req.response().end(); }); try { startServer(sslServer); HttpRequest<Buffer> builder = requestProvider.apply(sslClient); builder.send(onSuccess(resp -> testComplete())); await(); } finally { sslClient.close(); sslServer.close(); } }
@Test public void testResponseUnknownContentTypeBodyAsJsonMapped() throws Exception { JsonObject expected = new JsonObject().put("cheese", "Goat Cheese").put("wine", "Condrieu"); server.requestHandler(req -> req.response().end(expected.encode())); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get.send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(new WineAndCheese().setCheese("Goat Cheese").setWine("Condrieu"), resp.bodyAsJson(WineAndCheese.class)); testComplete(); })); await(); }
@Test public void testResponseBodyAsAsJsonObject() throws Exception { JsonObject expected = new JsonObject().put("cheese", "Goat Cheese").put("wine", "Condrieu"); server.requestHandler(req -> req.response().end(expected.encode())); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get .as(BodyCodec.jsonObject()) .send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(expected, resp.body()); testComplete(); })); await(); }
@Test public void testVirtualHost() throws Exception { server.requestHandler(req -> { assertEquals("another-host:8080", req.host()); req.response().end(); }); startServer(); HttpRequest<Buffer> req = client.get("/test").virtualHost("another-host"); req.send(onSuccess(resp -> testComplete())); await(); }
@Test public void testResponseBodyAsAsJsonMapped() throws Exception { JsonObject expected = new JsonObject().put("cheese", "Goat Cheese").put("wine", "Condrieu"); server.requestHandler(req -> req.response().end(expected.encode())); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get .as(BodyCodec.json(WineAndCheese.class)) .send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(new WineAndCheese().setCheese("Goat Cheese").setWine("Condrieu"), resp.body()); testComplete(); })); await(); }
@Test public void testResponseUnknownContentTypeBodyAsJsonArray() throws Exception { JsonArray expected = new JsonArray().add("cheese").add("wine"); server.requestHandler(req -> req.response().end(expected.encode())); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get.send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(expected, resp.bodyAsJsonArray()); testComplete(); })); 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 testResponseBodyAsBuffer() throws Exception { Buffer expected = TestUtils.randomBuffer(2000); server.requestHandler(req -> req.response().end(expected)); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get.send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(expected, resp.body()); testComplete(); })); await(); }
private <R> void testResponseMissingBody(BodyCodec<R> codec) throws Exception { server.requestHandler(req -> req.response().setStatusCode(403).end()); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get .as(codec) .send(onSuccess(resp -> { assertEquals(403, resp.statusCode()); assertNull(resp.body()); testComplete(); })); await(); }
@Test public void testResponseBodyDiscarded() throws Exception { server.requestHandler(req -> req.response().end(TestUtils.randomAlphaString(1024))); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get .as(BodyCodec.none()) .send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(null, resp.body()); testComplete(); })); await(); }
@Test public void testResponseBodyAsAsJsonArray() throws Exception { JsonArray expected = new JsonArray().add("cheese").add("wine"); server.requestHandler(req -> req.response().end(expected.encode())); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get .as(BodyCodec.jsonArray()) .send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(expected, resp.body()); testComplete(); })); 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 testResponseBodyAsAsJsonArrayMapped() throws Exception { JsonArray expected = new JsonArray().add("cheese").add("wine"); server.requestHandler(req -> req.response().end(expected.encode())); startServer(); HttpRequest<Buffer> get = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath"); get .as(BodyCodec.json(List.class)) .send(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(expected.getList(), resp.body()); testComplete(); })); await(); }
@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 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(); }
@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(); }