@Test public void httpPort() { DisposableServer blockingFacade = HttpServer.create() .port(8080) .handle((req, resp) -> resp.sendNotFound()) .wiretap(true) .bindNow(); blockingFacade.disposeNow(); assertThat(blockingFacade.address().getPort()) .isEqualTo(8080); }
@Test public void httpPortWithAddress() { DisposableServer blockingFacade = HttpServer.create() .port(8080) .host("localhost") .handle((req, resp) -> resp.sendNotFound()) .wiretap(true) .bindNow(); blockingFacade.disposeNow(); assertThat(blockingFacade.address().getPort()) .isEqualTo(8080); }
@Test @Ignore public void testHttp1or2() throws Exception { // SelfSignedCertificate cert = new SelfSignedCertificate(); // SslContextBuilder serverOptions = SslContextBuilder.forServer(cert.certificate(), cert.privateKey()); DisposableServer server = HttpServer.create() .protocol(HttpProtocol.H2C, HttpProtocol.HTTP11) .port(8080) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bindNow(); new CountDownLatch(1).await(); server.disposeNow(); }
@Before public void setUp() { server = HttpServer.create() .port(7000) .host("localhost") .handle((req, res) -> res.sendString(Mono.just("test"))) .wiretap(true) .bindNow(); }
@Test @Ignore public void testH2PriorKnowledge() throws Exception { // SelfSignedCertificate cert = new SelfSignedCertificate(); // SslContextBuilder serverOptions = SslContextBuilder.forServer(cert.certificate(), cert.privateKey()); DisposableServer server = HttpServer.create() .protocol(HttpProtocol.H2C) .port(8080) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bindNow(); new CountDownLatch(1).await(); server.disposeNow(); }
@Test public void testHttpNoSslH2Fails() { StepVerifier.create( HttpServer.create() .protocol(HttpProtocol.H2) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bind() ).verifyErrorMessage("Configured H2 protocol without TLS. Use" + " a clear-text h2 protocol via HttpServer#protocol or configure TLS" + " via HttpServer#secure"); }
@Test @Ignore public void testHttpSsl() throws Exception { SelfSignedCertificate cert = new SelfSignedCertificate(); SslContextBuilder serverOptions = SslContextBuilder.forServer(cert.certificate(), cert.privateKey()); DisposableServer server = HttpServer.create() .port(8080) .secure(sslContextSpec -> sslContextSpec.sslContext(serverOptions)) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bindNow(); new CountDownLatch(1).await(); server.disposeNow(); }
@Test(timeout = 10000) public void testHang() { DisposableServer httpServer = HttpServer.create() .port(0) .host("0.0.0.0") .route(r -> r.get("/data", (request, response) -> response.send(Mono.empty()))) .wiretap(true) .bindNow(); assertNotNull(httpServer); httpServer.disposeNow(); }
@Test @Ignore public void testH2OrH1Secure() throws Exception { SelfSignedCertificate cert = new SelfSignedCertificate(); SslContextBuilder serverOptions = SslContextBuilder.forServer(cert.certificate(), cert.privateKey()); DisposableServer server = HttpServer.create() .protocol(HttpProtocol.H2, HttpProtocol.HTTP11) .secure(ssl -> ssl.sslContext(serverOptions)) .port(8080) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bindNow(); new CountDownLatch(1).await(); server.disposeNow(); }
@Test @Ignore public void testH2Secure() throws Exception { SelfSignedCertificate cert = new SelfSignedCertificate(); SslContextBuilder serverOptions = SslContextBuilder.forServer(cert.certificate(), cert.privateKey()); DisposableServer server = HttpServer.create() .protocol(HttpProtocol.H2) .secure(ssl -> ssl.sslContext(serverOptions)) .port(8080) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bindNow(); new CountDownLatch(1).await(); server.disposeNow(); }
@Test @Ignore public void testHttp1or2Secure() throws Exception { SelfSignedCertificate cert = new SelfSignedCertificate(); SslContextBuilder serverOptions = SslContextBuilder.forServer(cert.certificate(), cert.privateKey()); DisposableServer server = HttpServer.create() .protocol(HttpProtocol.H2, HttpProtocol.HTTP11) .secure(ssl -> ssl.sslContext(serverOptions)) .port(8080) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bindNow(); new CountDownLatch(1).await(); server.disposeNow(); }
@Test @Ignore public void startProxyServer() { HttpServer server = HttpServer.create() .port(PROXY_PORT) .host("0.0.0.0"); server.route(routes -> routes.get("/0/**", this::proxy)) .wiretap(true) .bindNow(); }
private void setupServer() { httpServer = HttpServer.create() .port(0) .route(routes -> { routes.get("/get/{name}", getHandler()) .post("/post", postHandler()); }) .wiretap(true) .bindNow(); }
@Test @Ignore public void wsTest() { HttpServer server = HttpServer.create(); server.route(r -> r.get("/search/{search}", (in, out) -> HttpClient.create() .wiretap(true) .post() .uri("ws://localhost:3000") .send((requestOut, o) -> o.sendString(Mono.just("ping"))) .response((repliesOut, buf) -> out.sendGroups(buf.window(100))))) .wiretap(true) .bindNow() .onDispose() .block(Duration.ofSeconds(30)); }
@Test @Ignore public void startContentServer() { Random random = new Random(0); byte[] content = new byte[1024 * 10]; random.nextBytes(content); HttpServer server = HttpServer.create() .port(CONTENT_SERVER_PORT) .tcpConfiguration(tcpServer -> tcpServer.host("0.0.0.0") .option(ChannelOption.SO_LINGER, -1)); server.route(routes -> routes.get("/**", (req, res) -> res.header("Content-length", String.valueOf(content.length)) .header("Content-type", "application/octet-stream") .header("Connection", "Close") .sendByteArray(Flux.just(content)))) .wiretap(true) .bindNow(); }
@Test @Ignore public void proxyTest() { HttpServer server = HttpServer.create(); server.route(r -> r.get("/search/{search}", (in, out) -> HttpClient.create() .wiretap(true) .get() .uri("foaas.herokuapp.com/life/" + in.param("search")) .response((repliesOut, buf) -> out.send(buf)))) .wiretap(true) .bindNow() .onDispose() .block(Duration.ofSeconds(30)); }
@Test public void testMaxFramePayloadLengthFailed() { httpServer = HttpServer.create() .port(0) .handle((in, out) -> out.sendWebsocket((i, o) -> o.sendString(Mono.just("12345678901")))) .wiretap(true) .bindNow(); Mono<Void> response = HttpClient.create() .port(httpServer.address().getPort()) .websocket(10) .handle((in, out) -> in.receive() .asString() .map(srv -> srv)) .log() .then(); StepVerifier.create(response) .expectError(CorruptedFrameException.class) .verify(Duration.ofSeconds(30)); }
@Test public void simpleSubprotocolServerNoSubprotocol() { httpServer = HttpServer.create() .port(0) .handle((in, out) -> out.sendWebsocket((i, o) -> o.sendString( Mono.just("test")))) .wiretap(true) .bindNow(); StepVerifier.create( HttpClient.create() .port(httpServer.address().getPort()) .headers(h -> h.add("Authorization", auth)) .websocket("SUBPROTOCOL,OTHER") .uri("/test") .handle((i, o) -> i.receive().asString()) ) .verifyErrorMessage("Invalid subprotocol. Actual: null. Expected one of: SUBPROTOCOL,OTHER"); }
@Test public void testHttpSslH2CFails() throws Exception { SelfSignedCertificate cert = new SelfSignedCertificate(); SslContextBuilder serverOptions = SslContextBuilder.forServer(cert.certificate(), cert.privateKey()); StepVerifier.create( HttpServer.create() .protocol(HttpProtocol.H2C) .secure(ssl -> ssl.sslContext(serverOptions)) .handle((req, res) -> res.sendString(Mono.just("Hello"))) .wiretap(true) .bind() ).verifyErrorMessage("Configured H2 Clear-Text protocol with TLS. Use the non clear-text h2 protocol via HttpServer#protocol or disable TLS via HttpServer#tcpConfiguration(tcp -> tcp.noSSL())"); }
private void doTestIssue444(BiFunction<WebsocketInbound, WebsocketOutbound, Publisher<Void>> fn) { httpServer = HttpServer.create() .host("localhost") .port(0) .handle((req, res) -> res.sendWebsocket(null, fn)) .wiretap(true) .bindNow(); StepVerifier.create( HttpClient.create() .addressSupplier(() -> httpServer.address()) .wiretap(true) .websocket() .uri("/") .handle((i, o) -> i.receiveFrames() .then())) .expectComplete() .verify(Duration.ofSeconds(30)); }