コード例 #1
0
  /** Outgoing PING (Control Frame) should pass through extension unmodified */
  @Test
  public void testOutgoingPing() throws IOException {
    OutgoingFramesCapture capture = new OutgoingFramesCapture();

    FragmentExtension ext = new FragmentExtension();
    ext.setBufferPool(new MappedByteBufferPool());
    ext.setPolicy(WebSocketPolicy.newServerPolicy());
    ExtensionConfig config = ExtensionConfig.parse("fragment;maxLength=4");
    ext.setConfig(config);

    ext.setNextOutgoingFrames(capture);

    String payload = "Are you there?";
    Frame ping = WebSocketFrame.ping().setPayload(payload);

    ext.outgoingFrame(ping, null);

    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());
  }
コード例 #2
0
  /** Verify that outgoing text frames are fragmented by default configuration */
  @Test
  public void testOutgoingFramesDefaultConfig() throws IOException {
    OutgoingFramesCapture capture = new OutgoingFramesCapture();

    FragmentExtension ext = new FragmentExtension();
    ext.setBufferPool(new MappedByteBufferPool());
    ext.setPolicy(WebSocketPolicy.newServerPolicy());
    ExtensionConfig config = ExtensionConfig.parse("fragment");
    ext.setConfig(config);

    ext.setNextOutgoingFrames(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");

    // Write quote as separate frames
    for (String section : quote) {
      Frame frame = WebSocketFrame.text(section);
      ext.outgoingFrame(frame, null);
    }

    // Expected Frames
    List<WebSocketFrame> expectedFrames = new ArrayList<>();
    expectedFrames.add(
        new WebSocketFrame(OpCode.TEXT)
            .setPayload("No amount of experimentation can ever prove me right;"));
    expectedFrames.add(
        new WebSocketFrame(OpCode.TEXT).setPayload("a single experiment can prove me wrong."));
    expectedFrames.add(new WebSocketFrame(OpCode.TEXT).setPayload("-- Albert Einstein"));

    // capture.dump();

    int len = expectedFrames.size();
    capture.assertFrameCount(len);

    String prefix;
    LinkedList<WebSocketFrame> frames = capture.getFrames();
    for (int i = 0; i < len; i++) {
      prefix = "Frame[" + i + "]";
      WebSocketFrame actualFrame = frames.get(i);
      WebSocketFrame expectedFrame = expectedFrames.get(i);

      // Validate Frame
      Assert.assertThat(prefix + ".opcode", actualFrame.getOpCode(), is(expectedFrame.getOpCode()));
      Assert.assertThat(prefix + ".fin", actualFrame.isFin(), is(expectedFrame.isFin()));
      Assert.assertThat(prefix + ".rsv1", actualFrame.isRsv1(), is(expectedFrame.isRsv1()));
      Assert.assertThat(prefix + ".rsv2", actualFrame.isRsv2(), is(expectedFrame.isRsv2()));
      Assert.assertThat(prefix + ".rsv3", actualFrame.isRsv3(), is(expectedFrame.isRsv3()));

      // Validate Payload
      ByteBuffer expectedData = expectedFrame.getPayload().slice();
      ByteBuffer actualData = actualFrame.getPayload().slice();

      Assert.assertThat(
          prefix + ".payloadLength", actualData.remaining(), is(expectedData.remaining()));
      ByteBufferAssert.assertEquals(prefix + ".payload", expectedData, actualData);
    }
  }