Home / Class/ HttpObjectAggregatorTest Class — netty Architecture

HttpObjectAggregatorTest Class — netty Architecture

Architecture documentation for the HttpObjectAggregatorTest class in HttpObjectAggregatorTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  32ca569a_2b67_1114_bbc8_cbf703c91b95["HttpObjectAggregatorTest"]
  94b2d75a_c325_1868_32e3_692b8b667460["HttpObjectAggregatorTest.java"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|defined in| 94b2d75a_c325_1868_32e3_692b8b667460
  84ea6286_ce88_84cf_2f0e_d7add8f4a4d9["testAggregate()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 84ea6286_ce88_84cf_2f0e_d7add8f4a4d9
  289e67e4_9cfc_4a06_6bad_12c03f6651f2["checkContentBuffer()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 289e67e4_9cfc_4a06_6bad_12c03f6651f2
  87e256f9_170c_799e_8d36_6963bfef5eb1["testAggregateWithTrailer()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 87e256f9_170c_799e_8d36_6963bfef5eb1
  77091911_9ba2_becf_e89f_0fa1b61b0e23["testOversizedRequest()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 77091911_9ba2_becf_e89f_0fa1b61b0e23
  fd9d88d3_6871_fab2_bb3f_a3da53993413["testOversizedRequestWithContentLengthAndDecoder()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| fd9d88d3_6871_fab2_bb3f_a3da53993413
  74fa9a9e_5547_481f_cc41_e227342addd5["testOversizedRequestWithoutKeepAlive()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 74fa9a9e_5547_481f_cc41_e227342addd5
  e23ca9e3_8fa9_d29f_1c74_6f186c512d14["testOversizedRequestWithContentLength()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| e23ca9e3_8fa9_d29f_1c74_6f186c512d14
  3844a065_7276_ef08_d306_ec1b2cc87bed["checkOversizedRequest()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 3844a065_7276_ef08_d306_ec1b2cc87bed
  6b3c607b_13cb_135d_4e47_27768799031e["serverShouldCloseConnection()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 6b3c607b_13cb_135d_4e47_27768799031e
  5b4416f5_175e_1c4d_3014_ed7bd5269f81["testOversizedResponse()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 5b4416f5_175e_1c4d_3014_ed7bd5269f81
  0cb88b3f_cdbe_2024_c05c_3dd1a62f5b3b["testInvalidConstructorUsage()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 0cb88b3f_cdbe_2024_c05c_3dd1a62f5b3b
  e385de3d_e71f_1bf7_d37a_8cc707815bc6["testInvalidMaxCumulationBufferComponents()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| e385de3d_e71f_1bf7_d37a_8cc707815bc6
  4d2bb319_2794_8c4d_2cc6_d679f29a4ca9["testSetMaxCumulationBufferComponentsAfterInit()"]
  32ca569a_2b67_1114_bbc8_cbf703c91b95 -->|method| 4d2bb319_2794_8c4d_2cc6_d679f29a4ca9

Relationship Graph

Source Code

codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java lines 47–771

public class HttpObjectAggregatorTest {

    @Test
    public void testAggregate() {
        HttpObjectAggregator aggr = new HttpObjectAggregator(1024 * 1024);
        EmbeddedChannel embedder = new EmbeddedChannel(aggr);

        HttpRequest message = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "http://localhost");
        message.headers().set(of("X-Test"), true);
        HttpContent chunk1 = new DefaultHttpContent(Unpooled.copiedBuffer("test", CharsetUtil.US_ASCII));
        HttpContent chunk2 = new DefaultHttpContent(Unpooled.copiedBuffer("test2", CharsetUtil.US_ASCII));
        HttpContent chunk3 = new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER);
        assertFalse(embedder.writeInbound(message));
        assertFalse(embedder.writeInbound(chunk1));
        assertFalse(embedder.writeInbound(chunk2));

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

        assertEquals(chunk1.content().readableBytes() + chunk2.content().readableBytes(),
                HttpUtil.getContentLength(aggregatedMessage));
        assertEquals(Boolean.TRUE.toString(), aggregatedMessage.headers().get(of("X-Test")));
        checkContentBuffer(aggregatedMessage);
        assertNull(embedder.readInbound());
    }

    private static void checkContentBuffer(FullHttpRequest aggregatedMessage) {
        CompositeByteBuf buffer = (CompositeByteBuf) aggregatedMessage.content();
        assertEquals(2, buffer.numComponents());
        List<ByteBuf> buffers = buffer.decompose(0, buffer.capacity());
        assertEquals(2, buffers.size());
        for (ByteBuf buf: buffers) {
            // This should be false as we decompose the buffer before to not have deep hierarchy
            assertFalse(buf instanceof CompositeByteBuf);
        }
        aggregatedMessage.release();
    }

    @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");
        message.headers().set(of("X-Test"), true);
        HttpUtil.setTransferEncodingChunked(message, true);
        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(of("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 aggregatedMessage = embedder.readInbound();
        assertNotNull(aggregatedMessage);

        assertEquals(chunk1.content().readableBytes() + chunk2.content().readableBytes(),
                HttpUtil.getContentLength(aggregatedMessage));
        assertEquals(Boolean.TRUE.toString(), aggregatedMessage.headers().get(of("X-Test")));
        assertEquals(Boolean.TRUE.toString(), aggregatedMessage.trailingHeaders().get(of("X-Trailer")));
        checkContentBuffer(aggregatedMessage);
        assertNull(embedder.readInbound());
    }

    @Test
    public void testOversizedRequest() {
        final EmbeddedChannel embedder = new EmbeddedChannel(new HttpObjectAggregator(4));
        HttpRequest message = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.PUT, "http://localhost");
        HttpContent chunk1 = new DefaultHttpContent(Unpooled.copiedBuffer("test", CharsetUtil.US_ASCII));
        HttpContent chunk2 = new DefaultHttpContent(Unpooled.copiedBuffer("test2", CharsetUtil.US_ASCII));
        final HttpContent chunk3 = LastHttpContent.EMPTY_LAST_CONTENT;

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

Frequently Asked Questions

What is the HttpObjectAggregatorTest class?
HttpObjectAggregatorTest is a class in the netty codebase, defined in codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java.
Where is HttpObjectAggregatorTest defined?
HttpObjectAggregatorTest is defined in codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java at line 47.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free