Home / Class/ HttpPostMultiPartRequestDecoderTest Class — netty Architecture

HttpPostMultiPartRequestDecoderTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  8ca6727e_4177_9097_12de_7bccb17e5dea["HttpPostMultiPartRequestDecoderTest"]
  b949ba9c_9ee2_af89_ec94_d864195a0242["HttpPostMultiPartRequestDecoderTest.java"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|defined in| b949ba9c_9ee2_af89_ec94_d864195a0242
  49f671bd_9e70_525a_7952_de3bebf6795c["testDecodeFullHttpRequestWithNoContentTypeHeader()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 49f671bd_9e70_525a_7952_de3bebf6795c
  a7468de7_dd27_d0e2_838a_a87a453523a4["testDecodeFullHttpRequestWithInvalidCharset()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| a7468de7_dd27_d0e2_838a_a87a453523a4
  0ce18672_ad0e_f898_bd7f_9893ce23b862["testDecodeFullHttpRequestWithInvalidPayloadReleaseBuffer()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 0ce18672_ad0e_f898_bd7f_9893ce23b862
  3ed462e6_092a_55ad_9390_85dfe7b115a7["testDelimiterExceedLeftSpaceInCurrentBuffer()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 3ed462e6_092a_55ad_9390_85dfe7b115a7
  7eb4c671_cbbe_57a8_2f8d_0880061c4803["commonTestBigFileDelimiterInMiddleChunk()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 7eb4c671_cbbe_57a8_2f8d_0880061c4803
  7231f1f8_4457_2733_e62f_b1333e9aff80["testBIgFileUploadDelimiterInMiddleChunkDecoderDiskFactory()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 7231f1f8_4457_2733_e62f_b1333e9aff80
  b7cbf6e2_a870_bcbe_c097_720ab9764ad4["testBIgFileUploadDelimiterInMiddleChunkDecoderMemoryFactory()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| b7cbf6e2_a870_bcbe_c097_720ab9764ad4
  cdeb0206_1693_c03f_b392_2e5b08947c84["testBIgFileUploadDelimiterInMiddleChunkDecoderMixedFactory()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| cdeb0206_1693_c03f_b392_2e5b08947c84
  a54bad25_e7e4_dc37_0fd4_58d812cd26f4["testNotBadReleaseBuffersDuringDecodingDiskFactory()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| a54bad25_e7e4_dc37_0fd4_58d812cd26f4
  df98f65c_044f_e2d6_7fb4_338cec6f7840["testNotBadReleaseBuffersDuringDecodingMemoryFactory()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| df98f65c_044f_e2d6_7fb4_338cec6f7840
  12ff4d2f_2755_6741_83da_810e2b5369a0["testNotBadReleaseBuffersDuringDecodingMixedFactory()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 12ff4d2f_2755_6741_83da_810e2b5369a0
  7c4893a2_9344_1a93_02a9_80bd646bce12["testDecodeFullHttpRequestWithOptionalParameters()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 7c4893a2_9344_1a93_02a9_80bd646bce12
  414441c4_b377_7258_e839_7d69f38ccd85["commonNotBadReleaseBuffersDuringDecoding()"]
  8ca6727e_4177_9097_12de_7bccb17e5dea -->|method| 414441c4_b377_7258_e839_7d69f38ccd85

Relationship Graph

Source Code

codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostMultiPartRequestDecoderTest.java lines 43–513

public class HttpPostMultiPartRequestDecoderTest {

    @Test
    public void testDecodeFullHttpRequestWithNoContentTypeHeader() {
        FullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "/");
        try {
            new HttpPostMultipartRequestDecoder(req);
            fail("Was expecting an ErrorDataDecoderException");
        } catch (HttpPostRequestDecoder.ErrorDataDecoderException expected) {
            // expected
        } finally {
            assertTrue(req.release());
        }
    }

    @Test
    public void testDecodeFullHttpRequestWithInvalidCharset() {
        FullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "/");
        req.headers().set(HttpHeaderNames.CONTENT_TYPE,
                "multipart/form-data; boundary=--89421926422648 [; charset=UTF-8]");

        try {
            new HttpPostMultipartRequestDecoder(req);
            fail("Was expecting an ErrorDataDecoderException");
        } catch (HttpPostRequestDecoder.ErrorDataDecoderException expected) {
            // expected
        } finally {
            assertTrue(req.release());
        }
    }

    @Test
    public void testDecodeFullHttpRequestWithInvalidPayloadReleaseBuffer() {
        String content = "\n--861fbeab-cd20-470c-9609-d40a0f704466\n" +
                "Content-Disposition: form-data; name=\"image1\"; filename*=\"'some.jpeg\"\n" +
                        "Content-Type: image/jpeg\n" +
                        "Content-Length: 1\n" +
                        "x\n" +
                        "--861fbeab-cd20-470c-9609-d40a0f704466--\n";

        FullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "/upload",
                Unpooled.copiedBuffer(content, CharsetUtil.US_ASCII));
        req.headers().set("content-type", "multipart/form-data; boundary=861fbeab-cd20-470c-9609-d40a0f704466");
        req.headers().set("content-length", content.length());

        try {
            new HttpPostMultipartRequestDecoder(req);
            fail("Was expecting an ErrorDataDecoderException");
        } catch (HttpPostRequestDecoder.ErrorDataDecoderException expected) {
            // expected
        } finally {
            assertTrue(req.release());
        }
    }

    @Test
    public void testDelimiterExceedLeftSpaceInCurrentBuffer() {
        String delimiter = "--861fbeab-cd20-470c-9609-d40a0f704466";
        String suffix = '\n' + delimiter + "--\n";
        byte[] bsuffix = suffix.getBytes(CharsetUtil.UTF_8);
        int partOfDelimiter = bsuffix.length / 2;
        int bytesLastChunk = 355 - partOfDelimiter; // to try to have an out of bound since content is > delimiter
        byte[] bsuffix1 = Arrays.copyOf(bsuffix, partOfDelimiter);
        byte[] bsuffix2 = Arrays.copyOfRange(bsuffix, partOfDelimiter, bsuffix.length);
        String prefix = delimiter + "\n" +
                        "Content-Disposition: form-data; name=\"image\"; filename=\"guangzhou.jpeg\"\n" +
                        "Content-Type: image/jpeg\n" +
                        "Content-Length: " + bytesLastChunk + "\n\n";
        HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "/upload");
        request.headers().set("content-type", "multipart/form-data; boundary=861fbeab-cd20-470c-9609-d40a0f704466");
        request.headers().set("content-length", prefix.length() + bytesLastChunk + suffix.length());

        // Factory using Memory mode
        HttpDataFactory factory = new DefaultHttpDataFactory(false);
        HttpPostMultipartRequestDecoder decoder = new HttpPostMultipartRequestDecoder(factory, request);
        ByteBuf buf = Unpooled.wrappedBuffer(prefix.getBytes(CharsetUtil.UTF_8));
        DefaultHttpContent httpContent = new DefaultHttpContent(buf);
        decoder.offer(httpContent);
        assertNotNull((HttpData) decoder.currentPartialHttpData());
        httpContent.release();
        // Chunk less than Delimiter size but containing part of delimiter

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free