Java Code Examples for io.netty.channel.embedded.EmbeddedChannel#readInbound()

The following examples show how to use io.netty.channel.embedded.EmbeddedChannel#readInbound() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SocksCmdResponseDecoderTest.java    From netty-4.1.22 with Apache License 2.0 6 votes vote down vote up
private static void testSocksCmdResponseDecoderWithDifferentParams(
        SocksCmdStatus cmdStatus, SocksAddressType addressType, String host, int port) {
    logger.debug("Testing cmdStatus: " + cmdStatus + " addressType: " + addressType);
    SocksResponse msg = new SocksCmdResponse(cmdStatus, addressType, host, port);
    SocksCmdResponseDecoder decoder = new SocksCmdResponseDecoder();
    EmbeddedChannel embedder = new EmbeddedChannel(decoder);
    SocksCommonTestUtils.writeMessageIntoEmbedder(embedder, msg);
    if (addressType == SocksAddressType.UNKNOWN) {
        assertTrue(embedder.readInbound() instanceof UnknownSocksResponse);
    } else {
        msg = embedder.readInbound();
        assertEquals(((SocksCmdResponse) msg).cmdStatus(), cmdStatus);
        if (host != null) {
            assertEquals(((SocksCmdResponse) msg).host(), host);
        }
        assertEquals(((SocksCmdResponse) msg).port(), port);
    }
    assertNull(embedder.readInbound());
}
 
Example 2
Source File: DelimiterBasedFrameDecoderTest.java    From netty-4.1.22 with Apache License 2.0 6 votes vote down vote up
@Test
public void testIncompleteLinesStrippedDelimiters() {
    EmbeddedChannel ch = new EmbeddedChannel(new DelimiterBasedFrameDecoder(8192, true,
            Delimiters.lineDelimiter()));
    ch.writeInbound(Unpooled.copiedBuffer("Test", Charset.defaultCharset()));
    assertNull(ch.readInbound());
    ch.writeInbound(Unpooled.copiedBuffer("Line\r\ng\r\n", Charset.defaultCharset()));

    ByteBuf buf = ch.readInbound();
    assertEquals("TestLine", buf.toString(Charset.defaultCharset()));

    ByteBuf buf2 = ch.readInbound();
    assertEquals("g", buf2.toString(Charset.defaultCharset()));
    assertNull(ch.readInbound());
    ch.finish();

    buf.release();
    buf2.release();
}
 
Example 3
Source File: Http2StreamFrameToHttpObjectCodecTest.java    From netty-4.1.22 with Apache License 2.0 6 votes vote down vote up
@Test
public void testDowngradeHeadersWithContentLength() throws Exception {
    EmbeddedChannel ch = new EmbeddedChannel(new Http2StreamFrameToHttpObjectCodec(true));
    Http2Headers headers = new DefaultHttp2Headers();
    headers.path("/");
    headers.method("GET");
    headers.setInt("content-length", 0);

    assertTrue(ch.writeInbound(new DefaultHttp2HeadersFrame(headers)));

    HttpRequest request = ch.readInbound();
    assertThat(request.uri(), is("/"));
    assertThat(request.method(), is(HttpMethod.GET));
    assertThat(request.protocolVersion(), is(HttpVersion.HTTP_1_1));
    assertFalse(request instanceof FullHttpRequest);
    assertFalse(HttpUtil.isTransferEncodingChunked(request));

    assertThat(ch.readInbound(), is(nullValue()));
    assertFalse(ch.finish());
}
 
Example 4
Source File: SmtpResponseDecoderTest.java    From netty-4.1.22 with Apache License 2.0 6 votes vote down vote up
@Test
public void testDecodeTwoLineResponseChunked() {
    EmbeddedChannel channel = newChannel();
    assertFalse(channel.writeInbound(newBuffer("200-")));
    assertFalse(channel.writeInbound(newBuffer("Hello\r\n2")));
    assertFalse(channel.writeInbound(newBuffer("00 Ok")));
    assertTrue(channel.writeInbound(newBuffer("\r\n")));
    assertTrue(channel.finish());

    SmtpResponse response = channel.readInbound();
    assertEquals(200, response.code());
    List<CharSequence> sequences = response.details();
    assertEquals(2, sequences.size());

    assertEquals("Hello", sequences.get(0).toString());
    assertEquals("Ok", sequences.get(1).toString());
    assertNull(channel.readInbound());
}
 
Example 5
Source File: BinaryMemcacheDecoderTest.java    From netty-4.1.22 with Apache License 2.0 6 votes vote down vote up
@Test
public void shouldRetainCurrentMessageWhenSendingItOut() {
    channel = new EmbeddedChannel(
            new BinaryMemcacheRequestEncoder(),
            new BinaryMemcacheRequestDecoder());

    ByteBuf key = Unpooled.copiedBuffer("Netty", CharsetUtil.UTF_8);
    ByteBuf extras = Unpooled.copiedBuffer("extras", CharsetUtil.UTF_8);
    BinaryMemcacheRequest request = new DefaultBinaryMemcacheRequest(key, extras);

    assertTrue(channel.writeOutbound(request));
    for (;;) {
        ByteBuf buffer = channel.readOutbound();
        if (buffer == null) {
            break;
        }
        channel.writeInbound(buffer);
    }
    BinaryMemcacheRequest read = channel.readInbound();
    read.release();
    // tearDown will call "channel.finish()"
}
 
Example 6
Source File: AbstractCompatibleMarshallingDecoderTest.java    From netty-4.1.22 with Apache License 2.0 6 votes vote down vote up
@Test
public void testSimpleUnmarshalling() throws IOException {
    MarshallerFactory marshallerFactory = createMarshallerFactory();
    MarshallingConfiguration configuration = createMarshallingConfig();

    EmbeddedChannel ch = new EmbeddedChannel(createDecoder(Integer.MAX_VALUE));

    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    Marshaller marshaller = marshallerFactory.createMarshaller(configuration);
    marshaller.start(Marshalling.createByteOutput(bout));
    marshaller.writeObject(testObject);
    marshaller.finish();
    marshaller.close();

    byte[] testBytes = bout.toByteArray();

    ch.writeInbound(input(testBytes));
    assertTrue(ch.finish());

    String unmarshalled = ch.readInbound();

    assertEquals(testObject, unmarshalled);

    assertNull(ch.readInbound());
}
 
Example 7
Source File: HttpObjectAggregatorTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
private static void runUnsupportedExceptHeaderExceptionTest(final boolean close) {
    final HttpObjectAggregator aggregator;
    final int maxContentLength = 4;
    if (close) {
        aggregator = new HttpObjectAggregator(maxContentLength, true);
    } else {
        aggregator = new HttpObjectAggregator(maxContentLength);
    }
    final EmbeddedChannel embedder = new EmbeddedChannel(new HttpRequestDecoder(), aggregator);

    assertFalse(embedder.writeInbound(Unpooled.copiedBuffer(
            "GET / HTTP/1.1\r\n" +
                    "Expect: chocolate=yummy\r\n" +
                    "Content-Length: 100\r\n\r\n", CharsetUtil.US_ASCII)));
    assertNull(embedder.readInbound());

    final FullHttpResponse response = embedder.readOutbound();
    assertEquals(HttpResponseStatus.EXPECTATION_FAILED, response.status());
    assertEquals("0", response.headers().get(HttpHeaderNames.CONTENT_LENGTH));
    response.release();

    if (close) {
        assertFalse(embedder.isOpen());
    } else {
        // keep-alive is on by default in HTTP/1.1, so the connection should be still alive
        assertTrue(embedder.isOpen());

        // the decoder should be reset by the aggregator at this point and be able to decode the next request
        assertTrue(embedder.writeInbound(Unpooled.copiedBuffer("GET / HTTP/1.1\r\n\r\n", CharsetUtil.US_ASCII)));

        final FullHttpRequest request = embedder.readInbound();
        assertThat(request.method(), is(HttpMethod.GET));
        assertThat(request.uri(), is("/"));
        assertThat(request.content().readableBytes(), is(0));
        request.release();
    }

    assertFalse(embedder.finish());
}
 
Example 8
Source File: HttpRequestDecoderTest.java    From netty4.0.27Learn with Apache License 2.0 5 votes vote down vote up
@Test
public void testEmptyHeaderValue() {
    EmbeddedChannel channel = new EmbeddedChannel(new HttpRequestDecoder());
    String crlf = "\r\n";
    String request =  "GET /some/path HTTP/1.1" + crlf +
            "Host: localhost" + crlf +
            "EmptyHeader:" + crlf + crlf;
    channel.writeInbound(Unpooled.wrappedBuffer(request.getBytes(CharsetUtil.US_ASCII)));
    HttpRequest req = (HttpRequest) channel.readInbound();
    assertEquals("", req.headers().get("EmptyHeader"));
}
 
Example 9
Source File: HttpInvalidMessageTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
@Test
public void testRequestWithBadHeader() throws Exception {
    EmbeddedChannel ch = new EmbeddedChannel(new HttpRequestDecoder());
    ch.writeInbound(Unpooled.copiedBuffer("GET /maybe-something HTTP/1.0\r\n", CharsetUtil.UTF_8));
    ch.writeInbound(Unpooled.copiedBuffer("Good_Name: Good Value\r\n", CharsetUtil.UTF_8));
    ch.writeInbound(Unpooled.copiedBuffer("Bad=Name: Bad Value\r\n", CharsetUtil.UTF_8));
    ch.writeInbound(Unpooled.copiedBuffer("\r\n", CharsetUtil.UTF_8));
    HttpRequest req = ch.readInbound();
    DecoderResult dr = req.decoderResult();
    assertFalse(dr.isSuccess());
    assertTrue(dr.isFailure());
    assertEquals("Good Value", req.headers().get(of("Good_Name")));
    assertEquals("/maybe-something", req.uri());
    ensureInboundTrafficDiscarded(ch);
}
 
Example 10
Source File: HttpInvalidMessageTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
@Test
public void testRequestWithBadInitialLine() throws Exception {
    EmbeddedChannel ch = new EmbeddedChannel(new HttpRequestDecoder());
    ch.writeInbound(Unpooled.copiedBuffer("GET / HTTP/1.0 with extra\r\n", CharsetUtil.UTF_8));
    HttpRequest req = ch.readInbound();
    DecoderResult dr = req.decoderResult();
    assertFalse(dr.isSuccess());
    assertTrue(dr.isFailure());
    ensureInboundTrafficDiscarded(ch);
}
 
Example 11
Source File: ZlibTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
private void testCompressNone(ZlibWrapper encoderWrapper, ZlibWrapper decoderWrapper) throws Exception {
    EmbeddedChannel chEncoder = new EmbeddedChannel(createEncoder(encoderWrapper));
    EmbeddedChannel chDecoderZlib = new EmbeddedChannel(createDecoder(decoderWrapper));

    try {
        // Closing an encoder channel without writing anything should generate both header and footer.
        assertTrue(chEncoder.finish());

        for (;;) {
            ByteBuf deflatedData = chEncoder.readOutbound();
            if (deflatedData == null) {
                break;
            }
            chDecoderZlib.writeInbound(deflatedData);
        }

        // Decoder should not generate anything at all.
        boolean decoded = false;
        for (;;) {
            ByteBuf buf = chDecoderZlib.readInbound();
            if (buf == null) {
                break;
            }

            buf.release();
            decoded = true;
        }
        assertFalse("should decode nothing", decoded);

        assertFalse(chDecoderZlib.finish());
    } finally {
        dispose(chEncoder);
        dispose(chDecoderZlib);
    }
}
 
Example 12
Source File: HttpServerCodecTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
@Test
public void testChunkedHeadResponse() {
    EmbeddedChannel ch = new EmbeddedChannel(new HttpServerCodec());

    // Send the request headers.
    assertTrue(ch.writeInbound(Unpooled.copiedBuffer(
            "HEAD / HTTP/1.1\r\n\r\n", CharsetUtil.UTF_8)));

    HttpRequest request = ch.readInbound();
    assertEquals(HttpMethod.HEAD, request.method());
    LastHttpContent content = ch.readInbound();
    assertFalse(content.content().isReadable());
    content.release();

    HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    HttpUtil.setTransferEncodingChunked(response, true);
    assertTrue(ch.writeOutbound(response));
    assertTrue(ch.writeOutbound(LastHttpContent.EMPTY_LAST_CONTENT));
    assertTrue(ch.finish());

    ByteBuf buf = ch.readOutbound();
    assertEquals("HTTP/1.1 200 OK\r\ntransfer-encoding: chunked\r\n\r\n", buf.toString(CharsetUtil.US_ASCII));
    buf.release();

    buf = ch.readOutbound();
    assertFalse(buf.isReadable());
    buf.release();

    assertFalse(ch.finishAndReleaseAll());
}
 
Example 13
Source File: StompFrameDecoderTestCase.java    From hazelcastmq with Apache License 2.0 5 votes vote down vote up
/**
 * Tests decoding a frame that is too long because of the header length.
 */
@Test
public void testDecodeFrame_LongHeaders() {

  int maxFrameSize = 2 * 1024;

  String header1 = "header1:";
  for (int i = 0; i < maxFrameSize / 2; ++i) {
    header1 += 'a';
  }
  String header2 = "header2:";
  for (int i = 0; i < maxFrameSize / 2; ++i) {
    header1 += 'b';
  }

  EmbeddedChannel ec =
      new EmbeddedChannel(new StompFrameDecoder(maxFrameSize));

  final byte[] body = "This is the body.".getBytes(UTF_8);

  ByteBuf buf = Unpooled.buffer();
  buf.writeBytes(Command.CONNECT.name().getBytes(UTF_8));
  buf.writeByte(LINE_FEED_CHAR);
  buf.writeBytes(header1.getBytes(UTF_8));
  buf.writeByte(LINE_FEED_CHAR);
  buf.writeBytes(header2.getBytes(UTF_8));
  buf.writeByte(LINE_FEED_CHAR);
  buf.writeByte(LINE_FEED_CHAR);
  buf.writeBytes(body);
  buf.writeByte(NULL_CHAR);
  ec.writeInbound(buf);

  Object actual = ec.readInbound();
  assertNotNull(actual);
  assertTrue(actual instanceof Frame);

  Frame actualFrame = (Frame) actual;
  assertTrue(actualFrame.getHeaders().getHeaderNames().contains(
      StompFrameDecoder.HEADER_BAD_REQUEST));
}
 
Example 14
Source File: HttpResponseDecoderTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
@Test
public void testGarbageHeaders() {
    // A response without headers - from https://github.com/netty/netty/issues/2103
    byte[] data = ("<html>\r\n" +
            "<head><title>400 Bad Request</title></head>\r\n" +
            "<body bgcolor=\"white\">\r\n" +
            "<center><h1>400 Bad Request</h1></center>\r\n" +
            "<hr><center>nginx/1.1.19</center>\r\n" +
            "</body>\r\n" +
            "</html>\r\n").getBytes();

    EmbeddedChannel ch = new EmbeddedChannel(new HttpResponseDecoder());

    ch.writeInbound(Unpooled.wrappedBuffer(data));

    // Garbage input should generate the 999 Unknown response.
    HttpResponse res = ch.readInbound();
    assertThat(res.protocolVersion(), sameInstance(HttpVersion.HTTP_1_0));
    assertThat(res.status().code(), is(999));
    assertThat(res.decoderResult().isFailure(), is(true));
    assertThat(res.decoderResult().isFinished(), is(true));
    assertThat(ch.readInbound(), is(nullValue()));

    // More garbage should not generate anything (i.e. the decoder discards anything beyond this point.)
    ch.writeInbound(Unpooled.wrappedBuffer(data));
    assertThat(ch.readInbound(), is(nullValue()));

    // Closing the connection should not generate anything since the protocol has been violated.
    ch.finish();
    assertThat(ch.readInbound(), is(nullValue()));
}
 
Example 15
Source File: HttpObjectAggregatorTest.java    From netty4.0.27Learn with Apache License 2.0 5 votes vote down vote up
@Test
public void testAggregateWithTrailer() {
    HttpObjectAggregator aggr = new HttpObjectAggregator(1024 * 1024);
    EmbeddedChannel embedder = new EmbeddedChannel(aggr);
    HttpRequest message = new DefaultHttpRequest(HttpVersion.HTTP_1_1,
            HttpMethod.GET, "http://localhost");
    HttpHeaders.setHeader(message, "X-Test", true);
    HttpHeaders.setTransferEncodingChunked(message);
    HttpContent chunk1 = new DefaultHttpContent(Unpooled.copiedBuffer("test", CharsetUtil.US_ASCII));
    HttpContent chunk2 = new DefaultHttpContent(Unpooled.copiedBuffer("test2", CharsetUtil.US_ASCII));
    LastHttpContent trailer = new DefaultLastHttpContent();
    trailer.trailingHeaders().set("X-Trailer", true);

    assertFalse(embedder.writeInbound(message));
    assertFalse(embedder.writeInbound(chunk1));
    assertFalse(embedder.writeInbound(chunk2));

    // this should trigger a channelRead event so return true
    assertTrue(embedder.writeInbound(trailer));
    assertTrue(embedder.finish());
    FullHttpRequest aggratedMessage = (FullHttpRequest) embedder.readInbound();
    assertNotNull(aggratedMessage);

    assertEquals(chunk1.content().readableBytes() + chunk2.content().readableBytes(),
            HttpHeaders.getContentLength(aggratedMessage));
    assertEquals(aggratedMessage.headers().get("X-Test"), Boolean.TRUE.toString());
    assertEquals(aggratedMessage.trailingHeaders().get("X-Trailer"), Boolean.TRUE.toString());
    checkContentBuffer(aggratedMessage);
    assertNull(embedder.readInbound());
}
 
Example 16
Source File: HttpClientUpgradeHandlerTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
@Test
public void testUpgradeRejected() {
    HttpClientUpgradeHandler.SourceCodec sourceCodec = new FakeSourceCodec();
    HttpClientUpgradeHandler.UpgradeCodec upgradeCodec = new FakeUpgradeCodec();
    HttpClientUpgradeHandler handler = new HttpClientUpgradeHandler(sourceCodec, upgradeCodec, 1024);
    UserEventCatcher catcher = new UserEventCatcher();
    EmbeddedChannel channel = new EmbeddedChannel(catcher);
    channel.pipeline().addFirst("upgrade", handler);

    assertTrue(
        channel.writeOutbound(new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "netty.io")));
    FullHttpRequest request = channel.readOutbound();

    assertEquals(2, request.headers().size());
    assertTrue(request.headers().contains(HttpHeaderNames.UPGRADE, "fancyhttp", false));
    assertTrue(request.headers().contains("connection", "upgrade", false));
    assertTrue(request.release());
    assertEquals(HttpClientUpgradeHandler.UpgradeEvent.UPGRADE_ISSUED, catcher.getUserEvent());

    HttpResponse upgradeResponse =
        new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.SWITCHING_PROTOCOLS);
    upgradeResponse.headers().add(HttpHeaderNames.UPGRADE, "fancyhttp");
    assertTrue(channel.writeInbound(new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK)));
    assertTrue(channel.writeInbound(LastHttpContent.EMPTY_LAST_CONTENT));

    assertEquals(HttpClientUpgradeHandler.UpgradeEvent.UPGRADE_REJECTED, catcher.getUserEvent());
    assertNull(channel.pipeline().get("upgrade"));

    HttpResponse response = channel.readInbound();
    assertEquals(HttpResponseStatus.OK, response.status());

    LastHttpContent last = channel.readInbound();
    assertEquals(LastHttpContent.EMPTY_LAST_CONTENT, last);
    assertFalse(last.release());
    assertFalse(channel.finish());
}
 
Example 17
Source File: HttpResponseDecoderTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
private static void testResponseWithContentLengthFragmented(byte[] header, int fragmentSize) {
    EmbeddedChannel ch = new EmbeddedChannel(new HttpResponseDecoder());
    // split up the header
    for (int a = 0; a < header.length;) {
        int amount = fragmentSize;
        if (a + amount > header.length) {
            amount = header.length -  a;
        }

        ch.writeInbound(Unpooled.wrappedBuffer(header, a, amount));
        a += amount;
    }
    byte[] data = new byte[10];
    for (int i = 0; i < data.length; i++) {
        data[i] = (byte) i;
    }
    ch.writeInbound(Unpooled.wrappedBuffer(data, 0, data.length / 2));
    ch.writeInbound(Unpooled.wrappedBuffer(data, 5, data.length / 2));

    HttpResponse res = ch.readInbound();
    assertThat(res.protocolVersion(), sameInstance(HttpVersion.HTTP_1_1));
    assertThat(res.status(), is(HttpResponseStatus.OK));

    HttpContent firstContent = ch.readInbound();
    assertThat(firstContent.content().readableBytes(), is(5));
    assertEquals(Unpooled.wrappedBuffer(data, 0, 5), firstContent.content());
    firstContent.release();

    LastHttpContent lastContent = ch.readInbound();
    assertEquals(5, lastContent.content().readableBytes());
    assertEquals(Unpooled.wrappedBuffer(data, 5, 5), lastContent.content());
    lastContent.release();

    assertThat(ch.finish(), is(false));
    assertThat(ch.readInbound(), is(nullValue()));
}
 
Example 18
Source File: HttpResponseDecoderTest.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
private static void testLastResponseWithTrailingHeaderFragmented(byte[] content, int fragmentSize) {
    EmbeddedChannel ch = new EmbeddedChannel(new HttpResponseDecoder());
    int headerLength = 47;
    // split up the header
    for (int a = 0; a < headerLength;) {
        int amount = fragmentSize;
        if (a + amount > headerLength) {
            amount = headerLength -  a;
        }

        // if header is done it should produce a HttpRequest
        boolean headerDone = a + amount == headerLength;
        assertEquals(headerDone, ch.writeInbound(Unpooled.wrappedBuffer(content, a, amount)));
        a += amount;
    }

    ch.writeInbound(Unpooled.wrappedBuffer(content, headerLength, content.length - headerLength));
    HttpResponse res = ch.readInbound();
    assertThat(res.protocolVersion(), sameInstance(HttpVersion.HTTP_1_1));
    assertThat(res.status(), is(HttpResponseStatus.OK));

    LastHttpContent lastContent = ch.readInbound();
    assertThat(lastContent.content().isReadable(), is(false));
    HttpHeaders headers = lastContent.trailingHeaders();
    assertEquals(1, headers.names().size());
    List<String> values = headers.getAll(of("Set-Cookie"));
    assertEquals(2, values.size());
    assertTrue(values.contains("t1=t1v1"));
    assertTrue(values.contains("t2=t2v2; Expires=Wed, 09-Jun-2021 10:18:14 GMT"));
    lastContent.release();

    assertThat(ch.finish(), is(false));
    assertThat(ch.readInbound(), is(nullValue()));
}
 
Example 19
Source File: StompFrameDecoderTestCase.java    From hazelcastmq with Apache License 2.0 5 votes vote down vote up
/**
 * Tests decoding a single, simple frame.
 */
@Test
public void testDecodeFrame() {

  EmbeddedChannel ec = new EmbeddedChannel(new StompFrameDecoder());

  final byte[] body = "This is the body.".getBytes(UTF_8);

  ByteBuf buf = Unpooled.buffer();
  buf.writeBytes(Command.CONNECT.name().getBytes(UTF_8));
  buf.writeByte(LINE_FEED_CHAR);
  buf.writeBytes("header1:value1".getBytes(UTF_8));
  buf.writeByte(LINE_FEED_CHAR);
  buf.writeByte(LINE_FEED_CHAR);
  buf.writeBytes(body);
  buf.writeByte(NULL_CHAR);
  ec.writeInbound(buf);

  Object actual = ec.readInbound();
  assertNotNull(actual);
  assertTrue(actual instanceof Frame);

  Frame actualFrame = (Frame) actual;
  assertEquals(Command.CONNECT, actualFrame.getCommand());
  assertEquals(1, actualFrame.getHeaders().getHeaderNames().size());
  assertTrue(actualFrame.getHeaders().getHeaderNames().contains("header1"));
  assertArrayEquals(body, actualFrame.getBody());
}
 
Example 20
Source File: WebSocketClientExtensionHandlerTest.java    From netty-4.1.22 with Apache License 2.0 4 votes vote down vote up
@Test
public void testMainSuccess() {
    // initialize
    when(mainHandshakerMock.newRequestData()).
            thenReturn(new WebSocketExtensionData("main", Collections.<String, String>emptyMap()));
    when(mainHandshakerMock.handshakeExtension(any(WebSocketExtensionData.class))).thenReturn(mainExtensionMock);
    when(fallbackHandshakerMock.newRequestData()).
            thenReturn(new WebSocketExtensionData("fallback", Collections.<String, String>emptyMap()));
    when(mainExtensionMock.rsv()).thenReturn(WebSocketExtension.RSV1);
    when(mainExtensionMock.newExtensionEncoder()).thenReturn(new DummyEncoder());
    when(mainExtensionMock.newExtensionDecoder()).thenReturn(new DummyDecoder());

    // execute
    EmbeddedChannel ch = new EmbeddedChannel(new WebSocketClientExtensionHandler(
            mainHandshakerMock, fallbackHandshakerMock));

    HttpRequest req = newUpgradeRequest(null);
    ch.writeOutbound(req);

    HttpRequest req2 = ch.readOutbound();
    List<WebSocketExtensionData> reqExts = WebSocketExtensionUtil.extractExtensions(
            req2.headers().get(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS));

    HttpResponse res = newUpgradeResponse("main");
    ch.writeInbound(res);

    HttpResponse res2 = ch.readInbound();
    List<WebSocketExtensionData> resExts = WebSocketExtensionUtil.extractExtensions(
            res2.headers().get(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS));

    // test
    assertEquals(2, reqExts.size());
    assertEquals("main", reqExts.get(0).name());
    assertEquals("fallback", reqExts.get(1).name());

    assertEquals(1, resExts.size());
    assertEquals("main", resExts.get(0).name());
    assertTrue(resExts.get(0).parameters().isEmpty());
    assertNotNull(ch.pipeline().get(DummyDecoder.class));
    assertNotNull(ch.pipeline().get(DummyEncoder.class) != null);

    verify(mainHandshakerMock).newRequestData();
    verify(mainHandshakerMock).handshakeExtension(any(WebSocketExtensionData.class));
    verify(fallbackHandshakerMock).newRequestData();
    verify(mainExtensionMock, atLeastOnce()).rsv();
    verify(mainExtensionMock).newExtensionEncoder();
    verify(mainExtensionMock).newExtensionDecoder();
}