⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multipartboundaryinputstreamtest.java

📁 jakarta-struts-1.2.4-src
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    public void testThreeMixedElementData() throws Exception
    {
        MultipartBoundaryInputStream inputStream = new MultipartBoundaryInputStream();
        inputStream.setBoundary(BOUNDARY_THREE_TEXT_ELEMENT);
        inputStream.setInputStream(this.threeMixedElementDataStream);

        //get first element
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_THREE_MIXED_ELEMENT_1, inputStream.getElementName());
        assertTrue(inputStream.isElementFile());
        assertEquals("text/html", inputStream.getElementContentType());
        assertTrue(!inputStream.isBoundaryEncountered());
        //read the element
        String resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        String desiredData = streamToString(this.testFile5400bDataStream);
        assertEquals(desiredData, resultData);

        //get second element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_THREE_MIXED_ELEMENT_2, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals(DESIRED_TEST_DATA_1, resultData);

        //get third element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_THREE_MIXED_ELEMENT_3, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals(DESIRED_TEST_DATA_2, resultData);
        //make sure the stream knows it's done
        assertTrue(inputStream.isFinalBoundaryEncountered());
        assertTrue(inputStream.isEndOfStream());
    }

    /**
     * Tests a file filled with many, many newlines. A veritable plethora of newlines.
     */
    public void testManyNewlines() throws Exception
    {
        MultipartBoundaryInputStream inputStream = new MultipartBoundaryInputStream();
        inputStream.setBoundary(BOUNDARY_THREE_TEXT_ELEMENT);
        inputStream.setInputStream(this.newlinesDataStream);

        //get first element
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_THREE_MIXED_ELEMENT_1, inputStream.getElementName());
        assertTrue(inputStream.isElementFile());
        assertEquals("text/html", inputStream.getElementContentType());
        //read the element
        String resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        String desiredData = streamToString(this.testFileNewlines);
        assertEquals(desiredData, resultData);

        //get second element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_THREE_MIXED_ELEMENT_2, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals(DESIRED_TEST_DATA_1, resultData);

        //get third element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_THREE_MIXED_ELEMENT_3, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals(DESIRED_TEST_DATA_2, resultData);
        //make sure the stream knows it's done
        assertTrue(inputStream.isFinalBoundaryEncountered());
        assertTrue(inputStream.isEndOfStream());
    }

    /**
     * This file caused a problem in the past. This test is here to make sure it doesn't happen again.
     */
    public void testProblemFile1() throws Exception
    {
        MultipartBoundaryInputStream inputStream = new MultipartBoundaryInputStream();
        inputStream.setBoundary(BOUNDARY_PROBLEM1);
        inputStream.setInputStream(this.testProblem1);

        //get the first element
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_1, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        String resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("test", resultData);

        //get second element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_2, inputStream.getElementName());
        assertTrue(inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        String desiredData = streamToString(this.testFileProblem1);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals(desiredData, resultData);

        //get third element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_3, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("on", resultData);

        //get fourth element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_4, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("c:\\multipart-test.txt", resultData);

        //get last element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_5, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("Submit", resultData);
        assertTrue(inputStream.isFinalBoundaryEncountered());
        assertTrue(inputStream.isEndOfStream());
    }

    public void testProblemFile2() throws Exception
    {
        MultipartBoundaryInputStream inputStream = new MultipartBoundaryInputStream();
        inputStream.setBoundary(BOUNDARY_PROBLEM2);
        inputStream.setInputStream(this.testProblem2);

        //get the first element
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_1, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        String resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("test", resultData);

        //get second element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_2, inputStream.getElementName());
        assertEquals("hist202.doc", inputStream.getElementFileName());
        assertTrue(inputStream.isElementFile());
        assertEquals("application/msword", inputStream.getElementContentType());
        //read the element
        assertEquals(this.testFileProblem2, inputStream);
        assertTrue(inputStream.isBoundaryEncountered());

        //get third element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_3, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("on", resultData);

        //get fourth element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_4, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("c:\\multipart-test.txt", resultData);

        //get last element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_5, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("Submit", resultData);
        assertTrue(inputStream.isFinalBoundaryEncountered());
        assertTrue(inputStream.isEndOfStream());
    }

    public void testProblemFile3() throws Exception
    {
        MultipartBoundaryInputStream inputStream = new MultipartBoundaryInputStream();
        inputStream.setBoundary(BOUNDARY_PROBLEM3);
        inputStream.setInputStream(this.testProblem3);

        //get the first element
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_1, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        String resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("test", resultData);

        //get second element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_2, inputStream.getElementName());
        assertEquals("testmp3.mp3", inputStream.getElementFileName());
        assertTrue(inputStream.isElementFile());
        assertEquals("audio/mpeg", inputStream.getElementContentType());
        //read the element
        assertEquals(this.testFileProblem3, inputStream);
        assertTrue(inputStream.isBoundaryEncountered());

        //get third element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_3, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("on", resultData);

        //get fourth element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_4, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("c:\\multipart-test7.mp3", resultData);

        //get last element
        inputStream.resetForNextBoundary();
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_5, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("Submit", resultData);
        assertTrue(inputStream.isFinalBoundaryEncountered());
        assertTrue(inputStream.isEndOfStream());
    }

    public void testMaxLengthExceeded() throws Exception
    {
        MultipartBoundaryInputStream inputStream = new MultipartBoundaryInputStream();
        inputStream.setMaxLength(1500);
        inputStream.setBoundary(BOUNDARY_PROBLEM3);
        inputStream.setInputStream(this.testProblem3);

        //get the first element
        assertEquals(DISPOSITION_FORM_DATA, inputStream.getElementContentDisposition());
        assertEquals(NAME_PROBLEM1_1, inputStream.getElementName());
        assertTrue(!inputStream.isElementFile());
        assertEquals(CONTENT_TYPE_TEXT_PLAIN, inputStream.getElementContentType());
        //read the element
        String resultData = streamToString(inputStream);
        assertTrue(inputStream.isBoundaryEncountered());
        assertEquals("test", resultData);

        //get second element
        inputStream.resetForNextBoundary();
        byte[] result = toByteArray(inputStream);
        assertTrue(inputStream.isMaxLengthMet());
        assertTrue(inputStream.getBytesRead() == 1500);
        assertTrue(result.length < 1500);
    }

    public static void assertEquals(InputStream desired, InputStream actual) throws Exception
    {
        byte[] desiredBytes = toByteArray(desired);
        byte[] actualBytes = toByteArray(actual);
        if (!Arrays.equals(desiredBytes,  actualBytes))
        {
            fail("Actual bytes don't match the desired bytes");
        }
    }

    public static byte[] toByteArray(InputStream stream) throws IOException
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[4096];
        int read = 0;
        while ((read = stream.read(buffer, 0, buffer.length)) != -1)
        {
            baos.write(buffer, 0, read);
        }
        return baos.toByteArray();
    }

    private final String streamToString(InputStream inputStream) throws IOException
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[4096];
        int read = 0;
        int length = 0;
        while ((read = inputStream.read(buffer, 0, buffer.length)) != -1)
        {
            baos.write(buffer, 0, read);
            length += read;
        }
        return baos.toString();
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -