@Test public void testServerWebsocketPongExceeds125Bytes() { testServerWebsocketPingPongCheck(255, ws -> { try { ws.writePong(Buffer.buffer(randomAlphaString(126))); } catch(Throwable expected) { assertEquals("Pong cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }
@Test public void testCloseStatusCodeFromServer() throws InterruptedException { CountDownLatch latch = new CountDownLatch(2); client = vertx.createHttpClient(); server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)) .websocketHandler(socket -> { socket.closeHandler(a -> { latch.countDown(); }); vertx.setTimer(1000, (ar) -> socket.close()); }) .listen(ar -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { ws.frameHandler(frame -> { assertEquals(1000, frame.binaryData().getByteBuf().getShort(0)); assertEquals(1000, frame.closeStatusCode()); assertNull(frame.closeReason()); latch.countDown(); }); }); }); awaitLatch(latch); }
@Test public void testServerWebsocketPingExceedsMaxFrameSize() { testServerWebsocketPingPongCheck(100, ws -> { try { ws.writePing(Buffer.buffer(randomAlphaString(101))); } catch(Throwable expected) { assertEquals("Ping cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }
@Test public void testCloseCustomPayloadFromServer() throws InterruptedException { final String REASON = "I'm moving away!"; final short STATUS_CODE = (short)1001; CountDownLatch latch = new CountDownLatch(2); client = vertx.createHttpClient(); server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)) .websocketHandler(socket -> { socket.closeHandler(a -> { latch.countDown(); }); vertx.setTimer(1000, (ar) -> socket.close(STATUS_CODE, REASON)); }) .listen(ar -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { ws.frameHandler(frame -> { assertEquals(REASON, frame.binaryData().getByteBuf().readerIndex(2).toString(StandardCharsets.UTF_8)); assertEquals(STATUS_CODE, frame.binaryData().getByteBuf().getShort(0)); assertEquals(REASON, frame.closeReason()); assertEquals(STATUS_CODE, frame.closeStatusCode()); latch.countDown(); }); }); }); awaitLatch(latch); }
@Test public void testServerWebsocketPingExceeds125Bytes() { testServerWebsocketPingPongCheck(255, ws -> { try { ws.writePing(Buffer.buffer(randomAlphaString(126))); } catch(Throwable expected) { assertEquals("Ping cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }
ws.close(); }); });
@Test public void testServerWebsocketPongExceedsMaxFrameSize() { testServerWebsocketPingPongCheck(100, ws -> { try { ws.writePong(Buffer.buffer(randomAlphaString(101))); } catch(Throwable expected) { assertEquals("Pong cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }
private SocketMessages testWriteTextMessages(List<String> messagesToSend, WebsocketVersion version) { String path = "/some/path"; server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)).websocketHandler(ws -> { for (String messageToSend : messagesToSend) { ws.writeTextMessage(messageToSend); } ws.close(); }); List<String> receivedMessages = new ArrayList<>(); List<Throwable> receivedExceptions = new ArrayList<>(); server.listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, ws -> { ws.textMessageHandler(receivedMessages::add); ws.exceptionHandler(receivedExceptions::add); ws.closeHandler(v -> testComplete()); }); }); await(); return new SocketMessages(receivedMessages, receivedExceptions); }
private void testWriteMessage(int size, WebsocketVersion version) { String path = "/some/path"; byte[] expected = TestUtils.randomByteArray(size); server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)).websocketHandler(ws -> { ws.writeBinaryMessage(Buffer.buffer(expected)); ws.close(); }); server.listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, ws -> { Buffer actual = Buffer.buffer(); ws.handler(actual::appendBuffer); ws.closeHandler(v -> { assertArrayEquals(expected, actual.getBytes(0, actual.length())); testComplete(); }); }); }); await(); }
private void testCloseCallHandlers(boolean local) { String path = "/some/path"; server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)).websocketHandler(ws -> { if (!local) { ws.close(); } }); AtomicInteger doneCount = new AtomicInteger(); server.listen(ar -> { assertTrue(ar.succeeded()); client.websocketStream(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null). endHandler(done -> doneCount.incrementAndGet()). handler(ws -> { assertEquals(0, doneCount.get()); boolean[] closed = new boolean[1]; ws.closeHandler(v -> { closed[0] = true; assertEquals(1, doneCount.get()); testComplete(); }); if (local) { vertx.runOnContext(v -> { ws.close(); }); } }); }); await(); }
@Override public void close() { vertxServerWebSocket.close(); } })
ws.handler(buff -> { ws.write(Buffer.buffer("helloworld")); ws.close(); }); };
assertFalse(paused.get()); ws.writeBinaryMessage(Buffer.buffer("whatever")); ws.close(); }); server.listen(listenAR -> {
@Test public void testWebSocket() { server = vertx.createHttpServer(); server.websocketHandler(ws -> { ws.write(Buffer.buffer("wibble")); ws.handler(buff -> ws.close()); }); server.listen(HttpTestBase.DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, ar -> { assertTrue(ar.succeeded()); client = vertx.createHttpClient(); client.websocket(HttpTestBase.DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/", ws -> { FakeHttpClientMetrics metrics = FakeMetricsBase.getMetrics(client); WebSocketMetric metric = metrics.getMetric(ws); assertNotNull(metric); assertNotNull(metric.soMetric); ws.closeHandler(closed -> { assertNull(metrics.getMetric(ws)); testComplete(); }); ws.handler(ws::write); }); }); await(); }
@Test public void testWebsocketAbs() { SelfSignedCertificate certificate = SelfSignedCertificate.create(); HttpServerOptions serverOptions = new HttpServerOptions().setPort(HttpTestBase.DEFAULT_HTTPS_PORT) .setSsl(true) .setKeyCertOptions(certificate.keyCertOptions()); HttpClientOptions clientOptions = new HttpClientOptions() .setTrustAll(true) .setVerifyHost(false); client = vertx.createHttpClient(clientOptions); server = vertx.createHttpServer(serverOptions).requestHandler(request -> { if ("/test".equals(request.path())) { request.upgrade().close(); } else { request.response().end(); } }).listen(onSuccess(server -> { String url = "wss://" + clientOptions.getDefaultHost() + ":" + HttpTestBase.DEFAULT_HTTPS_PORT + "/test"; client.websocketAbs(url, null, null, null, ws -> { ws.closeHandler(v -> { testComplete(); }); }, null); })); await(); }
@Test public void testClientWebSocketShouldBeClosedWhenTheClosedHandlerIsCalled() { server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)).websocketHandler(ws -> { vertx.setTimer(1000, id -> { ws.close(); }); }); server.listen(onSuccess(s -> { client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/someuri", ws -> { CheckingSender sender = new CheckingSender(vertx.getOrCreateContext(), ws); sender.send(); ws.closeHandler(v -> { Throwable failure = sender.close(); if (failure != null) { fail(failure); } else { testComplete(); } }); }); })); await(); }
@Test public void testServerWebsocketPingExceeds125Bytes() { testServerWebsocketPingPongCheck(255, ws -> { try { ws.writePing(Buffer.buffer(randomAlphaString(126))); } catch(Throwable expected) { assertEquals("Ping cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }
@Test public void testServerWebsocketPingExceedsMaxFrameSize() { testServerWebsocketPingPongCheck(100, ws -> { try { ws.writePing(Buffer.buffer(randomAlphaString(101))); } catch(Throwable expected) { assertEquals("Ping cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }
@Test public void testServerWebsocketPongExceeds125Bytes() { testServerWebsocketPingPongCheck(255, ws -> { try { ws.writePong(Buffer.buffer(randomAlphaString(126))); } catch(Throwable expected) { assertEquals("Pong cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }
@Test public void testServerWebsocketPongExceedsMaxFrameSize() { testServerWebsocketPingPongCheck(100, ws -> { try { ws.writePong(Buffer.buffer(randomAlphaString(101))); } catch(Throwable expected) { assertEquals("Pong cannot exceed maxWebSocketFrameSize or 125 bytes", expected.getMessage()); ws.close(); testComplete(); } }); }