Home / Class/ HttpPostRequestDecoderTest Class — netty Architecture

HttpPostRequestDecoderTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e["HttpPostRequestDecoderTest"]
  1e066d23_cbcb_feab_161a_d1bcbf03b653["HttpPostRequestDecoderTest.java"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|defined in| 1e066d23_cbcb_feab_161a_d1bcbf03b653
  d908db45_2339_97de_ef92_b48161642fb3["testBinaryStreamUploadWithSpace()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| d908db45_2339_97de_ef92_b48161642fb3
  445a1fc6_faad_ab3a_cf84_51d1bd35a4d2["testBinaryStreamUploadWithoutSpace()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 445a1fc6_faad_ab3a_cf84_51d1bd35a4d2
  112fcd5b_618f_8555_ad55_5311bffa0b94["testBinaryStreamUpload()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 112fcd5b_618f_8555_ad55_5311bffa0b94
  fb706f96_ad40_aefb_235e_02b8536ffe05["testFullHttpRequestUpload()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| fb706f96_ad40_aefb_235e_02b8536ffe05
  015c1b58_a0a6_08a3_b1cb_0667ce054c53["testMultipartCodecWithCRasEndOfAttribute()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 015c1b58_a0a6_08a3_b1cb_0667ce054c53
  03672b83_bc1e_6747_1ec7_2883643e9986["testQuotedBoundary()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 03672b83_bc1e_6747_1ec7_2883643e9986
  0ae5feb5_b49f_059e_d6ab_a074478c96b3["testNoZeroOut()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 0ae5feb5_b49f_059e_d6ab_a074478c96b3
  9de6884f_ea55_c1ba_9164_2b857a6a0337["testChunkCorrect()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 9de6884f_ea55_c1ba_9164_2b857a6a0337
  291e943e_722a_eab0_0f2f_86b611bbaf62["testFilenameContainingSemicolon()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 291e943e_722a_eab0_0f2f_86b611bbaf62
  d38a11c4_54f9_eb68_db60_781ebb1caf4c["testFilenameContainingSemicolon2()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| d38a11c4_54f9_eb68_db60_781ebb1caf4c
  495c130e_d7e4_1e86_6555_6cc66ead7b83["testMultipartRequestWithoutContentTypeBody()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 495c130e_d7e4_1e86_6555_6cc66ead7b83
  c98b9e82_118e_a354_f5b5_854176035de6["testDecodeOtherMimeHeaderFields()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| c98b9e82_118e_a354_f5b5_854176035de6
  7adce0e9_851f_86a2_287a_6159a8c7f830["testMultipartRequestWithFileInvalidCharset()"]
  d3dadcbe_07b1_86dc_3f34_5a56e9d1367e -->|method| 7adce0e9_851f_86a2_287a_6159a8c7f830

Relationship Graph

Source Code

codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoderTest.java lines 54–1145

public class HttpPostRequestDecoderTest {

    @Test
    public void testBinaryStreamUploadWithSpace() throws Exception {
        testBinaryStreamUpload(true);
    }

    // https://github.com/netty/netty/issues/1575
    @Test
    public void testBinaryStreamUploadWithoutSpace() throws Exception {
        testBinaryStreamUpload(false);
    }

    private static void testBinaryStreamUpload(boolean withSpace) throws Exception {
        final String boundary = "dLV9Wyq26L_-JQxk6ferf-RT153LhOO";
        final String contentTypeValue;
        if (withSpace) {
            contentTypeValue = "multipart/form-data; boundary=" + boundary;
        } else {
            contentTypeValue = "multipart/form-data;boundary=" + boundary;
        }
        final DefaultHttpRequest req = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST,
                "http://localhost");

        req.setDecoderResult(DecoderResult.SUCCESS);
        req.headers().add(HttpHeaderNames.CONTENT_TYPE, contentTypeValue);
        req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED);

        // Force to use memory-based data.
        final DefaultHttpDataFactory inMemoryFactory = new DefaultHttpDataFactory(false);

        for (String data : Arrays.asList("", "\r", "\r\r", "\r\r\r")) {
            final String body =
                    "--" + boundary + "\r\n" +
                            "Content-Disposition: form-data; name=\"file\"; filename=\"tmp-0.txt\"\r\n" +
                            "Content-Type: image/gif\r\n" +
                            "\r\n" +
                            data + "\r\n" +
                            "--" + boundary + "--\r\n";

            // Create decoder instance to test.
            final HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(inMemoryFactory, req);

            ByteBuf buf = Unpooled.copiedBuffer(body, CharsetUtil.UTF_8);
            decoder.offer(new DefaultHttpContent(buf));
            decoder.offer(new DefaultHttpContent(Unpooled.EMPTY_BUFFER));

            // Validate it's enough chunks to decode upload.
            assertTrue(decoder.hasNext());

            // Decode binary upload.
            MemoryFileUpload upload = (MemoryFileUpload) decoder.next();

            // Validate data has been parsed correctly as it was passed into request.
            assertEquals(data, upload.getString(CharsetUtil.UTF_8),
                    "Invalid decoded data [data=" + data.replaceAll("\r", "\\\\r") + ", upload=" + upload + ']');
            upload.release();
            decoder.destroy();
            buf.release();
        }
    }

    // See https://github.com/netty/netty/issues/1089
    @Test
    public void testFullHttpRequestUpload() throws Exception {
        final String boundary = "dLV9Wyq26L_-JQxk6ferf-RT153LhOO";

        final DefaultFullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST,
                "http://localhost");

        req.setDecoderResult(DecoderResult.SUCCESS);
        req.headers().add(HttpHeaderNames.CONTENT_TYPE, "multipart/form-data; boundary=" + boundary);
        req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED);

        // Force to use memory-based data.
        final DefaultHttpDataFactory inMemoryFactory = new DefaultHttpDataFactory(false);

        for (String data : Arrays.asList("", "\r", "\r\r", "\r\r\r")) {
            final String body =
                    "--" + boundary + "\r\n" +
                            "Content-Disposition: form-data; name=\"file\"; filename=\"tmp-0.txt\"\r\n" +

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free