@Test public void testGetShouldReturnEntriesFromListInOrder() { MultiMap mmap = newMultiMap(); mmap.add("header", Arrays.<CharSequence>asList("value1", "value2", "value3")); assertEquals("value1", mmap.get("header")); assertEquals(Arrays.asList("value1", "value2", "value3"), mmap.getAll("header")); } }
@Override public void start() throws Exception { vertx.createHttpServer().requestHandler(req -> { System.out.println("Got request " + req.uri()); for (String name : req.headers().names()) { System.out.println(name + ": " + req.headers().get(name)); } req.handler(data -> System.out.println("Got data " + data.toString("ISO-8859-1"))); req.endHandler(v -> { // Now send back a response req.response().setChunked(true); for (int i = 0; i < 10; i++) { req.response().write("server-data-chunk-" + i); } req.response().end(); }); }).listen(8282); }
@Test public void testClientMultiThreaded() throws Exception { int numThreads = 10; Thread[] threads = new Thread[numThreads]; CountDownLatch latch = new CountDownLatch(numThreads); server.requestHandler(req -> { req.response().putHeader("count", req.headers().get("count")); req.response().end(); }).listen(ar -> { assertTrue(ar.succeeded()); for (int i = 0; i < numThreads; i++) { int index = i; threads[i] = new Thread() { public void run() { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", onSuccess(res -> { assertEquals(200, res.statusCode()); assertEquals(String.valueOf(index), res.headers().get("count")); latch.countDown(); })).putHeader("count", String.valueOf(index)).end(); } }; threads[i].start(); } }); awaitLatch(latch); for (int i = 0; i < numThreads; i++) { threads[i].join(); } }
@Test public void testHeadHasNoContentLengthByDefault() { server.requestHandler(req -> { assertEquals(HttpMethod.HEAD, req.method()); // By default HEAD does not have a content-length header req.response().end(); }); server.listen(onSuccess(s -> { client.request(HttpMethod.HEAD, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, onSuccess(resp -> { assertNull(resp.headers().get(HttpHeaders.CONTENT_LENGTH)); resp.endHandler(v -> testComplete()); })).end(); })); await(); }
@Test public void testSendFileOverrideHeaders() throws Exception { String content = TestUtils.randomUnicodeString(10000); File file = setupFile("test-send-file.html", content); server.requestHandler(req -> { req.response().putHeader("Content-Type", "wibble"); req.response().sendFile(file.getAbsolutePath()); }); server.listen(onSuccess(s -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, onSuccess(resp -> { assertEquals(file.length(), Long.parseLong(resp.headers().get("content-length"))); assertEquals("wibble", resp.headers().get("content-type")); resp.bodyHandler(buff -> { assertEquals(content, buff.toString()); file.delete(); testComplete(); }); })).end(); })); await(); }
private void testResponseHeaders(boolean individually) { MultiMap headers = getHeaders(10); server.requestHandler(req -> { if (individually) { for (Map.Entry<String, String> header : headers) { req.response().headers().add(header.getKey(), header.getValue()); } } else { req.response().headers().setAll(headers); } req.response().end(); }); server.listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, onSuccess(resp -> { assertTrue(headers.size() < resp.headers().size()); for (Map.Entry<String, String> entry : headers) { assertEquals(entry.getValue(), resp.headers().get(entry.getKey())); assertEquals(entry.getValue(), resp.getHeader(entry.getKey())); } testComplete(); })).end(); })); await(); }
private void sendFile(String fileName, String contentExpected, boolean useHandler, Function<Handler<AsyncResult<HttpClientResponse>>, HttpClientRequest> requestFact) throws Exception { waitFor(2); File fileToSend = setupFile(fileName, contentExpected); server.requestHandler(req -> { if (useHandler) { Handler<AsyncResult<Void>> completionHandler = onSuccess(v -> complete()); req.response().sendFile(fileToSend.getAbsolutePath(), completionHandler); } else { req.response().sendFile(fileToSend.getAbsolutePath()); complete(); } }); startServer(); requestFact.apply(onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals("text/html", resp.headers().get("Content-Type")); resp.exceptionHandler(this::fail); resp.bodyHandler(buff -> { assertEquals(contentExpected, buff.toString()); assertEquals(fileToSend.length(), Long.parseLong(resp.headers().get("content-length"))); complete(); }); })).end(); await(); }
@Test public void testFollowRedirectEncodedParams() throws Exception { String value1 = "\ud55c\uae00", value2 = "A B+C", value3 = "123 \u20ac"; .setStatusCode(302) .putHeader("location", location.toString()) .end(); break; case "/redirected/from/client": assertEquals(value1, req.params().get("encoded1")); assertEquals(value2, req.params().get("encoded2")); assertEquals(value3, req.params().get("encoded3")); req.response().end(); break; default:
@Test public void testResponseHeadersWithCharSequence() { HashMap<CharSequence, String> headers = new HashMap<>(); headers.put(HttpHeaders.TEXT_HTML, "text/html"); headers.put(HttpHeaders.USER_AGENT, "User-Agent"); headers.put(HttpHeaders.APPLICATION_X_WWW_FORM_URLENCODED, "application/x-www-form-urlencoded"); server.requestHandler(req -> { headers.forEach((k, v) -> req.response().headers().add(k, v)); req.response().end(); }); server.listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, onSuccess(resp -> { assertTrue(headers.size() < resp.headers().size()); headers.forEach((k,v) -> assertEquals(v, resp.headers().get(k))); headers.forEach((k,v) -> assertEquals(v, resp.getHeader(k))); testComplete(); })).end(); })); await(); }
@Test public void testResponseEndHandlersSendFile() throws Exception { waitFor(2); AtomicInteger cnt = new AtomicInteger(); String content = "iqdioqwdqwiojqwijdwqd"; File toSend = setupFile("somefile.txt", content); server.requestHandler(req -> { req.response().headersEndHandler(v -> { // Insert another header req.response().putHeader("extraheader", "wibble"); assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(content.length(), req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement()); complete(); }); req.response().sendFile(toSend.getAbsolutePath()); }).listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", onSuccess(res -> { assertEquals(200, res.statusCode()); assertEquals("wibble", res.headers().get("extraheader")); res.bodyHandler(buff -> { assertEquals(Buffer.buffer(content), buff); complete(); }); })).end(); })); await(); }
@Test public void testGetShouldReturnAddedEntriesInOrder() { MultiMap mmap = newMultiMap(); mmap.add("header", "value1"); mmap.add("header", "value2"); mmap.add("header", "value3"); assertEquals("value1", mmap.get("header")); assertEquals(Arrays.asList("value1", "value2", "value3"), mmap.getAll("header")); }
@Override public void start() throws Exception { vertx.createHttpServer().requestHandler(req -> { if (req.uri().equals("/")) { // Serve the index page req.response().sendFile("index.html"); } else if (req.uri().startsWith("/form")) { req.response().setChunked(true); req.setExpectMultipart(true); req.endHandler((v) -> { for (String attr : req.formAttributes().names()) { req.response().write("Got attr " + attr + " : " + req.formAttributes().get(attr) + "\n"); } req.response().end(); }); } else { req.response().setStatusCode(404).end(); } }).listen(8080); } }
String cnt = req.headers().get("count"); req.response().headers().set("count", cnt); req.response().end(); }); HttpClientRequest req = client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, path, onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals(theCount, Integer.parseInt(resp.headers().get("count"))); if (cnt.incrementAndGet() == numGets) { testComplete();
@Test public void testDefaultRequestHeaders() { server.requestHandler(req -> { if (req.version() == HttpVersion.HTTP_1_1) { assertEquals(1, req.headers().size()); assertEquals("localhost:" + DEFAULT_HTTP_PORT, req.headers().get("host")); } else { assertEquals(4, req.headers().size()); assertEquals("https", req.headers().get(":scheme")); assertEquals("GET", req.headers().get(":method")); assertEquals("some-uri", req.headers().get(":path")); assertEquals("localhost:" + DEFAULT_HTTP_PORT, req.headers().get(":authority")); } req.response().end(); }); server.listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, resp -> testComplete()).end(); })); await(); }
@Test public void testHeadButCanSetContentLength() { server.requestHandler(req -> { assertEquals(HttpMethod.HEAD, req.method()); // By default HEAD does not have a content-length header but it can contain a content-length header // if explicitly set req.response().putHeader(HttpHeaders.CONTENT_LENGTH, "41").end(); }); server.listen(onSuccess(s -> { client.request(HttpMethod.HEAD, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, onSuccess(resp -> { assertEquals("41", resp.headers().get(HttpHeaders.CONTENT_LENGTH)); resp.endHandler(v -> testComplete()); })).end(); })); await(); }
@Override public void start() throws Exception { SelfSignedCertificate certificate = SelfSignedCertificate.create(); HttpServerOptions serverOptions = new HttpServerOptions() .setSsl(true) .setKeyCertOptions(certificate.keyCertOptions()); vertx.createHttpServer(serverOptions).requestHandler(req -> { System.out.println("Got request " + req.uri()); for (String name : req.headers().names()) { System.out.println(name + ": " + req.headers().get(name)); } req.handler(data -> System.out.println("Got data " + data.toString("ISO-8859-1"))); req.endHandler(v -> { // Now send back a response req.response().setChunked(true); for (int i = 0; i < 10; i++) { req.response().write("server-data-chunk-" + i); } req.response().end(); }); }).listen(8282); }