private void testServerWebsocketPingPongCheck(int maxFrameSize, Consumer<ServerWebSocket> check) { server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { ws.pongHandler(buff -> fail()); check.accept(ws); }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> {}); })); await(); }
server.close(); server = vertx .createHttpServer(createBaseServerOptions().setIdleTimeout(400).setIdleTimeoutUnit(TimeUnit.MILLISECONDS)) .requestHandler( req -> {
@Test public void testServerWebsocketIdleTimeout() { server.close(); server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(DEFAULT_HTTP_HOST)); server.websocketHandler(ws -> {}).listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", ws -> { ws.closeHandler(v -> testComplete()); }); }); await(); }
@Test public void testClientWebsocketReceivePongExceedsMaxFrameSize() { String pingBody = randomAlphaString(113); Integer maxFrameSize = 64; Buffer ping1 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(0, maxFrameSize)); Buffer ping2 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(maxFrameSize, pingBody.length())); server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { try { ws.writeFrame(new WebSocketFrameImpl(FrameType.PONG, ping1.copy().getByteBuf(), false)); ws.writeFrame(new WebSocketFrameImpl(FrameType.PONG, ping2.copy().getByteBuf(), true)); } catch(Throwable t) { fail(t); } }).listen(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { List<Buffer> pongs = new ArrayList<>(); ws.pongHandler(pong -> { pongs.add(pong); if (pongs.size() == 2) { assertEquals(pongs, Arrays.asList(ping1, ping2)); testComplete(); } }); }); }); await(); }
@Test public void testServerWebsocketReceivePongExceedsMaxFrameSize() { String pingBody = randomAlphaString(113); Integer maxFrameSize = 64; Buffer ping1 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(0, maxFrameSize)); Buffer ping2 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(maxFrameSize, pingBody.length())); server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { List<Buffer> pongs = new ArrayList<>(); ws.pongHandler(pong -> { pongs.add(pong); if (pongs.size() == 2) { assertEquals(pongs, Arrays.asList(ping1, ping2)); testComplete(); } }); }).listen(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { try { ws.writeFrame(new WebSocketFrameImpl(FrameType.PONG, ping1.copy().getByteBuf(), false)); ws.writeFrame(new WebSocketFrameImpl(FrameType.PONG, ping2.copy().getByteBuf(), true)); } catch(Throwable t) { fail(t); } }); }); await(); }
@Test public void testClientWebsocketReceivePingExceedsMaxFrameSize() { String pingBody = randomAlphaString(113); Integer maxFrameSize = 64; Buffer ping1 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(0, maxFrameSize)); Buffer ping2 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(maxFrameSize, pingBody.length())); server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { List<Buffer> pongs = new ArrayList<>(); ws.pongHandler(pong -> { pongs.add(pong); if (pongs.size() == 2) { assertEquals(pongs, Arrays.asList(ping1, ping2)); testComplete(); } }); try { ws.writeFrame(new WebSocketFrameImpl(FrameType.PING, ping1.copy().getByteBuf(), false)); ws.writeFrame(new WebSocketFrameImpl(FrameType.PING, ping2.copy().getByteBuf(), true)); } catch(Throwable t) { fail(t); } }); })); await(); }
@Test public void testServerWebsocketPingPong() { server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST)); server.websocketHandler(ws -> { ws.pongHandler(buff -> { assertEquals("ping", buff.toString()); testComplete(); }); ws.writePing(Buffer.buffer("ping")); }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> {}); })); await(); }
@Test public void testServerWebsocketReceivePingExceedsMaxFrameSize() { String pingBody = randomAlphaString(113); Integer maxFrameSize = 64; Buffer ping1 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(0, maxFrameSize)); Buffer ping2 = Buffer.buffer(Buffer.buffer(pingBody.getBytes()).getBytes(maxFrameSize, pingBody.length())); server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { List<Buffer> pongs = new ArrayList<>(); ws.pongHandler(pong -> { pongs.add(pong); if (pongs.size() == 2) { assertEquals(pongs, Arrays.asList(ping1, ping2)); testComplete(); } }); try { ws.writeFrame(new WebSocketFrameImpl(FrameType.PING, ping1.copy().getByteBuf(), false)); ws.writeFrame(new WebSocketFrameImpl(FrameType.PING, ping2.copy().getByteBuf(), true)); } catch(Throwable t) { fail(t); } }); })); await(); }
@Test public void testClientWebsocketPingPong() { server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST)); server.websocketHandler(ws -> { }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { ws.pongHandler( pong -> { assertEquals("ping", pong.toString()); testComplete(); }); ws.writePing(Buffer.buffer("ping")); }); })); await(); }
@Test public void testServerConnectionClosed() throws Exception { server.close(); server = vertx.createHttpServer(createBaseServerOptions().setIdleTimeout(2)); server.requestHandler(req -> { FakeHttpServerMetrics metrics = FakeMetricsBase.getMetrics(server); HttpServerMetric metric = metrics.getMetric(req); assertNotNull(metric); assertFalse(metric.failed.get()); req.response().closeHandler(v -> { assertNull(metrics.getMetric(req)); assertTrue(metric.failed.get()); testComplete(); }); }); startServer(); client.getNow(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath", resp -> {}); await(); } }
@Test public void testServerWebsocketSendPingExceeds125Bytes() { //Netty will prevent us from encoding a pingBody greater than 126 bytes by silently throwing an error in the background String pingBody = randomAlphaString(126); Integer maxFrameSize = 256; server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { ws.pongHandler(buff -> fail()); ws.writeFrame(WebSocketFrame.pingFrame(Buffer.buffer(pingBody))); vertx.setTimer(2000, id -> testComplete()); }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> {}); })); await(); }
@Test public void testClientWebsocketSendPingExceeds125Bytes() { //Netty will prevent us from encoding a pingBody greater than 126 bytes by silently throwing an error in the background String pingBody = randomAlphaString(126); Integer maxFrameSize = 256; server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { ws.pongHandler(buffer -> fail()); ws.writeFrame(WebSocketFrame.pingFrame(Buffer.buffer(pingBody))); vertx.setTimer(2000, id -> testComplete()); }); })); await(); }
@Test public void testServerWebsocketSendPongExceeds125Bytes() { //Netty will prevent us from encoding a pingBody greater than 126 bytes by silently throwing an error in the background String pingBody = randomAlphaString(126); Integer maxFrameSize = 256; server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { ws.writeFrame(WebSocketFrame.pongFrame(Buffer.buffer(pingBody))); }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { ws.pongHandler(buff -> fail()); vertx.setTimer(2000, id -> testComplete()); }); })); await(); }
@Test public void testClientWebsocketSendPongExceeds125Bytes() { //Netty will prevent us from encoding a pingBody greater than 126 bytes by silently throwing an error in the background String pingBody = randomAlphaString(126); Integer maxFrameSize = 256; server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { ws.pongHandler(buff -> fail()); vertx.setTimer(2000, id -> testComplete()); }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { ws.writeFrame(WebSocketFrame.pongFrame(Buffer.buffer(pingBody))); }); })); await(); }
@Test public void testIdleTimeoutWithPartialH2CRequest() throws Exception { server.close(); server = vertx.createHttpServer(new HttpServerOptions() .setPort(DEFAULT_HTTP_PORT) .setHost(DEFAULT_HTTP_HOST) .setIdleTimeout(1)); server.requestHandler(req -> { testComplete(); }); startServer(); NetClient client = vertx.createNetClient(); client.connect(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, onSuccess(so -> { so.closeHandler(v -> { testComplete(); }); })); await(); }
@Test public void testIdleTimeoutInfiniteSkipOfControlCharactersState() throws Exception { server.close(); server = vertx.createHttpServer(new HttpServerOptions() .setPort(DEFAULT_HTTP_PORT) .setHost(DEFAULT_HTTP_HOST) .setIdleTimeout(1)); server.requestHandler(req -> { testComplete(); }); startServer(); NetClient client = vertx.createNetClient(); client.connect(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, onSuccess(so -> { long id = vertx.setPeriodic(1, timerID -> { so.write(Buffer.buffer().setInt(0, 0xD)); }); so.closeHandler(v -> { vertx.cancelTimer(id); testComplete(); }); })); await(); }
options.setSoLinger(soLinger); options.setUsePooledBuffers(usePooledBuffers); options.setIdleTimeout(idleTimeout); options.setSsl(ssl); options.setKeyCertOptions(keyCertOptions);
private void testServerWebsocketPingPongCheck(int maxFrameSize, Consumer<ServerWebSocket> check) { server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(HttpTestBase.DEFAULT_HTTP_HOST).setMaxWebsocketFrameSize(maxFrameSize)); server.websocketHandler(ws -> { ws.pongHandler(buff -> fail()); check.accept(ws); }).listen(onSuccess(v -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> {}); })); await(); }
@Test public void testServerWebsocketIdleTimeout() { server.close(); server = vertx.createHttpServer(new HttpServerOptions().setIdleTimeout(1).setPort(DEFAULT_HTTP_PORT).setHost(DEFAULT_HTTP_HOST)); server.websocketHandler(ws -> {}).listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", ws -> { ws.closeHandler(v -> testComplete()); }); }); await(); }
assertEquals(options, options.setIdleTimeout(10)); assertEquals(10, options.getIdleTimeout()); assertIllegalArgumentException(() -> options.setIdleTimeout(-1));