@Test public void testParse128ByteBinaryCase1_2_5() { int length = 128; ByteBuffer expected = ByteBuffer.allocate(length + 5); expected.put(new byte[] {(byte) 0x82}); byte b = 0x00; // no masking b |= 0x7E; expected.put(b); expected.putShort((short) length); for (int i = 0; i < length; ++i) { expected.put("*".getBytes()); } expected.flip(); Parser parser = new UnitParser(policy); IncomingFramesCapture capture = new IncomingFramesCapture(); parser.setIncomingFramesHandler(capture); parser.parse(expected); capture.assertNoErrors(); capture.assertHasFrame(OpCode.BINARY, 1); Frame pActual = capture.getFrames().get(0); Assert.assertThat("BinaryFrame.payloadLength", pActual.getPayloadLength(), is(length)); // Assert.assertEquals("BinaryFrame.payload",length,pActual.getPayloadData().length); }
@Test public void testParse65536ByteBinaryCase1_2_7() { int length = 65536; ByteBuffer expected = ByteBuffer.allocate(length + 11); expected.put(new byte[] {(byte) 0x82}); byte b = 0x00; // no masking b |= 0x7F; expected.put(b); expected.put(new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}); for (int i = 0; i < length; ++i) { expected.put("*".getBytes()); } expected.flip(); WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER); policy.setMaxMessageSize(length); Parser parser = new UnitParser(policy); IncomingFramesCapture capture = new IncomingFramesCapture(); parser.setIncomingFramesHandler(capture); parser.parse(expected); capture.assertNoErrors(); capture.assertHasFrame(OpCode.BINARY, 1); Frame pActual = capture.getFrames().get(0); Assert.assertThat("BinaryFrame.payloadLength", pActual.getPayloadLength(), is(length)); // Assert.assertEquals("BinaryFrame.payload",length,pActual.getPayloadData().length); }
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 testParseEmptyBinaryCase1_2_1() { ByteBuffer expected = ByteBuffer.allocate(5); expected.put(new byte[] {(byte) 0x82, (byte) 0x00}); expected.flip(); Parser parser = new UnitParser(policy); IncomingFramesCapture capture = new IncomingFramesCapture(); parser.setIncomingFramesHandler(capture); parser.parse(expected); capture.assertNoErrors(); capture.assertHasFrame(OpCode.BINARY, 1); Frame pActual = capture.getFrames().get(0); Assert.assertThat("BinaryFrame.payloadLength", pActual.getPayloadLength(), is(0)); // Assert.assertNull("BinaryFrame.payload",pActual.getPayloadData()); }