Home / Class/ DefaultHttp2HeadersTest Class — netty Architecture

DefaultHttp2HeadersTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  dee91314_9fa2_2772_1f20_e4b8f18eea54["DefaultHttp2HeadersTest"]
  394daedf_337e_7cbb_9876_f4c2d7c63065["DefaultHttp2HeadersTest.java"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|defined in| 394daedf_337e_7cbb_9876_f4c2d7c63065
  7c86390c_da27_ec65_6ad3_a86072ef5a45["nullHeaderNameNotAllowed()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 7c86390c_da27_ec65_6ad3_a86072ef5a45
  7ca75330_a87b_6478_846c_7795506b778a["emptyHeaderNameNotAllowed()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 7ca75330_a87b_6478_846c_7795506b778a
  479272f6_3bae_eb36_4a9d_9d5397cd1377["testPseudoHeadersMustComeFirstWhenIterating()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 479272f6_3bae_eb36_4a9d_9d5397cd1377
  0cc4bde2_4ede_21ae_4ec1_eb8f1d0690fc["testPseudoHeadersWithRemovePreservesPseudoIterationOrder()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 0cc4bde2_4ede_21ae_4ec1_eb8f1d0690fc
  a44ccbe9_a2fe_01dc_1ffd_77791a6cb32e["testPseudoHeadersWithClearDoesNotLeak()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| a44ccbe9_a2fe_01dc_1ffd_77791a6cb32e
  03daf0f7_d3b1_5ec2_da3c_003d78789de2["testSetHeadersOrdersPseudoHeadersCorrectly()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 03daf0f7_d3b1_5ec2_da3c_003d78789de2
  d10187ac_b750_fa4b_f20b_f4829998d39e["testSetAllOrdersPseudoHeadersCorrectly()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| d10187ac_b750_fa4b_f20b_f4829998d39e
  861b477e_7ece_f653_4d3d_a62aab7a446b["testHeaderNameValidation()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 861b477e_7ece_f653_4d3d_a62aab7a446b
  d13458e4_6746_a6c6_4a96_aa0e93ccb5e1["testClearResetsPseudoHeaderDivision()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| d13458e4_6746_a6c6_4a96_aa0e93ccb5e1
  6f3dac53_fb15_e5da_e98c_b0209ab0b9f8["testContainsNameAndValue()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 6f3dac53_fb15_e5da_e98c_b0209ab0b9f8
  ecad8a96_b5b5_3ab6_c319_bceaa4bd2b0b["testContainsName()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| ecad8a96_b5b5_3ab6_c319_bceaa4bd2b0b
  049c26d7_1d67_25d4_3c56_cb0bf1473550["setMustOverwritePseudoHeaders()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 049c26d7_1d67_25d4_3c56_cb0bf1473550
  23cceb99_8ef1_8d24_bad4_d574f33bf535["possibleToAddConnectionHeaders()"]
  dee91314_9fa2_2772_1f20_e4b8f18eea54 -->|method| 23cceb99_8ef1_8d24_bad4_d574f33bf535

Relationship Graph

Source Code

codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersTest.java lines 38–253

public class DefaultHttp2HeadersTest {

    @Test
    public void nullHeaderNameNotAllowed() {
        assertThrows(Http2Exception.class, new Executable() {
            @Override
            public void execute() throws Throwable {
                new DefaultHttp2Headers().add(null, "foo");
            }
        });
    }

    @Test
    public void emptyHeaderNameNotAllowed() {
        assertThrows(Http2Exception.class, new Executable() {
            @Override
            public void execute() throws Throwable {
                new DefaultHttp2Headers().add(StringUtil.EMPTY_STRING, "foo");
            }
        });
    }

    @Test
    public void testPseudoHeadersMustComeFirstWhenIterating() {
        Http2Headers headers = newHeaders();

        verifyPseudoHeadersFirst(headers);
        verifyAllPseudoHeadersPresent(headers);
    }

    @Test
    public void testPseudoHeadersWithRemovePreservesPseudoIterationOrder() {
        Http2Headers headers = newHeaders();

        Http2Headers nonPseudoHeaders = new DefaultHttp2Headers();
        for (Entry<CharSequence, CharSequence> entry : headers) {
            if (entry.getKey().length() == 0 || entry.getKey().charAt(0) != ':' &&
                !nonPseudoHeaders.contains(entry.getKey())) {
                nonPseudoHeaders.add(entry.getKey(), entry.getValue());
            }
        }

        assertFalse(nonPseudoHeaders.isEmpty());

        // Remove all the non-pseudo headers and verify
        for (Entry<CharSequence, CharSequence> nonPseudoHeaderEntry : nonPseudoHeaders) {
            assertTrue(headers.remove(nonPseudoHeaderEntry.getKey()));
            verifyPseudoHeadersFirst(headers);
            verifyAllPseudoHeadersPresent(headers);
        }

        // Add back all non-pseudo headers
        for (Entry<CharSequence, CharSequence> nonPseudoHeaderEntry : nonPseudoHeaders) {
            headers.add(nonPseudoHeaderEntry.getKey(), of("goo"));
            verifyPseudoHeadersFirst(headers);
            verifyAllPseudoHeadersPresent(headers);
        }
    }

    @Test
    public void testPseudoHeadersWithClearDoesNotLeak() {
        Http2Headers headers = newHeaders();

        assertFalse(headers.isEmpty());
        headers.clear();
        assertTrue(headers.isEmpty());

        // Combine 2 headers together, make sure pseudo headers stay up front.
        headers.add("name1", "value1").scheme("nothing");
        verifyPseudoHeadersFirst(headers);

        Http2Headers other = new DefaultHttp2Headers().add("name2", "value2").authority("foo");
        verifyPseudoHeadersFirst(other);

        headers.add(other);
        verifyPseudoHeadersFirst(headers);

        // Make sure the headers are what we expect them to be, and no leaking behind the scenes.
        assertEquals(4, headers.size());
        assertEquals("value1", headers.get("name1"));
        assertEquals("value2", headers.get("name2"));

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free