Home / Class/ HpackEncoderTest Class — netty Architecture

HpackEncoderTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  a8203e54_7e3c_740d_20fe_825ed86c66af["HpackEncoderTest"]
  5c5c1a6d_f195_a0ab_d758_37abca4af4c2["HpackEncoderTest.java"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|defined in| 5c5c1a6d_f195_a0ab_d758_37abca4af4c2
  470701ff_6203_ec64_a9aa_fa93516aceaf["setUp()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 470701ff_6203_ec64_a9aa_fa93516aceaf
  4ce7582a_8b03_a475_40c7_c2bac29131c9["teardown()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 4ce7582a_8b03_a475_40c7_c2bac29131c9
  68c2af6f_17f0_b829_84e4_384ec7de7fdc["testSetMaxHeaderTableSizeToMaxValue()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 68c2af6f_17f0_b829_84e4_384ec7de7fdc
  f2865c5a_ad76_cbc1_e0ba_62d709eab14e["testSetMaxHeaderTableSizeOverflow()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| f2865c5a_ad76_cbc1_e0ba_62d709eab14e
  9fb11e02_7623_e2ef_c847_6cc3a6059c06["testWillEncode16MBHeaderByDefault()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 9fb11e02_7623_e2ef_c847_6cc3a6059c06
  97e22a27_ac85_6f28_0bb3_0d1fa3a5d4e8["testSetMaxHeaderListSizeEnforcedAfterSet()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 97e22a27_ac85_6f28_0bb3_0d1fa3a5d4e8
  eea3cbdd_092d_ee1e_90b1_3bf1e7b07012["testEncodeUsingBothStaticAndDynamicTable()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| eea3cbdd_092d_ee1e_90b1_3bf1e7b07012
  26c508db_a097_2583_22b5_c3ec0d83ed48["testSameHeaderNameMultipleValues()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 26c508db_a097_2583_22b5_c3ec0d83ed48
  0a28c169_0429_5002_7cc5_b71bc0367658["testEviction()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 0a28c169_0429_5002_7cc5_b71bc0367658
  37b10d67_ec58_a660_a4eb_b02533fd5e46["testTableResize()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 37b10d67_ec58_a660_a4eb_b02533fd5e46
  0ddbcc11_a023_ae99_a0d4_a5f7a1ae8c35["testManyHeaderCombinations()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 0ddbcc11_a023_ae99_a0d4_a5f7a1ae8c35
  08c8f3da_5b00_c314_45af_0f086ae7ca49["testSanitization()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| 08c8f3da_5b00_c314_45af_0f086ae7ca49
  b00b41c0_19cc_fa2e_f410_2d01e52c0fdd["verifyHeaderValueSanitization()"]
  a8203e54_7e3c_740d_20fe_825ed86c66af -->|method| b00b41c0_19cc_fa2e_f410_2d01e52c0fdd

Relationship Graph

Source Code

codec-http2/src/test/java/io/netty/handler/codec/http2/HpackEncoderTest.java lines 34–281

public class HpackEncoderTest {
    private HpackDecoder hpackDecoder;
    private HpackEncoder hpackEncoder;
    private Http2Headers mockHeaders;
    private ByteBuf buf;

    @BeforeEach
    public void setUp() {
        hpackEncoder = new HpackEncoder();
        hpackDecoder = new HpackDecoder(DEFAULT_HEADER_LIST_SIZE);
        mockHeaders = mock(Http2Headers.class);
        buf = Unpooled.buffer();
    }

    @AfterEach
    public void teardown() {
        buf.release();
    }

    @Test
    public void testSetMaxHeaderTableSizeToMaxValue() throws Http2Exception {
        hpackEncoder.setMaxHeaderTableSize(buf, MAX_HEADER_TABLE_SIZE);
        hpackDecoder.setMaxHeaderTableSize(MAX_HEADER_TABLE_SIZE);
        hpackDecoder.decode(0, buf, mockHeaders, true);
        assertEquals(MAX_HEADER_TABLE_SIZE, hpackDecoder.getMaxHeaderTableSize());
    }

    @Test
    public void testSetMaxHeaderTableSizeOverflow() {
        assertThrows(Http2Exception.class, new Executable() {
            @Override
            public void execute() throws Throwable {
                hpackEncoder.setMaxHeaderTableSize(buf, MAX_HEADER_TABLE_SIZE + 1);
            }
        });
    }

    /**
     * The encoder should not impose an arbitrary limit on the header size if
     * the server has not specified any limit.
     * @throws Http2Exception
     */
    @Test
    public void testWillEncode16MBHeaderByDefault() throws Http2Exception {
        String bigHeaderName = "x-big-header";
        int bigHeaderSize = 1024 * 1024 * 16;
        String bigHeaderVal = new String(new char[bigHeaderSize]).replace('\0', 'X');
        Http2Headers headersIn = new DefaultHttp2Headers().add(
                "x-big-header", bigHeaderVal);
        Http2Headers headersOut = new DefaultHttp2Headers();

        hpackEncoder.encodeHeaders(0, buf, headersIn, Http2HeadersEncoder.NEVER_SENSITIVE);
        hpackDecoder.setMaxHeaderListSize(bigHeaderSize + 1024);
        hpackDecoder.decode(0, buf, headersOut, false);
        assertEquals(headersOut.get(bigHeaderName).toString(), bigHeaderVal);
    }

    @Test
    public void testSetMaxHeaderListSizeEnforcedAfterSet() throws Http2Exception {
        final Http2Headers headers = new DefaultHttp2Headers().add(
                "x-big-header",
                new String(new char[1024 * 16]).replace('\0', 'X')
        );

        hpackEncoder.setMaxHeaderListSize(1000);

        assertThrows(Http2Exception.class, new Executable() {
            @Override
            public void execute() throws Throwable {
                hpackEncoder.encodeHeaders(0, buf, headers, Http2HeadersEncoder.NEVER_SENSITIVE);
            }
        });
    }

    @Test
    public void testEncodeUsingBothStaticAndDynamicTable() throws Http2Exception {
        final Http2Headers headers = new DefaultHttp2Headers()
          // :method -> POST is found in the static table.
          .add(":method", "POST")

          // ":path" is found in the static table but only matches "/" and "/index.html".

Frequently Asked Questions

What is the HpackEncoderTest class?
HpackEncoderTest is a class in the netty codebase, defined in codec-http2/src/test/java/io/netty/handler/codec/http2/HpackEncoderTest.java.
Where is HpackEncoderTest defined?
HpackEncoderTest is defined in codec-http2/src/test/java/io/netty/handler/codec/http2/HpackEncoderTest.java at line 34.

Analyze Your Own Codebase

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

Try Supermodel Free