This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-fileupload.git
The following commit(s) were added to refs/heads/master by this push: new 9ea2dfb Refactor tests to add JavaxStreamingTest 9ea2dfb is described below commit 9ea2dfbc882c09e543100b20ab7c6d0965b60421 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Mon May 22 21:18:40 2023 -0400 Refactor tests to add JavaxStreamingTest --- .../fileupload2/AbstractProgressListenerTest.java | 4 +- .../commons/fileupload2/AbstractSizesTest.java | 2 +- .../commons/fileupload2/AbstractStreamingTest.java | 45 ++-- .../apache/commons/fileupload2/AbstractTest.java | 14 +- .../jakarta/JakartaProgressListenerTest.java | 8 +- .../fileupload2/jakarta/JakartaSizesTest.java | 9 +- ...ssListenerTest.java => JavaxStreamingTest.java} | 20 +- .../javax/JavaxProgressListenerTest.java | 8 +- .../commons/fileupload2/javax/JavaxSizesTest.java | 8 +- .../fileupload2/javax/JavaxStreamingTest.java | 256 +-------------------- 10 files changed, 68 insertions(+), 306 deletions(-) diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java index 110ed8a..37b03aa 100644 --- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java @@ -112,9 +112,9 @@ public abstract class AbstractProgressListenerTest<F extends FileUpload<R>, R> e baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII)); final byte[] requestBytes = baos.toByteArray(); - R request = newMockHttpServletRequest(requestBytes, null, null); + R request = newMockHttpServletRequest(requestBytes, null, Constants.CONTENT_TYPE, null); runTest(numItems, requestBytes.length, request); - request = newMockHttpServletRequest(requestBytes, -1, null); + request = newMockHttpServletRequest(requestBytes, -1L, Constants.CONTENT_TYPE, null); runTest(numItems, requestBytes.length, request); } diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java index 0224aa1..2795f2b 100644 --- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java @@ -203,7 +203,7 @@ public abstract class AbstractSizesTest<F extends FileUpload<R>, R> extends Abst // set the read limit to 10 to simulate a "real" stream // otherwise the buffer would be immediately filled - final R req = newMockHttpServletRequest(request, -1, 10); + final R req = newMockHttpServletRequest(request, -1L, 10); final FileItemIterator it = upload.getItemIterator(req); assertTrue(it.hasNext()); diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxStreamingTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractStreamingTest.java similarity index 85% copy from commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxStreamingTest.java copy to commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractStreamingTest.java index 3bf6b93..4d95f0b 100644 --- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxStreamingTest.java +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractStreamingTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.commons.fileupload2.javax; +package org.apache.commons.fileupload2; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -30,28 +30,23 @@ import java.nio.charset.StandardCharsets; import java.util.Iterator; import java.util.List; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload2.AbstractFileUpload; -import org.apache.commons.fileupload2.FileItem; -import org.apache.commons.fileupload2.FileItemIterator; -import org.apache.commons.fileupload2.FileItemStream; -import org.apache.commons.fileupload2.FileUploadException; -import org.apache.commons.fileupload2.InvalidFileNameException; -import org.apache.commons.fileupload2.MultipartStream; import org.apache.commons.fileupload2.disk.DiskFileItemFactory; import org.junit.jupiter.api.Test; /** * Unit test for items with varying sizes. + * + * @param <F> The subclass of FileUpload. + * @param <R> The type of FileUpload request. + * @param <C> The request context type. */ -public class JavaxStreamingTest { +public abstract class AbstractStreamingTest<F extends FileUpload<R>, R, C extends AbstractRequestContext> extends AbstractTest<F, R> { - private String getFooter() { + protected String getFooter() { return "-----1234--\r\n"; } - private String getHeader(final String value) { + protected String getHeader(final String value) { // @formatter:off return "-----1234\r\n" + "Content-Disposition: form-data; name=\"" + value + "\"\r\n" @@ -59,7 +54,7 @@ public class JavaxStreamingTest { // @formatter:on } - private byte[] newRequest() throws IOException { + protected byte[] newRequest() throws IOException { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII)) { int add = 16; @@ -80,7 +75,9 @@ public class JavaxStreamingTest { return baos.toByteArray(); } - private byte[] newShortRequest() throws IOException { + protected abstract C newServletRequestContext(final R request); + + protected byte[] newShortRequest() throws IOException { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII)) { osw.write(getHeader("field")); @@ -91,28 +88,28 @@ public class JavaxStreamingTest { return baos.toByteArray(); } - private List<FileItem> parseUpload(final byte[] bytes) throws FileUploadException { + protected List<FileItem> parseUpload(final byte[] bytes) throws FileUploadException { return parseUpload(new ByteArrayInputStream(bytes), bytes.length); } - private List<FileItem> parseUpload(final InputStream inputStream, final int length) throws FileUploadException { + protected List<FileItem> parseUpload(final InputStream inputStream, final int length) throws FileUploadException { final String contentType = "multipart/form-data; boundary=---1234"; - final AbstractFileUpload upload = new ServletFileUpload(); + final AbstractFileUpload upload = newFileUpload(); upload.setFileItemFactory(new DiskFileItemFactory()); - final HttpServletRequest request = new JavaxMockHttpServletRequest(inputStream, length, contentType, -1); + final R request = newMockHttpServletRequest(inputStream, length, contentType, -1); - return upload.parseRequest(new ServletRequestContext(request)); + return upload.parseRequest(newServletRequestContext(request)); } - private FileItemIterator parseUpload(final int length, final InputStream inputStream) throws FileUploadException, IOException { + protected FileItemIterator parseUpload(final int length, final InputStream inputStream) throws FileUploadException, IOException { final String contentType = "multipart/form-data; boundary=---1234"; - final AbstractFileUpload upload = new ServletFileUpload(); + final AbstractFileUpload upload = newFileUpload(); upload.setFileItemFactory(new DiskFileItemFactory()); - final HttpServletRequest request = new JavaxMockHttpServletRequest(inputStream, length, contentType, -1); + final R request = newMockHttpServletRequest(inputStream, length, contentType, -1); - return upload.getItemIterator(new ServletRequestContext(request)); + return upload.getItemIterator(newServletRequestContext(request)); } /** diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java index 8858294..784a846 100644 --- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java @@ -16,6 +16,8 @@ */ package org.apache.commons.fileupload2; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.nio.charset.StandardCharsets; /** @@ -27,12 +29,16 @@ import java.nio.charset.StandardCharsets; public abstract class AbstractTest<F extends FileUpload<R>, R> { protected abstract F newFileUpload(); - // empty - protected abstract R newMockHttpServletRequest(byte[] request, Integer overrideContenLength, Integer overrideReadLimit); + protected R newMockHttpServletRequest(final byte[] request, final Long overrideContenLength, final String contentType, final Integer overrideReadLimit) { + return newMockHttpServletRequest(new ByteArrayInputStream(request), overrideContenLength != null ? overrideContenLength : request.length, contentType, + overrideReadLimit != null ? overrideReadLimit : -1); + } + + protected abstract R newMockHttpServletRequest(InputStream requestInputStream, long requestLength, String contentType, int readLimit); - protected R newMockHttpServletRequest(final String request, final Integer overrideContenLength, final Integer overrideReadLimit) { - return newMockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), overrideContenLength, overrideReadLimit); + protected R newMockHttpServletRequest(final String request, final Long overrideContenLength, final Integer overrideReadLimit) { + return newMockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), overrideContenLength, Constants.CONTENT_TYPE, overrideReadLimit); } } diff --git a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java index f6696e3..8bc0e49 100644 --- a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java +++ b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java @@ -16,10 +16,9 @@ */ package org.apache.commons.fileupload2.jakarta; -import java.io.ByteArrayInputStream; +import java.io.InputStream; import org.apache.commons.fileupload2.AbstractProgressListenerTest; -import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.ProgressListener; import jakarta.servlet.http.HttpServletRequest; @@ -35,9 +34,8 @@ public class JakartaProgressListenerTest extends AbstractProgressListenerTest<Ja } @Override - protected HttpServletRequest newMockHttpServletRequest(final byte[] request, final Integer overrideContenLength, final Integer overrideReadLimit) { - return new JakartaMockHttpServletRequest(new ByteArrayInputStream(request), overrideContenLength != null ? overrideContenLength : request.length, - Constants.CONTENT_TYPE, overrideReadLimit != null ? overrideReadLimit : -1); + protected HttpServletRequest newMockHttpServletRequest(final InputStream request, final long requestLength, final String contentType, final int readLimit) { + return new JakartaMockHttpServletRequest(request, requestLength, contentType, readLimit); } } diff --git a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java index f4fc352..4023e6f 100644 --- a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java +++ b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java @@ -16,10 +16,9 @@ */ package org.apache.commons.fileupload2.jakarta; -import java.io.ByteArrayInputStream; +import java.io.InputStream; import org.apache.commons.fileupload2.AbstractSizesTest; -import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.disk.DiskFileItemFactory; import jakarta.servlet.http.HttpServletRequest; @@ -35,10 +34,8 @@ public class JakartaSizesTest extends AbstractSizesTest<JakartaServletFileUpload } @Override - protected JakartaMockHttpServletRequest newMockHttpServletRequest(final byte[] request, final Integer overrideContenLength, - final Integer overrideReadLimit) { - return new JakartaMockHttpServletRequest(new ByteArrayInputStream(request), overrideContenLength != null ? overrideContenLength : request.length, - Constants.CONTENT_TYPE, overrideReadLimit != null ? overrideReadLimit : -1); + protected JakartaMockHttpServletRequest newMockHttpServletRequest(final InputStream request, final long requestLength, final String contentType, final int readLimit) { + return new JakartaMockHttpServletRequest(request, requestLength, contentType, readLimit); } } diff --git a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JavaxStreamingTest.java similarity index 61% copy from commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java copy to commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JavaxStreamingTest.java index f6696e3..51b0932 100644 --- a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java +++ b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JavaxStreamingTest.java @@ -16,18 +16,16 @@ */ package org.apache.commons.fileupload2.jakarta; -import java.io.ByteArrayInputStream; +import java.io.InputStream; -import org.apache.commons.fileupload2.AbstractProgressListenerTest; -import org.apache.commons.fileupload2.Constants; -import org.apache.commons.fileupload2.ProgressListener; +import org.apache.commons.fileupload2.AbstractStreamingTest; import jakarta.servlet.http.HttpServletRequest; /** - * Tests the {@link ProgressListener}. + * Unit test for items with varying sizes. */ -public class JakartaProgressListenerTest extends AbstractProgressListenerTest<JakartaServletFileUpload, HttpServletRequest> { +public class JavaxStreamingTest extends AbstractStreamingTest<JakartaServletFileUpload, HttpServletRequest, JakartaServletRequestContext> { @Override protected JakartaServletFileUpload newFileUpload() { @@ -35,9 +33,13 @@ public class JakartaProgressListenerTest extends AbstractProgressListenerTest<Ja } @Override - protected HttpServletRequest newMockHttpServletRequest(final byte[] request, final Integer overrideContenLength, final Integer overrideReadLimit) { - return new JakartaMockHttpServletRequest(new ByteArrayInputStream(request), overrideContenLength != null ? overrideContenLength : request.length, - Constants.CONTENT_TYPE, overrideReadLimit != null ? overrideReadLimit : -1); + protected HttpServletRequest newMockHttpServletRequest(final InputStream request, final long requestLength, final String contentType, final int readLimit) { + return new JakartaMockHttpServletRequest(request, requestLength, contentType, readLimit); + } + + @Override + protected JakartaServletRequestContext newServletRequestContext(final HttpServletRequest request) { + return new JakartaServletRequestContext(request); } } diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxProgressListenerTest.java b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxProgressListenerTest.java index 4938fec..b858192 100644 --- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxProgressListenerTest.java +++ b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxProgressListenerTest.java @@ -16,12 +16,11 @@ */ package org.apache.commons.fileupload2.javax; -import java.io.ByteArrayInputStream; +import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload2.AbstractProgressListenerTest; -import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.ProgressListener; /** @@ -35,9 +34,8 @@ public class JavaxProgressListenerTest extends AbstractProgressListenerTest<Serv } @Override - protected HttpServletRequest newMockHttpServletRequest(final byte[] request, final Integer overrideContenLength, final Integer overrideReadLimit) { - return new JavaxMockHttpServletRequest(new ByteArrayInputStream(request), overrideContenLength != null ? overrideContenLength : request.length, - Constants.CONTENT_TYPE, overrideReadLimit != null ? overrideReadLimit : -1); + protected HttpServletRequest newMockHttpServletRequest(final InputStream request, final long requestLength, final String contentType, final int readLimit) { + return new JavaxMockHttpServletRequest(request, requestLength, contentType, readLimit); } } diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java index 97140d5..0df386d 100644 --- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java +++ b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java @@ -16,12 +16,11 @@ */ package org.apache.commons.fileupload2.javax; -import java.io.ByteArrayInputStream; +import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload2.AbstractSizesTest; -import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.disk.DiskFileItemFactory; /** @@ -35,9 +34,8 @@ public class JavaxSizesTest extends AbstractSizesTest<ServletFileUpload, HttpSer } @Override - protected JavaxMockHttpServletRequest newMockHttpServletRequest(final byte[] request, final Integer overrideContenLength, final Integer overrideReadLimit) { - return new JavaxMockHttpServletRequest(new ByteArrayInputStream(request), overrideContenLength != null ? overrideContenLength : request.length, - Constants.CONTENT_TYPE, overrideReadLimit != null ? overrideReadLimit : -1); + protected JavaxMockHttpServletRequest newMockHttpServletRequest(final InputStream request, final long requestLength, final String contentType, final int readLimit) { + return new JavaxMockHttpServletRequest(request, requestLength, contentType, readLimit); } } diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxStreamingTest.java b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxStreamingTest.java index 3bf6b93..6851b3c 100644 --- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxStreamingTest.java +++ b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxStreamingTest.java @@ -16,264 +16,30 @@ */ package org.apache.commons.fileupload2.javax; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FilterInputStream; -import java.io.IOException; import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.nio.charset.StandardCharsets; -import java.util.Iterator; -import java.util.List; import javax.servlet.http.HttpServletRequest; -import org.apache.commons.fileupload2.AbstractFileUpload; -import org.apache.commons.fileupload2.FileItem; -import org.apache.commons.fileupload2.FileItemIterator; -import org.apache.commons.fileupload2.FileItemStream; -import org.apache.commons.fileupload2.FileUploadException; -import org.apache.commons.fileupload2.InvalidFileNameException; -import org.apache.commons.fileupload2.MultipartStream; -import org.apache.commons.fileupload2.disk.DiskFileItemFactory; -import org.junit.jupiter.api.Test; +import org.apache.commons.fileupload2.AbstractStreamingTest; /** * Unit test for items with varying sizes. */ -public class JavaxStreamingTest { - - private String getFooter() { - return "-----1234--\r\n"; - } - - private String getHeader(final String value) { - // @formatter:off - return "-----1234\r\n" - + "Content-Disposition: form-data; name=\"" + value + "\"\r\n" - + "\r\n"; - // @formatter:on - } - - private byte[] newRequest() throws IOException { - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII)) { - int add = 16; - int num = 0; - for (int i = 0; i < 16384; i += add) { - if (++add == 32) { - add = 16; - } - osw.write(getHeader("field" + (num++))); - osw.flush(); - for (int j = 0; j < i; j++) { - baos.write((byte) j); - } - osw.write("\r\n"); - } - osw.write(getFooter()); - } - return baos.toByteArray(); - } +public class JavaxStreamingTest extends AbstractStreamingTest<ServletFileUpload, HttpServletRequest, ServletRequestContext> { - private byte[] newShortRequest() throws IOException { - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII)) { - osw.write(getHeader("field")); - osw.write("123"); - osw.write("\r\n"); - osw.write(getFooter()); - } - return baos.toByteArray(); + @Override + protected ServletFileUpload newFileUpload() { + return new ServletFileUpload(); } - private List<FileItem> parseUpload(final byte[] bytes) throws FileUploadException { - return parseUpload(new ByteArrayInputStream(bytes), bytes.length); - } - - private List<FileItem> parseUpload(final InputStream inputStream, final int length) throws FileUploadException { - final String contentType = "multipart/form-data; boundary=---1234"; - - final AbstractFileUpload upload = new ServletFileUpload(); - upload.setFileItemFactory(new DiskFileItemFactory()); - final HttpServletRequest request = new JavaxMockHttpServletRequest(inputStream, length, contentType, -1); - - return upload.parseRequest(new ServletRequestContext(request)); - } - - private FileItemIterator parseUpload(final int length, final InputStream inputStream) throws FileUploadException, IOException { - final String contentType = "multipart/form-data; boundary=---1234"; - - final AbstractFileUpload upload = new ServletFileUpload(); - upload.setFileItemFactory(new DiskFileItemFactory()); - final HttpServletRequest request = new JavaxMockHttpServletRequest(inputStream, length, contentType, -1); - - return upload.getItemIterator(new ServletRequestContext(request)); + @Override + protected HttpServletRequest newMockHttpServletRequest(final InputStream request, final long requestLength, final String contentType, final int readLimit) { + return new JavaxMockHttpServletRequest(request, requestLength, contentType, readLimit); } - /** - * Tests a file upload with varying file sizes. - */ - @Test - public void testFileUpload() throws IOException, FileUploadException { - final byte[] request = newRequest(); - final List<FileItem> fileItems = parseUpload(request); - final Iterator<FileItem> fileIter = fileItems.iterator(); - int add = 16; - int num = 0; - for (int i = 0; i < 16384; i += add) { - if (++add == 32) { - add = 16; - } - final FileItem item = fileIter.next(); - assertEquals("field" + (num++), item.getFieldName()); - final byte[] bytes = item.get(); - assertEquals(i, bytes.length); - for (int j = 0; j < i; j++) { - assertEquals((byte) j, bytes[j]); - } - } - assertTrue(!fileIter.hasNext()); - } - - /** - * Test for FILEUPLOAD-135 - */ - @Test - public void testFILEUPLOAD135() throws IOException, FileUploadException { - final byte[] request = newShortRequest(); - final ByteArrayInputStream bais = new ByteArrayInputStream(request); - final List<FileItem> fileItems = parseUpload(new InputStream() { - @Override - public int read() throws IOException { - return bais.read(); - } - - @Override - public int read(final byte[] b, final int off, final int len) throws IOException { - return bais.read(b, off, Math.min(len, 3)); - } - - }, request.length); - final Iterator<FileItem> fileIter = fileItems.iterator(); - assertTrue(fileIter.hasNext()); - final FileItem item = fileIter.next(); - assertEquals("field", item.getFieldName()); - final byte[] bytes = item.get(); - assertEquals(3, bytes.length); - assertEquals((byte) '1', bytes[0]); - assertEquals((byte) '2', bytes[1]); - assertEquals((byte) '3', bytes[2]); - assertTrue(!fileIter.hasNext()); - } - - /** - * Tests, whether an invalid request throws a proper exception. - */ - @Test - public void testFileUploadException() throws IOException, FileUploadException { - final byte[] request = newRequest(); - final byte[] invalidRequest = new byte[request.length - 11]; - System.arraycopy(request, 0, invalidRequest, 0, request.length - 11); - try { - parseUpload(invalidRequest); - fail("Expected EndOfStreamException"); - } catch (final FileUploadException e) { - assertTrue(e.getCause() instanceof MultipartStream.MalformedStreamException); - } - } - - /** - * Tests, whether an {@link InvalidFileNameException} is thrown. - */ - @Test - public void testInvalidFileNameException() throws Exception { - final String fileName = "foo.exe\u0000.png"; - // @formatter:off - final String request = - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"field\"\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value1\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value2\r\n" + - "-----1234--\r\n"; - // @formatter:on - final byte[] reqBytes = request.getBytes(StandardCharsets.US_ASCII); - - final FileItemIterator fileItemIter = parseUpload(reqBytes.length, new ByteArrayInputStream(reqBytes)); - final FileItemStream fileItemStream = fileItemIter.next(); - try { - fileItemStream.getName(); - fail("Expected exception"); - } catch (final InvalidFileNameException e) { - assertEquals(fileName, e.getName()); - assertEquals(-1, e.getMessage().indexOf(fileName)); - assertTrue(e.getMessage().contains("foo.exe\\0.png")); - } - - try { - parseUpload(reqBytes); - fail("Expected exception"); - } catch (final InvalidFileNameException e) { - assertEquals(fileName, e.getName()); - assertEquals(-1, e.getMessage().indexOf(fileName)); - assertTrue(e.getMessage().contains("foo.exe\\0.png")); - } - } - - /** - * Tests, whether an IOException is properly delegated. - */ - @Test - public void testIOException() throws IOException { - final byte[] request = newRequest(); - final InputStream stream = new FilterInputStream(new ByteArrayInputStream(request)) { - private int num; - - @Override - public int read() throws IOException { - if (++num > 123) { - throw new IOException("123"); - } - return super.read(); - } - - @Override - public int read(final byte[] buffer, final int offset, final int length) throws IOException { - for (int i = 0; i < length; i++) { - final int res = read(); - if (res == -1) { - return i == 0 ? -1 : i; - } - buffer[offset + i] = (byte) res; - } - return length; - } - }; - try { - parseUpload(stream, request.length); - fail("Expected IOException"); - } catch (final FileUploadException e) { - assertTrue(e.getCause() instanceof IOException); - assertEquals("123", e.getCause().getMessage()); - } + @Override + protected ServletRequestContext newServletRequestContext(final HttpServletRequest request) { + return new ServletRequestContext(request); } }