From 504d7c8291ca2332598a6f58f38bafb4688af1c6 Mon Sep 17 00:00:00 2001 From: David Moles Date: Mon, 27 Jun 2016 11:05:47 -0700 Subject: [PATCH 1/3] Add unit tests for issue #11 --- pom.xml | 26 + .../swordapp/server/SwordAPIEndpointTest.java | 79 ++ src/test/resources/attachment-body.dat | 675 ++++++++++++++++++ src/test/resources/form-data-body.dat | 675 ++++++++++++++++++ 4 files changed, 1455 insertions(+) create mode 100644 src/test/java/org/swordapp/server/SwordAPIEndpointTest.java create mode 100644 src/test/resources/attachment-body.dat create mode 100644 src/test/resources/form-data-body.dat diff --git a/pom.xml b/pom.xml index 26597f6..6f1a0f8 100644 --- a/pom.xml +++ b/pom.xml @@ -189,5 +189,31 @@ xom 1.1 + + + + junit + junit + 4.12 + test + + + org.mockito + mockito-all + 1.10.19 + test + + + org.assertj + assertj-core + 3.4.1 + test + + + commons-io + commons-io + 2.5 + test + diff --git a/src/test/java/org/swordapp/server/SwordAPIEndpointTest.java b/src/test/java/org/swordapp/server/SwordAPIEndpointTest.java new file mode 100644 index 0000000..c5d8e5a --- /dev/null +++ b/src/test/java/org/swordapp/server/SwordAPIEndpointTest.java @@ -0,0 +1,79 @@ +package org.swordapp.server; + +import org.apache.commons.fileupload.disk.DiskFileItem; +import org.apache.commons.io.Charsets; +import org.apache.commons.io.IOUtils; +import org.junit.Before; +import org.junit.Test; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class SwordAPIEndpointTest { + + private SwordAPIEndpoint endpoint; + + @Before + public void setUp() { + SwordConfiguration config = mock(SwordConfiguration.class); + endpoint = new SwordAPIEndpoint(config); + } + + private String getResourceAsString(String resource) throws IOException { + return IOUtils.toString(getClass().getResourceAsStream(resource), Charsets.UTF_8); + } + + private String ensureCRLF(String data) { + return data.replaceAll("\\r?\\n", "\r\n"); + } + + private ServletInputStream makeServletInputStream(byte[] bodyBytes) throws IOException { + final InputStream in = new ByteArrayInputStream(bodyBytes); + return new ServletInputStream() { + @Override + public int read() throws IOException { + return in.read(); + } + }; + } + + private HttpServletRequest makeRequest(String bodyResource) throws IOException { + byte[] bodyBytes = ensureCRLF(getResourceAsString(bodyResource)).getBytes(); + int contentLength = bodyBytes.length; + + HttpServletRequest request = mock(HttpServletRequest.class); + when(request.getContentLength()).thenReturn(contentLength); + when(request.getContentType()).thenReturn("multipart/related;\r\n" + + " boundary=\"===============0670350989==\";\r\n" + + " type=\"application/atom+xml\""); + when(request.getCharacterEncoding()).thenReturn(Charsets.UTF_8.name()); + + ServletInputStream sis = makeServletInputStream(bodyBytes); + when(request.getInputStream()).thenReturn(sis); + return request; + } + + /** Make sure we don't break the current behavior */ + @Test + public void getPartsFromRequestHandlesFormData() throws Exception { + HttpServletRequest request = makeRequest("/form-data-body.dat"); + List parts = endpoint.getPartsFromRequest(request); + assertThat(parts).hasSize(2); + } + + /** Make sure can handle requests that follow the spec */ + @Test + public void getPartsFromRequestHandlesAttachment() throws Exception { + HttpServletRequest request = makeRequest("/attachment-body.dat"); + List parts = endpoint.getPartsFromRequest(request); + assertThat(parts).hasSize(2); + } +} diff --git a/src/test/resources/attachment-body.dat b/src/test/resources/attachment-body.dat new file mode 100644 index 0000000..deab87f --- /dev/null +++ b/src/test/resources/attachment-body.dat @@ -0,0 +1,675 @@ + +--===============0670350989== +Content-Type: application/atom+xml +MIME-Version: 1.0 +Content-Disposition: attachment; name="atom" + + + + The Beach + urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a + 2005-10-07T17:17:08Z + Daffy + A nice sunset picture over the water. + + + + + The abstract + Access Rights + Accrual Method + Accrual Periodicity + Accrual Policy + Alternative Title + Audience + Date Available + Bibliographic Citation + Conforms to + Contributor + Coverage + Date Created + Creator + Date + Date Accepted + Date Copyrighted + Date Submitted + Description + Education Level + Extent + Format + Has Format + Has Part + Has Version + Identifier + Instructional Method + Is Format Of + Is Part Of + Is Referenced By + Is Replaced By + Is Required By + Date Issued + Is Version Of + Language + Licence + Mediator + Medium + Date Modified + Provenance + Publisher + References + Relation + Replaces + Reqires + Rights + Rights Holder + Source + Spatial + Subject + T.O.C + Temporal + Title + Type + Valid + + +--===============0670350989== +Content-Type: application/zip +MIME-Version: 1.0 +Content-Disposition: attachment; name="payload"; filename="example.zip" +Content-Transfer-Encoding: base64 + +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 +--===============0670350989==-- diff --git a/src/test/resources/form-data-body.dat b/src/test/resources/form-data-body.dat new file mode 100644 index 0000000..ec7a779 --- /dev/null +++ b/src/test/resources/form-data-body.dat @@ -0,0 +1,675 @@ + +--===============0670350989== +Content-Type: application/atom+xml +MIME-Version: 1.0 +Content-Disposition: form-data; name="atom" + + + + The Beach + urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a + 2005-10-07T17:17:08Z + Daffy + A nice sunset picture over the water. + + + + + The abstract + Access Rights + Accrual Method + Accrual Periodicity + Accrual Policy + Alternative Title + Audience + Date Available + Bibliographic Citation + Conforms to + Contributor + Coverage + Date Created + Creator + Date + Date Accepted + Date Copyrighted + Date Submitted + Description + Education Level + Extent + Format + Has Format + Has Part + Has Version + Identifier + Instructional Method + Is Format Of + Is Part Of + Is Referenced By + Is Replaced By + Is Required By + Date Issued + Is Version Of + Language + Licence + Mediator + Medium + Date Modified + Provenance + Publisher + References + Relation + Replaces + Reqires + Rights + Rights Holder + Source + Spatial + Subject + T.O.C + Temporal + Title + Type + Valid + + +--===============0670350989== +Content-Type: application/zip +MIME-Version: 1.0 +Content-Disposition: form-data; name="payload"; filename="example.zip" +Content-Transfer-Encoding: base64 + +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 +--===============0670350989==-- From 05f9ba2e97dd8d2a02b1b814023779f4514a44e4 Mon Sep 17 00:00:00 2001 From: David Moles Date: Mon, 27 Jun 2016 11:06:35 -0700 Subject: [PATCH 2/3] Fix for issue #11: patch SwordAPIEndpoint with FileUploadBase that's more liberal about Content-Disposition --- .../org/swordapp/server/SwordAPIEndpoint.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/swordapp/server/SwordAPIEndpoint.java b/src/main/java/org/swordapp/server/SwordAPIEndpoint.java index a5a8358..ddd2bb2 100644 --- a/src/main/java/org/swordapp/server/SwordAPIEndpoint.java +++ b/src/main/java/org/swordapp/server/SwordAPIEndpoint.java @@ -7,6 +7,7 @@ import org.apache.abdera.parser.Parser; import org.apache.commons.codec.binary.Base64; import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.FileItemHeaders; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.ParameterParser; import org.apache.commons.fileupload.disk.DiskFileItem; @@ -462,7 +463,23 @@ protected List getPartsFromRequest(HttpServletRequest request) FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler - ServletFileUpload upload = new ServletFileUpload(factory); + ServletFileUpload upload = new ServletFileUpload(factory) { + // Work around WONTFIX https://issues.apache.org/jira/browse/FILEUPLOAD-239 + @Override + protected String getFieldName(FileItemHeaders headers) { + String contentDisposition = headers.getHeader(CONTENT_DISPOSITION); + if (contentDisposition != null) { + ParameterParser parser = new ParameterParser(); + parser.setLowerCaseNames(true); + Map params = parser.parse(contentDisposition, ';'); + String fieldName = (String) params.get("name"); + if (fieldName != null) { + return fieldName.trim(); + } + } + return null; + } + }; // Parse the request List items = upload.parseRequest(request); From d8ace86f9d35cb1b732b7537e07bf535ea751b71 Mon Sep 17 00:00:00 2001 From: David Moles Date: Mon, 27 Jun 2016 15:16:18 -0700 Subject: [PATCH 3/3] Fix for #13: update to commons-fileupload 1.3.2; add unit tests for item headers --- pom.xml | 2 +- .../org/swordapp/server/SwordAPIEndpoint.java | 14 +++---- .../swordapp/server/SwordAPIEndpointTest.java | 37 +++++++++++++++++-- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 6f1a0f8..a90c852 100644 --- a/pom.xml +++ b/pom.xml @@ -177,7 +177,7 @@ commons-fileupload commons-fileupload - 1.2.1 + 1.3.2 com.hp.hpl.jena diff --git a/src/main/java/org/swordapp/server/SwordAPIEndpoint.java b/src/main/java/org/swordapp/server/SwordAPIEndpoint.java index ddd2bb2..eeb6929 100644 --- a/src/main/java/org/swordapp/server/SwordAPIEndpoint.java +++ b/src/main/java/org/swordapp/server/SwordAPIEndpoint.java @@ -6,10 +6,7 @@ import org.apache.abdera.model.Entry; import org.apache.abdera.parser.Parser; import org.apache.commons.codec.binary.Base64; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.FileItemHeaders; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.ParameterParser; +import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @@ -255,8 +252,8 @@ protected void addDepositPropertiesFromMultipart(Deposit deposit, HttpServletReq throws ServletException, IOException, SwordError { // Parse the request for files (using the fileupload commons library) - List items = this.getPartsFromRequest(req); - for (DiskFileItem item : items) + List items = this.getPartsFromRequest(req); + for (FileItem item : items) { // find out which part we are looking at String contentDisposition = item.getHeaders().getHeader("Content-Disposition"); @@ -454,7 +451,7 @@ protected String getContentDispositionValue(String contentDisposition, String ke return parameters.get(key); } - protected List getPartsFromRequest(HttpServletRequest request) + protected List getPartsFromRequest(HttpServletRequest request) throws ServletException { try @@ -482,8 +479,7 @@ protected String getFieldName(FileItemHeaders headers) { }; // Parse the request - List items = upload.parseRequest(request); - + List items = upload.parseRequest(request); return items; } catch (FileUploadException e) diff --git a/src/test/java/org/swordapp/server/SwordAPIEndpointTest.java b/src/test/java/org/swordapp/server/SwordAPIEndpointTest.java index c5d8e5a..5cccd11 100644 --- a/src/test/java/org/swordapp/server/SwordAPIEndpointTest.java +++ b/src/test/java/org/swordapp/server/SwordAPIEndpointTest.java @@ -1,6 +1,7 @@ package org.swordapp.server; -import org.apache.commons.fileupload.disk.DiskFileItem; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemHeaders; import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; import org.junit.Before; @@ -65,15 +66,45 @@ private HttpServletRequest makeRequest(String bodyResource) throws IOException { @Test public void getPartsFromRequestHandlesFormData() throws Exception { HttpServletRequest request = makeRequest("/form-data-body.dat"); - List parts = endpoint.getPartsFromRequest(request); + List parts = endpoint.getPartsFromRequest(request); assertThat(parts).hasSize(2); + + FileItem entry = parts.get(0); + assertThat(entry.getContentType()).isEqualTo("application/atom+xml"); + FileItemHeaders entryHeaders = entry.getHeaders(); + assertThat(entryHeaders).isNotNull(); + assertThat(entryHeaders.getHeader("MIME-Version")).isEqualTo("1.0"); + assertThat(entryHeaders.getHeader("Content-Disposition")).isEqualTo("form-data; name=\"atom\""); + + FileItem payload = parts.get(1); + assertThat(payload.getContentType()).isEqualTo("application/zip"); + FileItemHeaders payloadHeaders = payload.getHeaders(); + assertThat(payloadHeaders).isNotNull(); + assertThat(payloadHeaders.getHeader("MIME-Version")).isEqualTo("1.0"); + assertThat(payloadHeaders.getHeader("Content-Disposition")).isEqualTo("form-data; name=\"payload\"; filename=\"example.zip\""); + assertThat(payloadHeaders.getHeader("Content-Transfer-Encoding")).isEqualTo("base64"); } /** Make sure can handle requests that follow the spec */ @Test public void getPartsFromRequestHandlesAttachment() throws Exception { HttpServletRequest request = makeRequest("/attachment-body.dat"); - List parts = endpoint.getPartsFromRequest(request); + List parts = endpoint.getPartsFromRequest(request); assertThat(parts).hasSize(2); + + FileItem entry = parts.get(0); + assertThat(entry.getContentType()).isEqualTo("application/atom+xml"); + FileItemHeaders entryHeaders = entry.getHeaders(); + assertThat(entryHeaders).isNotNull(); + assertThat(entryHeaders.getHeader("MIME-Version")).isEqualTo("1.0"); + assertThat(entryHeaders.getHeader("Content-Disposition")).isEqualTo("attachment; name=\"atom\""); + + FileItem payload = parts.get(1); + assertThat(payload.getContentType()).isEqualTo("application/zip"); + FileItemHeaders payloadHeaders = payload.getHeaders(); + assertThat(payloadHeaders).isNotNull(); + assertThat(payloadHeaders.getHeader("MIME-Version")).isEqualTo("1.0"); + assertThat(payloadHeaders.getHeader("Content-Disposition")).isEqualTo("attachment; name=\"payload\"; filename=\"example.zip\""); + assertThat(payloadHeaders.getHeader("Content-Transfer-Encoding")).isEqualTo("base64"); } }