private void testContinuationWriteFromConnectHandler(WebsocketVersion version) throws Exception { String path = "/some/path"; String firstFrame = "AAA"; String continuationFrame = "BBB"; server = vertx .createHttpServer(new HttpServerOptions().setPort(HttpTestBase.DEFAULT_HTTP_PORT)) .requestHandler( req -> { NetSocket sock = getUpgradedNetSocket(req, path); // Let's write a Text frame raw Buffer buff = Buffer.buffer(); buff.appendByte((byte) 0x01); // Incomplete Text frame buff.appendByte((byte) firstFrame.length()); buff.appendString(firstFrame); sock.write(buff); buff = Buffer.buffer(); buff.appendByte((byte) (0x00 | 0x80)); // Complete continuation frame buff.appendByte((byte) continuationFrame.length()); buff.appendString(continuationFrame); sock.write(buff); }); server.listen( ar -> { assertTrue(ar.succeeded()); client.connectWebsocket( HttpTestBase.DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, ws -> { AtomicBoolean receivedFirstFrame = new AtomicBoolean(); ws.frameHandler( received -> { Buffer receivedBuffer = Buffer.buffer(received.textData()); if (!received.isFinal()) { assertEquals(firstFrame, receivedBuffer.toString()); receivedFirstFrame.set(true); } else if (receivedFirstFrame.get() && received.isFinal()) { assertEquals(continuationFrame, receivedBuffer.toString()); ws.close(); testComplete(); } }); }); }); await(); }
@Test // Let's manually handle the websocket handshake and write a frame to the client public void testHandleWSManually() throws Exception { String path = "/some/path"; String message = "here is some text data"; server = vertx .createHttpServer(new HttpServerOptions().setPort(HttpTestBase.DEFAULT_HTTP_PORT)) .requestHandler( req -> { NetSocket sock = getUpgradedNetSocket(req, path); // Let's write a Text frame raw Buffer buff = Buffer.buffer(); buff.appendByte((byte) 129); // Text frame buff.appendByte((byte) message.length()); buff.appendString(message); sock.write(buff); }); server.listen( ar -> { assertTrue(ar.succeeded()); client .websocket(HttpTestBase.DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path) .exceptionHandler(t -> fail(t.getMessage())) .handler( ws -> { ws.handler( buff -> { assertEquals(message, buff.toString("UTF-8")); testComplete(); }); }); }); await(); }