Home / Class/ MultipleContentLengthHeadersTest Class — netty Architecture

MultipleContentLengthHeadersTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  c26a8de7_4130_e6d2_f18f_4d1697886c48["MultipleContentLengthHeadersTest"]
  a67cda0d_158e_7514_17a2_2b07e2e84af6["MultipleContentLengthHeadersTest.java"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|defined in| a67cda0d_158e_7514_17a2_2b07e2e84af6
  47b3cce3_2310_4483_b3e8_bc45d2c5d651["parameters()"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|method| 47b3cce3_2310_4483_b3e8_bc45d2c5d651
  ae76eb7b_1742_45c7_0ac1_d1ae4c4d694c["EmbeddedChannel()"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|method| ae76eb7b_1742_45c7_0ac1_d1ae4c4d694c
  eb2ff751_18ff_420a_0b38_d5c01cd3ad8d["testMultipleContentLengthHeadersBehavior()"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|method| eb2ff751_18ff_420a_0b38_d5c01cd3ad8d
  5eaa7b0c_ceaf_d4b9_c460_207d8aef506f["String()"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|method| 5eaa7b0c_ceaf_d4b9_c460_207d8aef506f
  c1083368_471b_daa5_248f_67e2f4fb575e["testDanglingComma()"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|method| c1083368_471b_daa5_248f_67e2f4fb575e
  acb91720_70b2_ead5_0dea_a9cdab479b34["assertValid()"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|method| acb91720_70b2_ead5_0dea_a9cdab479b34
  59b9c793_1d45_3e25_7705_a5c9975a5e6f["assertInvalid()"]
  c26a8de7_4130_e6d2_f18f_4d1697886c48 -->|method| 59b9c793_1d45_3e25_7705_a5c9975a5e6f

Relationship Graph

Source Code

codec-http/src/test/java/io/netty/handler/codec/http/MultipleContentLengthHeadersTest.java lines 35–121

public class MultipleContentLengthHeadersTest {

    static Collection<Object[]> parameters() {
        return Arrays.asList(new Object[][] {
                { false, false, false },
                { false, false, true },
                { false, true, false },
                { false, true, true },
                { true, false, false },
                { true, false, true },
                { true, true, false },
                { true, true, true }
        });
    }

    private static EmbeddedChannel newChannel(boolean allowDuplicateContentLengths) {
        HttpDecoderConfig config = new HttpDecoderConfig()
                .setAllowDuplicateContentLengths(allowDuplicateContentLengths);
        HttpRequestDecoder decoder = new HttpRequestDecoder(config);
        return new EmbeddedChannel(decoder);
    }

    @ParameterizedTest
    @MethodSource("parameters")
    public void testMultipleContentLengthHeadersBehavior(boolean allowDuplicateContentLengths,
                                                         boolean sameValue, boolean singleField) {
        EmbeddedChannel channel = newChannel(allowDuplicateContentLengths);
        String requestStr = setupRequestString(sameValue, singleField);
        assertTrue(channel.writeInbound(Unpooled.copiedBuffer(requestStr, CharsetUtil.US_ASCII)));
        HttpRequest request = channel.readInbound();

        if (allowDuplicateContentLengths) {
            if (sameValue) {
                assertValid(request);
                List<String> contentLengths = request.headers().getAll(HttpHeaderNames.CONTENT_LENGTH);
                assertThat(contentLengths).contains("1");
                LastHttpContent body = channel.readInbound();
                assertEquals(1, body.content().readableBytes());
                assertEquals("a", body.content().readCharSequence(1, CharsetUtil.US_ASCII).toString());
            } else {
                assertInvalid(request);
            }
        } else {
            assertInvalid(request);
        }
        assertFalse(channel.finish());
    }

    private static String setupRequestString(boolean sameValue, boolean singleField) {
        String firstValue = "1";
        String secondValue = sameValue ? firstValue : "2";
        String contentLength;
        if (singleField) {
            contentLength = "Content-Length: " + firstValue + ", " + secondValue + "\r\n\r\n";
        } else {
            contentLength = "Content-Length: " + firstValue + "\r\n" +
                            "Content-Length: " + secondValue + "\r\n\r\n";
        }
        return "PUT /some/path HTTP/1.1\r\n" +
               contentLength +
               "ab";
    }

    @Test
    public void testDanglingComma() {
        EmbeddedChannel channel = newChannel(false);
        String requestStr = "GET /some/path HTTP/1.1\r\n" +
                            "Content-Length: 1,\r\n" +
                            "Connection: close\r\n\r\n" +
                            "ab";
        assertTrue(channel.writeInbound(Unpooled.copiedBuffer(requestStr, CharsetUtil.US_ASCII)));
        HttpRequest request = channel.readInbound();
        assertInvalid(request);
        assertFalse(channel.finish());
    }

    private static void assertValid(HttpRequest request) {
        assertFalse(request.decoderResult().isFailure());
    }

    private static void assertInvalid(HttpRequest request) {

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free