Home / Class/ SpdyHeaderBlockZlibDecoderTest Class — netty Architecture

SpdyHeaderBlockZlibDecoderTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  af170dea_1fdf_d9d0_0058_316c478ff6cc["SpdyHeaderBlockZlibDecoderTest"]
  8847cd57_1720_d786_67c4_ab7bb6721ef2["SpdyHeaderBlockZlibDecoderTest.java"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|defined in| 8847cd57_1720_d786_67c4_ab7bb6721ef2
  75bf6483_5c4e_92a9_e607_fbe8fe9e6fec["setUp()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| 75bf6483_5c4e_92a9_e607_fbe8fe9e6fec
  bae9cc33_bef3_8294_0f93_83e2f50e7367["tearDown()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| bae9cc33_bef3_8294_0f93_83e2f50e7367
  b18a7469_3a63_4113_ec8a_932f4cfeac3a["testHeaderBlock()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| b18a7469_3a63_4113_ec8a_932f4cfeac3a
  01ea6481_9239_7a5b_4dc9_5d96c9512947["testHeaderBlockMultipleDecodes()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| 01ea6481_9239_7a5b_4dc9_5d96c9512947
  03fac5f5_af58_d62f_3272_36f909d5e086["testLargeHeaderName()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| 03fac5f5_af58_d62f_3272_36f909d5e086
  8bc60772_37e4_0d70_66e2_fa47486f4886["testLargeHeaderValue()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| 8bc60772_37e4_0d70_66e2_fa47486f4886
  763c185f_4b7b_4c10_008d_a687336692a8["testHeaderBlockExtraData()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| 763c185f_4b7b_4c10_008d_a687336692a8
  627b402d_646a_90a2_c8db_8e74c425d355["testHeaderBlockInvalidDictionary()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| 627b402d_646a_90a2_c8db_8e74c425d355
  a5944aba_b59d_82ce_1a92_3c7374543fc8["testHeaderBlockInvalidDeflateBlock()"]
  af170dea_1fdf_d9d0_0058_316c478ff6cc -->|method| a5944aba_b59d_82ce_1a92_3c7374543fc8

Relationship Graph

Source Code

codec-http/src/test/java/io/netty/handler/codec/spdy/SpdyHeaderBlockZlibDecoderTest.java lines 31–245

public class SpdyHeaderBlockZlibDecoderTest {

    // zlib header indicating 32K window size fastest deflate algorithm with SPDY dictionary
    private static final byte[] zlibHeader = {0x78, 0x3f, (byte) 0xe3, (byte) 0xc6, (byte) 0xa7, (byte) 0xc2};
    private static final byte[] zlibSyncFlush = {0x00, 0x00, 0x00, (byte) 0xff, (byte) 0xff};

    private static final int maxHeaderSize = 8192;

    private static final String name = "name";
    private static final String value = "value";
    private static final byte[] nameBytes = name.getBytes();
    private static final byte[] valueBytes = value.getBytes();

    private SpdyHeaderBlockZlibDecoder decoder;
    private SpdyHeadersFrame frame;

    @BeforeEach
    public void setUp() {
        decoder = new SpdyHeaderBlockZlibDecoder(SpdyVersion.SPDY_3_1, maxHeaderSize);
        frame = new DefaultSpdyHeadersFrame(1);
    }

    @AfterEach
    public void tearDown() {
        decoder.end();
    }

    @Test
    public void testHeaderBlock() throws Exception {
        ByteBuf headerBlock = Unpooled.buffer(37);
        headerBlock.writeBytes(zlibHeader);
        headerBlock.writeByte(0); // Non-compressed block
        headerBlock.writeByte(0x15); // little-endian length (21)
        headerBlock.writeByte(0x00); // little-endian length (21)
        headerBlock.writeByte(0xea); // one's compliment of length
        headerBlock.writeByte(0xff); // one's compliment of length
        headerBlock.writeInt(1); // number of Name/Value pairs
        headerBlock.writeInt(4); // length of name
        headerBlock.writeBytes(nameBytes);
        headerBlock.writeInt(5); // length of value
        headerBlock.writeBytes(valueBytes);
        headerBlock.writeBytes(zlibSyncFlush);
        decoder.decode(ByteBufAllocator.DEFAULT, headerBlock, frame);
        decoder.endHeaderBlock(frame);

        assertFalse(headerBlock.isReadable());
        assertFalse(frame.isInvalid());
        assertEquals(1, frame.headers().names().size());
        assertTrue(frame.headers().contains(name));
        assertEquals(1, frame.headers().getAll(name).size());
        assertEquals(value, frame.headers().get(name));

        headerBlock.release();
    }

    @Test
    public void testHeaderBlockMultipleDecodes() throws Exception {
        ByteBuf headerBlock = Unpooled.buffer(37);
        headerBlock.writeBytes(zlibHeader);
        headerBlock.writeByte(0); // Non-compressed block
        headerBlock.writeByte(0x15); // little-endian length (21)
        headerBlock.writeByte(0x00); // little-endian length (21)
        headerBlock.writeByte(0xea); // one's compliment of length
        headerBlock.writeByte(0xff); // one's compliment of length
        headerBlock.writeInt(1); // number of Name/Value pairs
        headerBlock.writeInt(4); // length of name
        headerBlock.writeBytes(nameBytes);
        headerBlock.writeInt(5); // length of value
        headerBlock.writeBytes(valueBytes);
        headerBlock.writeBytes(zlibSyncFlush);

        int readableBytes = headerBlock.readableBytes();
        for (int i = 0; i < readableBytes; i++) {
            ByteBuf headerBlockSegment = headerBlock.slice(i, 1);
            decoder.decode(ByteBufAllocator.DEFAULT, headerBlockSegment, frame);
            assertFalse(headerBlockSegment.isReadable());
        }
        decoder.endHeaderBlock(frame);

        assertFalse(frame.isInvalid());
        assertEquals(1, frame.headers().names().size());

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free