@Test public void testTcpClient() throws InterruptedException { final CountDownLatch latch = new CountDownLatch(1); Connection client = TcpClient.create() .host("localhost") .port(echoServerPort) .handle((in, out) -> { in.receive() .log("conn") .subscribe(s -> latch.countDown()); return out.sendString(Flux.just("Hello World!")) .neverComplete(); }) .wiretap(true) .connectNow(); latch.await(30, TimeUnit.SECONDS); client.disposeNow(); assertThat("latch was counted down", latch.getCount(), is(0L)); }
@Test public void testChannelInactiveThrowsIOException() throws Exception { ExecutorService threadPool = Executors.newCachedThreadPool(); int abortServerPort = SocketUtils.findAvailableTcpPort(); ConnectionAbortServer abortServer = new ConnectionAbortServer(abortServerPort); Future<?> f = threadPool.submit(abortServer); if(!abortServer.await(10, TimeUnit.SECONDS)){ throw new IOException("Fail to start test server"); } ByteBufFlux response = HttpClient.create() .port(abortServerPort) .wiretap(true) .request(HttpMethod.GET) .uri("/") .send((req, out) -> out.sendString(Flux.just("a", "b", "c"))) .responseContent(); StepVerifier.create(response.log()) .expectError(IOException.class) .verify(); abortServer.close(); assertThat(f.get()).isNull(); }
@Test public void testIssue462() throws InterruptedException { final CountDownLatch countDownLatch = new CountDownLatch(1); DisposableServer server = TcpServer.create() .port(0) .handle((in, out) -> { in.receive() .log("channel") .subscribe(trip -> countDownLatch.countDown()); return Flux.never(); }) .wiretap(true) .bindNow(); assertNotNull(server); System.out.println("PORT +" + server.address() .getPort()); Connection client = TcpClient.create() .port(server.address() .getPort()) .handle((in, out) -> out.sendString(Flux.just("test"))) .wiretap(true) .connectNow(); assertNotNull(client); client.disposeNow(); server.disposeNow(); assertThat("Latch was counted down", countDownLatch.await(5, TimeUnit.SECONDS)); }
@Test public void httpRespondsEmpty() { DisposableServer server = HttpServer.create() .port(0) .route(r -> r.post("/test/{param}", (req, res) -> Mono.empty())) .wiretap(true) .bindNow(); HttpClient client = HttpClient.create() .port(server.address().getPort()) .wiretap(true); Mono<ByteBuf> content = client.headers(h -> h.add("Content-Type", "text/plain")) .post() .uri("/test/World") .send(ByteBufFlux.fromString(Mono.just("Hello") .log("client-send"))) .responseContent() .log("client-received") .next() .doOnError(t -> System.err.println("Failed requesting server: " + t.getMessage())); StepVerifier.create(content) .expectComplete() .verify(Duration.ofSeconds(5000)); server.disposeNow(); }
@Test public void clientWithoutCookieGetsANewOneFromServer() { DisposableServer server = HttpServer.create() .port(0) .route(r -> r.get("/test", (req, resp) -> resp.addCookie(new DefaultCookie("cookie1", "test_value")) .send(req.receive() .log("server received")))) .wiretap(true) .bindNow(); Mono<Map<CharSequence, Set<Cookie>>> cookieResponse = HttpClient.create() .port(server.port()) .wiretap(true) .get() .uri("/test") .responseSingle((res, buf) -> Mono.just(res.cookies())) .doOnSuccess(System.out::println) .doOnError(t -> System.err.println("Failed requesting server: " + t.getMessage())); StepVerifier.create(cookieResponse) .expectNextMatches(l -> { Set<Cookie> cookies = l.get("cookie1"); return cookies.stream().anyMatch(e -> e.value().equals("test_value")); }) .expectComplete() .verify(Duration.ofSeconds(30)); server.disposeNow(); }
.uri("/test2") .responseContent() .log("received-status-2") .next(); .uri("/issue231_1") .responseContent() .log("received-status-3") .next() .block(Duration.ofSeconds(30)); .uri("/issue231_2") .responseContent() .log("received-status-4") .next() .block(Duration.ofSeconds(30)); .uri("/issue237_1") .responseContent() .log("received-status-5"); .uri("/issue237_2") .responseContent() .log("received-status-6");
@Test public void httpStatusCode404IsHandledByTheClient() { DisposableServer server = HttpServer.create() .port(0) .route(r -> r.post("/test", (req, res) -> res.send(req.receive() .log("server-received")))) .wiretap(true) .bindNow(); HttpClient client = HttpClient.create() .port(server.address().getPort()) .wiretap(true); Mono<Integer> content = client.headers(h -> h.add("Content-Type", "text/plain")) .request(HttpMethod.GET) .uri("/unsupportedURI") .send(ByteBufFlux.fromString(Flux.just("Hello") .log("client-send"))) .responseSingle((res, buf) -> Mono.just(res.status().code())) .doOnError(t -> System.err.println("Failed requesting server: " + t.getMessage())); StepVerifier.create(content) .expectNext(404) .verifyComplete(); server.disposeNow(); } }
.uri("/forward") .responseContent() .log() .onErrorResume(t -> Mono.empty())) .blockLast(Duration.ofSeconds(15));
.uri("/forward") .responseContent() .log() .onErrorResume(t -> Mono.empty())) .blockLast(Duration.ofSeconds(15));