/** Incoming PING (Control Frame) should pass through extension unmodified */ @Test public void testIncomingPing() { IncomingFramesCapture capture = new IncomingFramesCapture(); FragmentExtension ext = new FragmentExtension(); ext.setBufferPool(new MappedByteBufferPool()); ext.setPolicy(WebSocketPolicy.newServerPolicy()); ExtensionConfig config = ExtensionConfig.parse("fragment;maxLength=4"); ext.setConfig(config); ext.setNextIncomingFrames(capture); String payload = "Are you there?"; Frame ping = WebSocketFrame.ping().setPayload(payload); ext.incomingFrame(ping); capture.assertFrameCount(1); capture.assertHasFrame(OpCode.PING, 1); WebSocketFrame actual = capture.getFrames().getFirst(); Assert.assertThat("Frame.opcode", actual.getOpCode(), is(OpCode.PING)); Assert.assertThat("Frame.fin", actual.isFin(), is(true)); Assert.assertThat("Frame.rsv1", actual.isRsv1(), is(false)); Assert.assertThat("Frame.rsv2", actual.isRsv2(), is(false)); Assert.assertThat("Frame.rsv3", actual.isRsv3(), is(false)); ByteBuffer expected = BufferUtil.toBuffer(payload, StringUtil.__UTF8_CHARSET); Assert.assertThat("Frame.payloadLength", actual.getPayloadLength(), is(expected.remaining())); ByteBufferAssert.assertEquals("Frame.payload", expected, actual.getPayload().slice()); }
@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); }
@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); }
/** Verify that incoming frames are passed thru without modification */ @Test public void testIncomingFrames() { IncomingFramesCapture capture = new IncomingFramesCapture(); FragmentExtension ext = new FragmentExtension(); ext.setBufferPool(new MappedByteBufferPool()); ext.setPolicy(WebSocketPolicy.newClientPolicy()); ExtensionConfig config = ExtensionConfig.parse("fragment;maxLength=4"); ext.setConfig(config); ext.setNextIncomingFrames(capture); // Quote List<String> quote = new ArrayList<>(); quote.add("No amount of experimentation can ever prove me right;"); quote.add("a single experiment can prove me wrong."); quote.add("-- Albert Einstein"); // Manually create frame and pass into extension for (String q : quote) { Frame frame = WebSocketFrame.text(q); ext.incomingFrame(frame); } int len = quote.size(); capture.assertFrameCount(len); capture.assertHasFrame(OpCode.TEXT, len); String prefix; for (int i = 0; i < len; i++) { prefix = "Frame[" + i + "]"; WebSocketFrame actual = capture.getFrames().get(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)); Assert.assertThat(prefix + ".rsv2", actual.isRsv2(), is(false)); Assert.assertThat(prefix + ".rsv3", actual.isRsv3(), is(false)); ByteBuffer expected = BufferUtil.toBuffer(quote.get(i), StringUtil.__UTF8_CHARSET); Assert.assertThat( prefix + ".payloadLength", actual.getPayloadLength(), is(expected.remaining())); ByteBufferAssert.assertEquals(prefix + ".payload", expected, actual.getPayload().slice()); } }
@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()); }