private void assertIncoming(byte[] raw, String... expectedTextDatas) { WebSocketPolicy policy = WebSocketPolicy.newClientPolicy(); DeflateFrameExtension ext = new DeflateFrameExtension(); ext.setBufferPool(bufferPool); ext.setPolicy(policy); ExtensionConfig config = ExtensionConfig.parse("deflate-frame"); ext.setConfig(config); // Setup capture of incoming frames IncomingFramesCapture capture = new IncomingFramesCapture(); // Wire up stack ext.setNextIncomingFrames(capture); Parser parser = new UnitParser(policy); parser.configureFromExtensions(Collections.singletonList(ext)); parser.setIncomingFramesHandler(ext); parser.parse(ByteBuffer.wrap(raw)); int len = expectedTextDatas.length; capture.assertFrameCount(len); capture.assertHasFrame(OpCode.TEXT, len); int i = 0; for (WebSocketFrame actual : capture.getFrames()) { String prefix = "Frame[" + i + "]"; Assert.assertThat(prefix + ".opcode", actual.getOpCode(), is(OpCode.TEXT)); Assert.assertThat(prefix + ".fin", actual.isFin(), is(true)); Assert.assertThat( prefix + ".rsv1", actual.isRsv1(), is(false)); // RSV1 should be unset at this point Assert.assertThat(prefix + ".rsv2", actual.isRsv2(), is(false)); Assert.assertThat(prefix + ".rsv3", actual.isRsv3(), is(false)); ByteBuffer expected = BufferUtil.toBuffer(expectedTextDatas[i], StandardCharsets.UTF_8); Assert.assertThat( prefix + ".payloadLength", actual.getPayloadLength(), is(expected.remaining())); ByteBufferAssert.assertEquals(prefix + ".payload", expected, actual.getPayload().slice()); i++; } }
@Test public void testCompress_TimeTimeTime() { // What pywebsocket produces for "time:", "time:", "time:" String expected[] = new String[] {"2AC9CC4DB50200", "2A01110000", "02130000"}; // Lets see what we produce CapturedHexPayloads capture = new CapturedHexPayloads(); DeflateFrameExtension ext = new DeflateFrameExtension(); init(ext); ext.setNextOutgoingFrames(capture); ext.outgoingFrame(new TextFrame().setPayload("time:"), null); ext.outgoingFrame(new TextFrame().setPayload("time:"), null); ext.outgoingFrame(new TextFrame().setPayload("time:"), null); List<String> actual = capture.getCaptured(); Assert.assertThat("Compressed Payloads", actual, contains(expected)); }
@Test public void testGeneratedTwoFrames() throws IOException { WebSocketPolicy policy = WebSocketPolicy.newClientPolicy(); DeflateFrameExtension ext = new DeflateFrameExtension(); ext.setBufferPool(bufferPool); ext.setPolicy(policy); ext.setConfig(new ExtensionConfig(ext.getName())); boolean validating = true; Generator generator = new Generator(policy, bufferPool, validating); generator.configureFromExtensions(Collections.singletonList(ext)); OutgoingNetworkBytesCapture capture = new OutgoingNetworkBytesCapture(generator); ext.setNextOutgoingFrames(capture); ext.outgoingFrame(new TextFrame().setPayload("Hello"), null); ext.outgoingFrame(new TextFrame().setPayload("There"), null); capture.assertBytes(0, "c107f248cdc9c90700"); }
private void assertOutgoing(String text, String expectedHex) throws IOException { WebSocketPolicy policy = WebSocketPolicy.newClientPolicy(); DeflateFrameExtension ext = new DeflateFrameExtension(); ext.setBufferPool(bufferPool); ext.setPolicy(policy); ExtensionConfig config = ExtensionConfig.parse("deflate-frame"); ext.setConfig(config); boolean validating = true; Generator generator = new Generator(policy, bufferPool, validating); generator.configureFromExtensions(Collections.singletonList(ext)); OutgoingNetworkBytesCapture capture = new OutgoingNetworkBytesCapture(generator); ext.setNextOutgoingFrames(capture); Frame frame = new TextFrame().setPayload(text); ext.outgoingFrame(frame, null); capture.assertBytes(0, expectedHex); }
private void init(DeflateFrameExtension ext) { ext.setConfig(new ExtensionConfig(ext.getName())); ext.setBufferPool(bufferPool); }