From a16dbb0b3889c8a5957c5845eb5364500c970784 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Soblet Date: Wed, 14 Oct 2020 10:45:19 +0200 Subject: [PATCH] WW-5088: Integration test for empty file upload. --- .../struts2/showcase/FileUploadTest.java | 36 +++++++++++++++++++ .../multipart/JakartaMultiPartRequest.java | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java new file mode 100644 index 000000000..9fb31f1c3 --- /dev/null +++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java @@ -0,0 +1,36 @@ +package it.org.apache.struts2.showcase; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.DomElement; +import com.gargoylesoftware.htmlunit.html.HtmlFileInput; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlInput; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; +import org.junit.Assert; +import org.junit.Test; + +import java.io.File; + +public class FileUploadTest { + + @Test + public void testEmptyFile() throws Exception { + try (final WebClient webClient = new WebClient()) { + final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + "/fileupload/doUpload.action"); + final HtmlForm form = page.getFormByName("doUpload"); + HtmlInput captionInput = form.getInputByName("caption"); + HtmlFileInput uploadInput = form.getInputByName("upload"); + captionInput.type("some caption"); + File tempFile = File.createTempFile("testEmptyFile", ".tmp"); + tempFile.deleteOnExit(); + uploadInput.setValueAttribute(tempFile.getAbsolutePath()); + final HtmlSubmitInput button = form.getInputByValue("Submit"); + final HtmlPage resultPage = button.click(); + DomElement errorMessage = resultPage.getFirstByXPath("//span[@class='errorMessage']"); + Assert.assertNotNull(errorMessage); + Assert.assertEquals("File cannot be empty", errorMessage.getVisibleText()); + } + } + +} diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java index 76d35c328..c629ec043 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java @@ -157,7 +157,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { protected DiskFileItemFactory createDiskFileItemFactory(String saveDir) { DiskFileItemFactory fac = new DiskFileItemFactory(); // Make sure that the data is written to file, even if the file is empty. - fac.setSizeThreshold(0); + fac.setSizeThreshold(-1); if (saveDir != null) { fac.setRepository(new File(saveDir)); }