@Test public void testTrailers() throws Exception { server.requestHandler(req -> { HttpServerResponse resp = req.response(); resp.setChunked(true); resp.write("some-content"); resp.putTrailer("Foo", "foo_value"); resp.putTrailer("bar", "bar_value"); resp.putTrailer("juu", (List<String>)Arrays.asList("juu_value_1", "juu_value_2")); resp.end(); }); startServer(); client.getNow(DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_HOST, "/somepeth", onSuccess(resp -> { assertEquals(null, resp.getTrailer("foo")); resp.exceptionHandler(this::fail); resp.endHandler(v -> { assertEquals("foo_value", resp.getTrailer("foo")); assertEquals("foo_value", resp.getTrailer("Foo")); assertEquals("bar_value", resp.getTrailer("bar")); assertEquals(2, resp.trailers().getAll("juu").size()); assertEquals("juu_value_1", resp.trailers().getAll("juu").get(0)); assertEquals("juu_value_2", resp.trailers().getAll("juu").get(1)); testComplete(); }); })); await(); }
private void testResponseTrailers(boolean individually) { MultiMap trailers = getHeaders(10); server.requestHandler(req -> { req.response().setChunked(true); if (individually) { for (Map.Entry<String, String> header : trailers) { req.response().trailers().add(header.getKey(), header.getValue()); } } else { req.response().trailers().setAll(trailers); } req.response().end(); }); server.listen(onSuccess(s -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, onSuccess(resp -> { resp.endHandler(v -> { assertEquals(trailers.size(), resp.trailers().size()); for (Map.Entry<String, String> entry : trailers) { assertEquals(entry.getValue(), resp.trailers().get(entry.getKey())); assertEquals(entry.getValue(), resp.getTrailer(entry.getKey())); } testComplete(); }); })).end(); })); await(); }
/** * Return the first trailer value with the specified name * @param trailerName the trailer name * @return the trailer value */ public String getTrailer(String trailerName) { String ret = delegate.getTrailer(trailerName); return ret; }
/** * Return the first trailer value with the specified name * @param trailerName the trailer name * @return the trailer value */ public String getTrailer(String trailerName) { String ret = delegate.getTrailer(trailerName); return ret; }
@Test public void testTrailers() throws Exception { server.requestHandler(req -> { HttpServerResponse resp = req.response(); resp.setChunked(true); resp.write("some-content"); resp.putTrailer("Foo", "foo_value"); resp.putTrailer("bar", "bar_value"); resp.putTrailer("juu", (List<String>)Arrays.asList("juu_value_1", "juu_value_2")); resp.end(); }); startServer(); client.getNow(DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_HOST, "/somepeth", resp -> { assertEquals(null, resp.getTrailer("foo")); resp.exceptionHandler(this::fail); resp.endHandler(v -> { assertEquals("foo_value", resp.getTrailer("foo")); assertEquals("foo_value", resp.getTrailer("Foo")); assertEquals("bar_value", resp.getTrailer("bar")); assertEquals(2, resp.trailers().getAll("juu").size()); assertEquals("juu_value_1", resp.trailers().getAll("juu").get(0)); assertEquals("juu_value_2", resp.trailers().getAll("juu").get(1)); testComplete(); }); }); await(); }
private void testResponseTrailers(boolean individually) { MultiMap trailers = getHeaders(10); server.requestHandler(req -> { req.response().setChunked(true); if (individually) { for (Map.Entry<String, String> header : trailers) { req.response().trailers().add(header.getKey(), header.getValue()); } } else { req.response().trailers().setAll(trailers); } req.response().end(); }); server.listen(onSuccess(s -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, resp -> { resp.endHandler(v -> { assertEquals(trailers.size(), resp.trailers().size()); for (Map.Entry<String, String> entry : trailers) { assertEquals(entry.getValue(), resp.trailers().get(entry.getKey())); assertEquals(entry.getValue(), resp.getTrailer(entry.getKey())); } testComplete(); }); }).end(); })); await(); }
/** * Set an end handler. Once the stream has ended, and there is no more data * to be read, this handler will be called. The handler will receive a * result object with information that is only available after the stream has * ended. * @param endHandler the handler to call * @return a reference to this, so the API can be used fluently */ public SearchReadStream endHandlerWithResult(Handler<SearchReadStreamResult> endHandler) { delegate.endHandler(v -> { String strUnmergedChunks = delegate.getTrailer("GeoRocket-Unmerged-Chunks"); long unmergedChunks = 0; if (strUnmergedChunks != null) { try { unmergedChunks = Long.parseLong(strUnmergedChunks); } catch (NumberFormatException e) { if (exceptionHandler != null) { exceptionHandler.handle(e); } else { log.error("Unhandled exception", e); } return; } } endHandler.handle(new SearchReadStreamResult(unmergedChunks)); }); return this; } }