123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package com.vaadin.tests.server;
-
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.util.Arrays;
-
- import org.junit.Test;
-
- import com.vaadin.server.communication.FileUploadHandler.SimpleMultiPartInputStream;
-
- public class SimpleMultiPartInputStreamTest {
-
- /**
- * Check that the output for a given stream until boundary is as expected.
- *
- * @param input
- * @param boundary
- * @param expected
- * @throws Exception
- */
- protected void checkBoundaryDetection(byte[] input, String boundary,
- byte[] expected) throws Exception {
- ByteArrayInputStream bais = new ByteArrayInputStream(input);
- try (SimpleMultiPartInputStream smpis = new SimpleMultiPartInputStream(
- bais, boundary)) {
- ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
- int outbyte;
- try {
- while ((outbyte = smpis.read()) != -1) {
- resultStream.write(outbyte);
- }
- } catch (IOException e) {
- throw new IOException(
- e.getMessage() + "; expected " + new String(expected)
- + " but got " + resultStream.toString());
- }
- if (!Arrays.equals(expected, resultStream.toByteArray())) {
- throw new Exception("Mismatch: expected " + new String(expected)
- + " but got " + resultStream.toString());
- }
- }
- }
-
- protected void checkBoundaryDetection(String input, String boundary,
- String expected) throws Exception {
- checkBoundaryDetection(input.getBytes(), boundary, expected.getBytes());
- }
-
- @Test
- public void testSingleByteBoundaryAtEnd() throws Exception {
- checkBoundaryDetection("xyz123" + getFullBoundary("a"), "a", "xyz123");
- }
-
- @Test
- public void testSingleByteBoundaryInMiddle() throws Exception {
- checkBoundaryDetection("xyz" + getFullBoundary("a") + "123", "a",
- "xyz");
- }
-
- @Test
- public void testCorrectBoundaryAtEnd() throws Exception {
- checkBoundaryDetection("xyz123" + getFullBoundary("abc"), "abc",
- "xyz123");
- }
-
- @Test
- public void testCorrectBoundaryNearEnd() throws Exception {
- checkBoundaryDetection("xyz123" + getFullBoundary("abc") + "de", "abc",
- "xyz123");
- }
-
- @Test
- public void testCorrectBoundaryAtBeginning() throws Exception {
- checkBoundaryDetection(getFullBoundary("abc") + "xyz123", "abc", "");
- }
-
- @Test
- public void testRepeatingCharacterBoundary() throws Exception {
- checkBoundaryDetection(getFullBoundary("aa") + "xyz123", "aa", "");
- checkBoundaryDetection("axyz" + getFullBoundary("aa") + "123", "aa",
- "axyz");
- checkBoundaryDetection("xyz123" + getFullBoundary("aa"), "aa",
- "xyz123");
- }
-
- /**
- * Note, the boundary in this test is invalid. Boundary strings don't
- * contain CR/LF.
- *
- */
- // public void testRepeatingNewlineBoundary() throws Exception {
- // checkBoundaryDetection("1234567890" + getFullBoundary("\n\n")
- // + "1234567890", "\n\n", "");
- // }
-
- @Test
- public void testRepeatingStringBoundary() throws Exception {
- checkBoundaryDetection(getFullBoundary("abab") + "xyz123", "abab", "");
- checkBoundaryDetection("abaxyz" + getFullBoundary("abab") + "123",
- "abab", "abaxyz");
- checkBoundaryDetection("xyz123" + getFullBoundary("abab"), "abab",
- "xyz123");
- }
-
- @Test
- public void testOverlappingBoundary() throws Exception {
- checkBoundaryDetection("abc" + getFullBoundary("abcabd") + "xyz123",
- "abcabd", "abc");
- checkBoundaryDetection("xyzabc" + getFullBoundary("abcabd") + "123",
- "abcabd", "xyzabc");
- checkBoundaryDetection("xyz123abc" + getFullBoundary("abcabd"),
- "abcabd", "xyz123abc");
- }
-
- /*
- * TODO fix these tests, they don't do what their method name says.
- */
-
- // public void testNoBoundaryInInput() throws Exception {
- // try {
- // checkBoundaryDetection("xyz123", "abc", "xyz123");
- // fail();
- // } catch (IOException e) {
- // }
- // }
- //
- // public void testPartialBoundaryAtInputEnd() throws Exception {
- // try {
- // // This should lead to IOException (stream end), not AIOOBE
- // checkBoundaryDetection("xyz123ab", "abc", "xyz123ab");
- // fail();
- // } catch (IOException e) {
- // }
- // }
- //
- // public void testPartialBoundaryAtInputBeginning() throws Exception {
- // try {
- // checkBoundaryDetection("abxyz123", "abc", "abxyz123");
- // fail();
- // } catch (IOException e) {
- // }
- // }
-
- public static String getFullBoundary(String str) {
- return "\r\n--" + str + "--";
- }
-
- }
|