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 a4db368 Refactor to add JakartaProgressListenerTest a4db368 is described below commit a4db368a5eec7d26bdb85f627a0058df5914e01e Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Mon May 22 20:41:01 2023 -0400 Refactor to add JakartaProgressListenerTest --- .../fileupload2/AbstractProgressListenerTest.java | 58 +++++------ .../commons/fileupload2/AbstractSizesTest.java | 6 +- .../apache/commons/fileupload2/AbstractTest.java | 38 ++++++++ ...sTest.java => JakartaProgressListenerTest.java} | 16 ++- .../fileupload2/jakarta/JakartaSizesTest.java | 9 +- .../javax/JavaxProgressListenerTest.java | 108 +++------------------ .../commons/fileupload2/javax/JavaxSizesTest.java | 8 +- 7 files changed, 89 insertions(+), 154 deletions(-) diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxProgressListenerTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java similarity index 69% copy from commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxProgressListenerTest.java copy to commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java index cd3650a..110ed8a 100644 --- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxProgressListenerTest.java +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java @@ -14,30 +14,27 @@ * 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; -import static org.junit.jupiter.api.Assertions.fail; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import org.apache.commons.fileupload2.Constants; -import org.apache.commons.fileupload2.FileItemIterator; -import org.apache.commons.fileupload2.FileItemStream; -import org.apache.commons.fileupload2.FileUploadException; -import org.apache.commons.fileupload2.ProgressListener; import org.junit.jupiter.api.Test; /** * Tests the {@link ProgressListener}. + * + * @param <F> The subclass of FileUpload. + * @param <R> The type of FileUpload request. */ -public class JavaxProgressListenerTest { +public abstract class AbstractProgressListenerTest<F extends FileUpload<R>, R> extends AbstractTest<F, R> { - private static class ProgressListenerImpl implements ProgressListener { + protected static class ProgressListenerImpl implements ProgressListener { private final long expectedContentLength; @@ -71,24 +68,24 @@ public class JavaxProgressListenerTest { } - private void runTest(final int itemCount, final long contentLength, final JavaxMockHttpServletRequest request) throws FileUploadException, IOException { - final ServletFileUpload upload = new ServletFileUpload(); + protected void runTest(final int itemCount, final long contentLength, final R request) throws FileUploadException, IOException { + final F upload = newFileUpload(); final ProgressListenerImpl listener = new ProgressListenerImpl(contentLength, itemCount); upload.setProgressListener(listener); final FileItemIterator iter = upload.getItemIterator(request); for (int i = 0; i < itemCount; i++) { + final int idxI = i; final FileItemStream fileItemStream = iter.next(); try (final InputStream inputStream = fileItemStream.openStream()) { - for (int j = 0; j < 16384 + i; j++) { - /** - * This used to be assertEquals((byte) j, (byte) istream.read()); but this seems to trigger a bug in JRockit, so we express the same like - * this: - */ + for (int j = 0; j < 16_384 + i; j++) { + final int idxJ = j; + // + // This used to be assertEquals((byte) j, (byte) istream.read()); but this seems to trigger a bug in JRockit, so we express the same like + // this: + // final byte b1 = (byte) j; final byte b2 = (byte) inputStream.read(); - if (b1 != b2) { - fail("Expected " + b1 + ", got " + b2); - } + assertEquals(b1, b2, () -> String.format("itemCount = %,d, i = %,d, j = %,d", itemCount, idxI, idxJ)); } assertEquals(-1, inputStream.read()); } @@ -101,10 +98,10 @@ public class JavaxProgressListenerTest { * Parse a very long file upload by using a progress listener. */ @Test - public void testProgressListener() throws Exception { - final int NUM_ITEMS = 512; + public void testProgressListener() throws IOException { + final int numItems = 512; final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - for (int i = 0; i < NUM_ITEMS; i++) { + for (int i = 0; i < numItems; i++) { final String header = "-----1234\r\n" + "Content-Disposition: form-data; name=\"field" + (i + 1) + "\"\r\n" + "\r\n"; baos.write(header.getBytes(StandardCharsets.US_ASCII)); for (int j = 0; j < 16384 + i; j++) { @@ -113,17 +110,12 @@ public class JavaxProgressListenerTest { baos.write("\r\n".getBytes(StandardCharsets.US_ASCII)); } baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII)); - final byte[] contents = baos.toByteArray(); - - JavaxMockHttpServletRequest request = new JavaxMockHttpServletRequest(contents, Constants.CONTENT_TYPE); - runTest(NUM_ITEMS, contents.length, request); - request = new JavaxMockHttpServletRequest(contents, Constants.CONTENT_TYPE) { - @Override - public int getContentLength() { - return -1; - } - }; - runTest(NUM_ITEMS, contents.length, request); + final byte[] requestBytes = baos.toByteArray(); + + R request = newMockHttpServletRequest(requestBytes, null, null); + runTest(numItems, requestBytes.length, request); + request = newMockHttpServletRequest(requestBytes, -1, 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 a062f67..0224aa1 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 @@ -38,11 +38,7 @@ import org.junit.jupiter.api.Test; * @param <F> The subclass of FileUpload. * @param <R> The type of FileUpload request. */ -public abstract class AbstractSizesTest<F extends FileUpload<R>, R> { - - protected abstract F newFileUpload(); - - protected abstract R newMockHttpServletRequest(String request, Integer overrideContenLength, Integer overrideReadLimit); +public abstract class AbstractSizesTest<F extends FileUpload<R>, R> extends AbstractTest<F, R> { /** * Checks, whether limiting the file size works. 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 new file mode 100644 index 0000000..8858294 --- /dev/null +++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.fileupload2; + +import java.nio.charset.StandardCharsets; + +/** + * Abstract test. + * + * @param <F> The subclass of FileUpload. + * @param <R> The type of FileUpload request. + */ +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 String request, final Integer overrideContenLength, final Integer overrideReadLimit) { + return newMockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), overrideContenLength, overrideReadLimit); + } + +} 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/JakartaProgressListenerTest.java similarity index 63% copy from commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java copy to commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaProgressListenerTest.java index e6ca4d5..f6696e3 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/JakartaProgressListenerTest.java @@ -17,28 +17,26 @@ package org.apache.commons.fileupload2.jakarta; import java.io.ByteArrayInputStream; -import java.nio.charset.StandardCharsets; +import org.apache.commons.fileupload2.AbstractProgressListenerTest; import org.apache.commons.fileupload2.Constants; -import org.apache.commons.fileupload2.AbstractSizesTest; -import org.apache.commons.fileupload2.disk.DiskFileItemFactory; +import org.apache.commons.fileupload2.ProgressListener; import jakarta.servlet.http.HttpServletRequest; /** - * Unit test for items with varying sizes. + * Tests the {@link ProgressListener}. */ -public class JakartaSizesTest extends AbstractSizesTest<JakartaServletFileUpload, HttpServletRequest> { +public class JakartaProgressListenerTest extends AbstractProgressListenerTest<JakartaServletFileUpload, HttpServletRequest> { @Override protected JakartaServletFileUpload newFileUpload() { - return new JakartaServletFileUpload(new DiskFileItemFactory()); + return new JakartaServletFileUpload(); } @Override - protected JakartaMockHttpServletRequest newMockHttpServletRequest(final String request, final Integer overrideContenLength, final Integer overrideReadLimit) { - final byte[] requestData = request.getBytes(StandardCharsets.US_ASCII); - return new JakartaMockHttpServletRequest(new ByteArrayInputStream(requestData), overrideContenLength != null ? overrideContenLength : requestData.length, + 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); } 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 e6ca4d5..f4fc352 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 @@ -17,10 +17,9 @@ package org.apache.commons.fileupload2.jakarta; import java.io.ByteArrayInputStream; -import java.nio.charset.StandardCharsets; -import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.AbstractSizesTest; +import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.disk.DiskFileItemFactory; import jakarta.servlet.http.HttpServletRequest; @@ -36,9 +35,9 @@ public class JakartaSizesTest extends AbstractSizesTest<JakartaServletFileUpload } @Override - protected JakartaMockHttpServletRequest newMockHttpServletRequest(final String request, final Integer overrideContenLength, final Integer overrideReadLimit) { - final byte[] requestData = request.getBytes(StandardCharsets.US_ASCII); - return new JakartaMockHttpServletRequest(new ByteArrayInputStream(requestData), overrideContenLength != null ? overrideContenLength : requestData.length, + 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); } 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 cd3650a..4938fec 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,114 +16,28 @@ */ 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.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; +import javax.servlet.http.HttpServletRequest; +import org.apache.commons.fileupload2.AbstractProgressListenerTest; import org.apache.commons.fileupload2.Constants; -import org.apache.commons.fileupload2.FileItemIterator; -import org.apache.commons.fileupload2.FileItemStream; -import org.apache.commons.fileupload2.FileUploadException; import org.apache.commons.fileupload2.ProgressListener; -import org.junit.jupiter.api.Test; /** * Tests the {@link ProgressListener}. */ -public class JavaxProgressListenerTest { - - private static class ProgressListenerImpl implements ProgressListener { - - private final long expectedContentLength; - - private final int expectedItems; - - private Long bytesRead; - - private Integer items; - - ProgressListenerImpl(final long contentLength, final int itemCount) { - expectedContentLength = contentLength; - expectedItems = itemCount; - } - - void checkFinished() { - assertEquals(expectedContentLength, bytesRead.longValue()); - assertEquals(expectedItems, items.intValue()); - } - - @Override - public void update(final long actualBytesRead, final long actualContentLength, final int actualItems) { - assertTrue(actualBytesRead >= 0 && actualBytesRead <= expectedContentLength); - assertTrue(actualContentLength == -1 || actualContentLength == expectedContentLength); - assertTrue(actualItems >= 0 && actualItems <= expectedItems); - - assertTrue(bytesRead == null || actualBytesRead >= bytesRead.longValue()); - bytesRead = Long.valueOf(actualBytesRead); - assertTrue(items == null || actualItems >= items.intValue()); - items = Integer.valueOf(actualItems); - } +public class JavaxProgressListenerTest extends AbstractProgressListenerTest<ServletFileUpload, HttpServletRequest> { + @Override + protected ServletFileUpload newFileUpload() { + return new ServletFileUpload(); } - private void runTest(final int itemCount, final long contentLength, final JavaxMockHttpServletRequest request) throws FileUploadException, IOException { - final ServletFileUpload upload = new ServletFileUpload(); - final ProgressListenerImpl listener = new ProgressListenerImpl(contentLength, itemCount); - upload.setProgressListener(listener); - final FileItemIterator iter = upload.getItemIterator(request); - for (int i = 0; i < itemCount; i++) { - final FileItemStream fileItemStream = iter.next(); - try (final InputStream inputStream = fileItemStream.openStream()) { - for (int j = 0; j < 16384 + i; j++) { - /** - * This used to be assertEquals((byte) j, (byte) istream.read()); but this seems to trigger a bug in JRockit, so we express the same like - * this: - */ - final byte b1 = (byte) j; - final byte b2 = (byte) inputStream.read(); - if (b1 != b2) { - fail("Expected " + b1 + ", got " + b2); - } - } - assertEquals(-1, inputStream.read()); - } - } - assertTrue(!iter.hasNext()); - listener.checkFinished(); - } - - /** - * Parse a very long file upload by using a progress listener. - */ - @Test - public void testProgressListener() throws Exception { - final int NUM_ITEMS = 512; - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - for (int i = 0; i < NUM_ITEMS; i++) { - final String header = "-----1234\r\n" + "Content-Disposition: form-data; name=\"field" + (i + 1) + "\"\r\n" + "\r\n"; - baos.write(header.getBytes(StandardCharsets.US_ASCII)); - for (int j = 0; j < 16384 + i; j++) { - baos.write((byte) j); - } - baos.write("\r\n".getBytes(StandardCharsets.US_ASCII)); - } - baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII)); - final byte[] contents = baos.toByteArray(); - - JavaxMockHttpServletRequest request = new JavaxMockHttpServletRequest(contents, Constants.CONTENT_TYPE); - runTest(NUM_ITEMS, contents.length, request); - request = new JavaxMockHttpServletRequest(contents, Constants.CONTENT_TYPE) { - @Override - public int getContentLength() { - return -1; - } - }; - runTest(NUM_ITEMS, contents.length, request); + @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); } } 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 ebdc360..97140d5 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 @@ -17,12 +17,11 @@ package org.apache.commons.fileupload2.javax; import java.io.ByteArrayInputStream; -import java.nio.charset.StandardCharsets; import javax.servlet.http.HttpServletRequest; -import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.AbstractSizesTest; +import org.apache.commons.fileupload2.Constants; import org.apache.commons.fileupload2.disk.DiskFileItemFactory; /** @@ -36,9 +35,8 @@ public class JavaxSizesTest extends AbstractSizesTest<ServletFileUpload, HttpSer } @Override - protected JavaxMockHttpServletRequest newMockHttpServletRequest(final String request, final Integer overrideContenLength, final Integer overrideReadLimit) { - final byte[] requestData = request.getBytes(StandardCharsets.US_ASCII); - return new JavaxMockHttpServletRequest(new ByteArrayInputStream(requestData), overrideContenLength != null ? overrideContenLength : requestData.length, + 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); }