Home / Class/ HpackTestCase Class — netty Architecture

HpackTestCase Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704["HpackTestCase"]
  a836e9a9_0779_ecc8_975d_40a9ce9c9219["HpackTestCase.java"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|defined in| a836e9a9_0779_ecc8_975d_40a9ce9c9219
  f36891ab_d8f4_6e60_6bd6_2a9104c5c38a["HpackTestCase()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| f36891ab_d8f4_6e60_6bd6_2a9104c5c38a
  5331bda1_436a_69be_b1ec_2d6ae664331b["testCompress()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| 5331bda1_436a_69be_b1ec_2d6ae664331b
  55d35e05_80b4_cc85_f837_078146024350["testDecompress()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| 55d35e05_80b4_cc85_f837_078146024350
  65354180_90ea_b9be_23e7_42ecd9c3aa4e["HpackEncoder()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| 65354180_90ea_b9be_23e7_42ecd9c3aa4e
  9fd51714_ffb1_86fa_3859_1e7312fe080e["HpackDecoder()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| 9fd51714_ffb1_86fa_3859_1e7312fe080e
  752e1532_3a8d_0d99_13de_a7e1f0c28cf0["encode()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| 752e1532_3a8d_0d99_13de_a7e1f0c28cf0
  e3b44728_0d78_16ae_fd88_9a3bd0bc84c2["Http2Headers()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| e3b44728_0d78_16ae_fd88_9a3bd0bc84c2
  e399de65_5392_e22b_1b56_df58382cd80c["decode()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| e399de65_5392_e22b_1b56_df58382cd80c
  7d5cb3b9_d09e_ff18_e199_7f7d90dc1508["String()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| 7d5cb3b9_d09e_ff18_e199_7f7d90dc1508
  d9f2be7a_b72d_658b_a42e_fe82dd297b1f["headersEqual()"]
  7b46bcd3_dbd5_a8a9_21a7_007c98b4f704 -->|method| d9f2be7a_b72d_658b_a42e_fe82dd297b1f

Relationship Graph

Source Code

codec-http2/src/test/java/io/netty/handler/codec/http2/HpackTestCase.java lines 59–290

final class HpackTestCase {

    private static final Gson GSON = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
            .registerTypeAdapter(HpackHeaderField.class, new HeaderFieldDeserializer())
            .create();

    int maxHeaderTableSize = -1;
    boolean sensitiveHeaders;

    List<HeaderBlock> headerBlocks;

    private HpackTestCase() {
    }

    static HpackTestCase load(InputStream is) {
        InputStreamReader r = new InputStreamReader(is);
        HpackTestCase hpackTestCase = GSON.fromJson(r, HpackTestCase.class);
        for (HeaderBlock headerBlock : hpackTestCase.headerBlocks) {
            headerBlock.encodedBytes = StringUtil.decodeHexDump(headerBlock.getEncodedStr());
        }
        return hpackTestCase;
    }

    void testCompress() throws Exception {
        HpackEncoder hpackEncoder = createEncoder();

        for (HeaderBlock headerBlock : headerBlocks) {

            byte[] actual =
                    encode(hpackEncoder, headerBlock.getHeaders(), headerBlock.getMaxHeaderTableSize(),
                            sensitiveHeaders);

            if (!Arrays.equals(actual, headerBlock.encodedBytes)) {
                throw new AssertionError(
                        "\nEXPECTED:\n" + headerBlock.getEncodedStr() +
                                "\nACTUAL:\n" + StringUtil.toHexString(actual));
            }

            List<HpackHeaderField> actualDynamicTable = new ArrayList<HpackHeaderField>();
            for (int index = 0; index < hpackEncoder.length(); index++) {
                actualDynamicTable.add(hpackEncoder.getHeaderField(index));
            }

            List<HpackHeaderField> expectedDynamicTable = headerBlock.getDynamicTable();

            if (!headersEqual(expectedDynamicTable, actualDynamicTable)) {
                throw new AssertionError(
                        "\nEXPECTED DYNAMIC TABLE:\n" + expectedDynamicTable +
                                "\nACTUAL DYNAMIC TABLE:\n" + actualDynamicTable);
            }

            if (headerBlock.getTableSize() != hpackEncoder.size()) {
                throw new AssertionError(
                        "\nEXPECTED TABLE SIZE: " + headerBlock.getTableSize() +
                                "\n ACTUAL TABLE SIZE : " + hpackEncoder.size());
            }
        }
    }

    void testDecompress() throws Exception {
        HpackDecoder hpackDecoder = createDecoder();

        for (HeaderBlock headerBlock : headerBlocks) {

            List<HpackHeaderField> actualHeaders = decode(hpackDecoder, headerBlock.encodedBytes);

            List<HpackHeaderField> expectedHeaders = new ArrayList<HpackHeaderField>();
            for (HpackHeaderField h : headerBlock.getHeaders()) {
                expectedHeaders.add(new HpackHeaderField(h.name, h.value));
            }

            if (!headersEqual(expectedHeaders, actualHeaders)) {
                throw new AssertionError(
                        "\nEXPECTED:\n" + expectedHeaders +
                                "\nACTUAL:\n" + actualHeaders);
            }

            List<HpackHeaderField> actualDynamicTable = new ArrayList<HpackHeaderField>();
            for (int index = 0; index < hpackDecoder.length(); index++) {
                actualDynamicTable.add(hpackDecoder.getHeaderField(index));

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free