@Override protected void stopInternal() { this.serverRef.get().dispose(); }
@Override protected void stopInternal() { this.serverRef.get().dispose(); }
@Override protected void stopInternal() { this.serverRef.get().dispose(); }
private Mono<Void> closeServer() { return Mono.defer( () -> Optional.ofNullable(server) .map( server -> { server.dispose(); return server .onDispose() .doOnError(e -> LOGGER.warn("Failed to close server: " + e)); }) .orElse(Mono.empty())); }
@Override public Mono<Void> stop() { return Mono.defer( () -> { List<Mono<Void>> stopList = new ArrayList<>(); stopList.add(shutdownBossGroup()); if (server != null) { server.dispose(); stopList.add(server.onDispose()); } return Mono.when(stopList); }); } }
/** * Shutting down server of type {@link DisposableServer} if it's not null. * * @param disposableServer server * @return mono hanle */ protected final Mono<Void> shutdownServer(DisposableServer disposableServer) { return Mono.defer( () -> Optional.ofNullable(disposableServer) .map( server -> { server.dispose(); return server .onDispose() .doOnError(e -> LOGGER.warn("Failed to close server: " + e)) .onErrorResume(e -> Mono.empty()); }) .orElse(Mono.empty())); } }
@Override public void dispose() { server.dispose(); HttpResources.get() .disposeWhen(server.address()); }
@After public void tearDown() { server.dispose(); }
@Override public void dispose() { server.dispose(); HttpResources.get() .disposeWhen(server.address()); }
runningServer.dispose(); runningServer.onDispose() .block();
connection.dispose(); connection.onDispose() .block();
runningServer.dispose(); runningServer.onDispose() .block();
@Test public void compressionActivatedOnClientAddsHeader() { AtomicReference<String> zip = new AtomicReference<>("fail"); HttpServer server = HttpServer.create() .port(0) .compress(true); DisposableServer runningServer = server.handle((in, out) -> out.sendString(Mono.just("reply"))) .wiretap(true) .bindNow(Duration.ofSeconds(10)); HttpClient client = HttpClient.create() .addressSupplier(() -> address(runningServer)) .wiretap(true) .compress(true); ByteBuf resp = client.headers(h -> zip.set(h.get("accept-encoding"))) .get() .uri("/test") .responseContent() .blockLast(); assertThat(zip.get()).isEqualTo("gzip"); runningServer.dispose(); runningServer.onDispose() .block(); }
@Test public void compressionServerDefaultClientDefaultIsNone() { HttpServer server = HttpServer.create() .port(0); DisposableServer runningServer = server.handle((in, out) -> out.sendString(Mono.just("reply"))) .wiretap(true) .bindNow(Duration.ofSeconds(10)); HttpClient client = HttpClient.create() .addressSupplier(() -> address(runningServer)) .wiretap(true); Tuple2<String, HttpHeaders> resp = client.get() .uri("/test") .response((res, buf) -> buf.asString() .zipWith(Mono.just(res.responseHeaders()))) .blockFirst(); assertThat(resp.getT2().get("Content-Encoding")).isNull(); assertThat(resp.getT1()).isEqualTo("reply"); runningServer.dispose(); runningServer.onDispose() .block(); }
runningServer.dispose(); runningServer.onDispose() .block(Duration.ofSeconds(15));
@Test public void compressionServerEnabledClientDisabledIsNone() { HttpServer server = HttpServer.create() .port(0) .compress(true); String serverReply = "reply"; DisposableServer runningServer = server.handle((in, out) -> out.sendString(Mono.just(serverReply))) .wiretap(true) .bindNow(Duration.ofSeconds(10)); HttpClient client = HttpClient.create() .addressSupplier(() -> address(runningServer)) .wiretap(true) .compress(false); Tuple2<String, HttpHeaders> resp = client.get() .uri("/test") .response((res, buf) -> buf.asString() .zipWith(Mono.just(res.responseHeaders()))) .blockFirst(); assertThat(resp.getT2().get("Content-Encoding")).isNull(); assertThat(resp.getT1()).isEqualTo(serverReply); runningServer.dispose(); runningServer.onDispose() .block(); }
@Test public void serverCompressionDefault() { HttpServer server = HttpServer.create() .port(0); DisposableServer runningServer = server.handle((in, out) -> out.sendString(Mono.just("reply"))) .wiretap(true) .bindNow(Duration.ofSeconds(10)); HttpClient client = HttpClient.create() .addressSupplier(() -> address(runningServer)) .wiretap(true); Tuple2<String, HttpHeaders> resp = client.headers(h -> h.add("Accept-Encoding", "gzip")) .get() .uri("/test") .response((res, buf) -> buf.asString() .zipWith(Mono.just(res.responseHeaders()))) .blockFirst(); assertThat(resp.getT2().get("content-encoding")).isNull(); Assert.assertEquals("reply", resp.getT1()); runningServer.dispose(); runningServer.onDispose() .block(); }
@Test public void serverCompressionDisabled() { HttpServer server = HttpServer.create() .port(0) .compress(false); DisposableServer runningServer = server.handle((in, out) -> out.sendString(Mono.just("reply"))) .wiretap(true) .bindNow(Duration.ofSeconds(10)); //don't activate compression on the client options to avoid auto-handling (which removes the header) HttpClient client = HttpClient.create() .addressSupplier(() -> address(runningServer)) .wiretap(true); Tuple2<String, HttpHeaders> resp = //edit the header manually to attempt to trigger compression on server side client.headers(h -> h.add("Accept-Encoding", "gzip")) .get() .uri("/test") .response((res, buf) -> buf.asString() .zipWith(Mono.just(res.responseHeaders()))) .blockFirst(); assertThat(resp.getT2().get("content-encoding")).isNull(); Assert.assertEquals("reply", resp.getT1()); runningServer.dispose(); runningServer.onDispose() .block(); }
@Test public void serverCompressionEnabledSmallResponse() { HttpServer server = HttpServer.create() .port(0) .compress(25); DisposableServer connection = server.handle((in, out) -> out.header("content-length", "5") .sendString(Mono.just("reply"))) .bindNow(); //don't activate compression on the client options to avoid auto-handling (which removes the header) HttpClient client = HttpClient.create() .addressSupplier(() -> address(connection)); Tuple2<String, HttpHeaders> resp = //edit the header manually to attempt to trigger compression on server side client.headers(h -> h.add("Accept-Encoding", "gzip")) .get() .uri("/test") .response((res, byteBufFlux) -> byteBufFlux.asString() .zipWith(Mono.just(res.responseHeaders()))) .blockFirst(); //check the server didn't send the gzip header, only transfer-encoding HttpHeaders headers = resp.getT2(); assertThat(headers.get("conTENT-encoding")).isNull(); //check the server sent plain text String reply = resp.getT1(); Assert.assertEquals("reply", reply); connection.dispose(); connection.onDispose() .block(); }
@Test public void trueEnabledIncludeContentEncoding() { HttpServer server = HttpServer.create() .port(0) .compress(true); DisposableServer runningServer = server.handle((in, out) -> out.sendString(Mono.just("reply"))) .wiretap(true) .bindNow(Duration.ofSeconds(10)); HttpClient client = HttpClient.create() .addressSupplier(() -> address(runningServer)) .wiretap(true) .compress(true); ByteBuf res = client.headers(h -> Assert.assertTrue(h.contains("Accept-Encoding", "gzip", true))) .get() .uri("/test") .responseContent() .blockLast(); runningServer.dispose(); runningServer.onDispose() .block(); }