@Override public S writeFinalBinaryFrame(Buffer data) { return (S) writeFrame(WebSocketFrame.binaryFrame(data, true)); }
@Override public S write(Buffer data) { synchronized (conn) { checkClosed(); writeFrame(WebSocketFrame.binaryFrame(data, true)); return (S) this; } }
@Test public void testWebsocketFrameFactoryArguments() throws Exception { assertNullPointerException(() -> WebSocketFrame.binaryFrame(null, true)); assertNullPointerException(() -> WebSocketFrame.textFrame(null, true)); assertNullPointerException(() -> WebSocketFrame.continuationFrame(null, true)); }
private void testWriteFromConnectHandler(WebsocketVersion version) throws Exception { String path = "/some/path"; Buffer buff = Buffer.buffer("AAA"); server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)).websocketHandler(ws -> { assertEquals(path, ws.path()); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); }); server.listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, ws -> { Buffer received = Buffer.buffer(); ws.handler(data -> { received.appendBuffer(data); if (received.length() == buff.length()) { assertEquals(buff, received); ws.close(); testComplete(); } }); }); }); await(); }
buff = Buffer.buffer(TestUtils.randomByteArray(bsize)); if (j == 0) { frame = WebSocketFrame.binaryFrame(buff, false); } else { frame = WebSocketFrame.continuationFrame(buff, j == frames - 1);
assertEquals("upgrade", ws.headers().get("Connection")); assertEquals("permessage-deflate;client_max_window_bits", ws.headers().get("sec-websocket-extensions")); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); });
private void testValidSubProtocol(WebsocketVersion version) throws Exception { String path = "/some/path"; String clientSubProtocols = "clientproto,commonproto"; String serverSubProtocols = "serverproto,commonproto"; Buffer buff = Buffer.buffer("AAA"); server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT).setWebsocketSubProtocols(serverSubProtocols)).websocketHandler(ws -> { assertEquals(path, ws.path()); assertNull(ws.subProtocol()); ws.accept(); assertEquals("commonproto", ws.subProtocol()); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); }); server.listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, clientSubProtocols, ws -> { assertEquals("commonproto", ws.subProtocol()); final Buffer received = Buffer.buffer(); ws.handler(data -> { received.appendBuffer(data); if (received.length() == buff.length()) { assertEquals(buff, received); ws.close(); testComplete(); } }); }); }); await(); }
assertEquals("upgrade", ws.headers().get("Connection")); assertEquals("deflate-frame", ws.headers().get("sec-websocket-extensions")); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); });
assertNull(ws.headers().get("sec-websocket-extensions")); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); });
@Override public S writeFinalBinaryFrame(Buffer data) { return (S) writeFrame(WebSocketFrame.binaryFrame(data, true)); }
ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); }; wsProvider.apply(client).
@Override public S write(Buffer data) { synchronized (conn) { checkClosed(); writeFrame(WebSocketFrame.binaryFrame(data, true)); return (S) this; } }
@Test public void testSplitLargeReplyRawWebSocket() throws InterruptedException { String serverPath = "/split"; String largeReply = TestUtils.randomAlphaString(65536 * 5); Buffer largeReplyBuffer = Buffer.buffer(largeReply); setupSockJsServer(serverPath, (sock, requestBuffer) -> { sock.write(largeReplyBuffer); sock.close(); }); Buffer totalReplyBuffer = Buffer.buffer(largeReplyBuffer.length()); AtomicInteger receivedReplies = new AtomicInteger(0); WebSocket ws = setupRawWebsocketClient(serverPath); ws.handler(replyBuffer -> { totalReplyBuffer.appendBuffer(replyBuffer); receivedReplies.incrementAndGet(); }); ws.writeFrame(WebSocketFrame.binaryFrame(Buffer.buffer("hello"), true)); await(5, TimeUnit.SECONDS); int receivedReplyCount = receivedReplies.get(); assertEquals("Combined reply on client should equal message from server", largeReplyBuffer, totalReplyBuffer); assertTrue("Should have received > 1 reply frame, actually received " + receivedReplyCount, receivedReplyCount > 1); }
@Test public void testWebsocketFrameFactoryArguments() throws Exception { assertNullPointerException(() -> WebSocketFrame.binaryFrame(null, true)); assertNullPointerException(() -> WebSocketFrame.textFrame(null, true)); assertNullPointerException(() -> WebSocketFrame.continuationFrame(null, true)); }
private void testWriteFromConnectHandler(WebsocketVersion version) throws Exception { String path = "/some/path"; Buffer buff = Buffer.buffer("AAA"); server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT)).websocketHandler(ws -> { assertEquals(path, ws.path()); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); }); server.listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, ws -> { Buffer received = Buffer.buffer(); ws.handler(data -> { received.appendBuffer(data); if (received.length() == buff.length()) { assertEquals(buff, received); ws.close(); testComplete(); } }); }); }); await(); }
/** * Writing multiple continuation frames from the client side should result in a single message on the server side * after the frames are re-combined */ @Test public void testCombineBinaryContinuationFramesRawWebSocket() throws InterruptedException { String serverPath = "/combine"; AtomicReference<Buffer> serverReceivedMessage = new AtomicReference<>(); setupSockJsServer(serverPath, (sock, requestBuffer) -> { serverReceivedMessage.set(requestBuffer); sock.write(Buffer.buffer("reply")); sock.close(); }); Buffer largeMessage = Buffer.buffer(TestUtils.randomAlphaString(30)); WebSocketFrame frame1 = WebSocketFrame.binaryFrame(largeMessage.slice(0, 10), false); WebSocketFrame frame2 = WebSocketFrame.continuationFrame(largeMessage.slice(10, 20), false); WebSocketFrame frame3 = WebSocketFrame.continuationFrame(largeMessage.slice(20, largeMessage.length()), true); WebSocket ws = setupRawWebsocketClient(serverPath); ws.writeFrame(frame1); ws.writeFrame(frame2); ws.writeFrame(frame3); await(5, TimeUnit.SECONDS); assertEquals("Server did not combine continuation frames correctly", largeMessage, serverReceivedMessage.get()); }
@Test public void testSendWebsocketContinuationFrames() { // Use raw websocket transport client.websocket("/echo/websocket", ws -> { int size = 65535; Buffer buffer1 = TestUtils.randomBuffer(size); Buffer buffer2 = TestUtils.randomBuffer(size); ws.writeFrame(io.vertx.core.http.WebSocketFrame.binaryFrame(buffer1, false)); ws.writeFrame(io.vertx.core.http.WebSocketFrame.continuationFrame(buffer2, true)); Buffer received = Buffer.buffer(); ws.handler(buff -> { received.appendBuffer(buff); if (received.length() == size * 2) { testComplete(); } }); }); await(); }
assertEquals("upgrade", ws.headers().get("Connection")); assertEquals("deflate-frame", ws.headers().get("sec-websocket-extensions")); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); });
private void testValidSubProtocol(WebsocketVersion version) throws Exception { String path = "/some/path"; String clientSubProtocols = "clientproto,commonproto"; String serverSubProtocols = "serverproto,commonproto"; Buffer buff = Buffer.buffer("AAA"); server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT).setWebsocketSubProtocols(serverSubProtocols)).websocketHandler(ws -> { assertEquals(path, ws.path()); assertNull(ws.subProtocol()); ws.accept(); assertEquals("commonproto", ws.subProtocol()); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); }); server.listen(ar -> { assertTrue(ar.succeeded()); client.websocket(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, clientSubProtocols, ws -> { assertEquals("commonproto", ws.subProtocol()); final Buffer received = Buffer.buffer(); ws.handler(data -> { received.appendBuffer(data); if (received.length() == buff.length()) { assertEquals(buff, received); ws.close(); testComplete(); } }); }); }); await(); }
assertEquals("upgrade", ws.headers().get("Connection")); assertEquals("permessage-deflate;client_max_window_bits", ws.headers().get("sec-websocket-extensions")); ws.writeFrame(WebSocketFrame.binaryFrame(buff, true)); });