Repository: olingo-odata2 Updated Branches: refs/heads/master 24119a786 -> 5a416b9e6
[OLINGO-436] Fix: blank lines must contain CRLF Signed-off-by: Christian Amend <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/5a416b9e Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/5a416b9e Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/5a416b9e Branch: refs/heads/master Commit: 5a416b9e65d75655b1541f1f80af9459fa62aa2f Parents: 24119a7 Author: Christian Holzer <[email protected]> Authored: Tue Oct 14 15:06:02 2014 +0200 Committer: Christian Amend <[email protected]> Committed: Tue Oct 14 15:34:27 2014 +0200 ---------------------------------------------------------------------- .../odata2/core/batch/v2/BatchParserCommon.java | 2 +- .../core/batch/BatchRequestParserTest.java | 18 +++++- .../src/test/resources/batchLarge.batch | 3 + .../olingo/odata2/fit/basic/BasicBatchTest.java | 66 ++++++++++---------- .../apache/olingo/odata2/fit/ref/BatchTest.java | 4 +- .../odata2/testutil/helper/StringHelper.java | 19 +++++- 6 files changed, 74 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a416b9e/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParserCommon.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParserCommon.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParserCommon.java index 62f03c2..c2751ee 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParserCommon.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParserCommon.java @@ -193,7 +193,7 @@ public class BatchParserCommon { public static void consumeBlankLine(final List<Line> remainingMessage, final boolean isStrict) throws BatchException { - if (remainingMessage.size() > 0 && "".equals(remainingMessage.get(0).toString().trim())) { + if (remainingMessage.size() > 0 && remainingMessage.get(0).toString().matches("\\s*\r\n\\s*")) { remainingMessage.remove(0); } else { if (isStrict) { http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a416b9e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestParserTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestParserTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestParserTest.java index 1a374a5..447049e 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestParserTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestParserTest.java @@ -389,7 +389,21 @@ public class BatchRequestParserTest { + "--batch_8194-cf13-1f56--"; parseInvalidBatchBody(batch); } - + + @Test(expected = BatchException.class) + public void testGetRequestMissingCRLF() throws BatchException { + String batch = "--batch_8194-cf13-1f56" + CRLF + + MIME_HEADERS + + "Content-ID: 1" + CRLF + + CRLF + + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF + //+ CRLF // Belongs to the GET request + + CRLF //Belongs to the + + "--batch_8194-cf13-1f56--"; + + parseInvalidBatchBody(batch); + } + @Test(expected = BatchException.class) public void testInvalidMethodForBatch() throws BatchException { String batch = "--batch_8194-cf13-1f56" + CRLF @@ -961,6 +975,7 @@ public class BatchRequestParserTest { + "accept: */*,application/atom+xml,application/atomsvc+xml,application/xml" + CRLF + "Content-Id: BBB" + CRLF + CRLF + + CRLF + "--batch_8194-cf13-1f56" + CRLF + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" + CRLF + CRLF @@ -1074,6 +1089,7 @@ public class BatchRequestParserTest { + "accept: */*,application/atom+xml,application/atomsvc+xml,application/xml" + CRLF + "Content-Id: BBB" + CRLF + CRLF + + CRLF + "--batch_8194-cf13-1f56" + CRLF + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" + CRLF + CRLF http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a416b9e/odata2-lib/odata-core/src/test/resources/batchLarge.batch ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/batchLarge.batch b/odata2-lib/odata-core/src/test/resources/batchLarge.batch index 6d0fc6e..faadea1 100644 --- a/odata2-lib/odata-core/src/test/resources/batchLarge.batch +++ b/odata2-lib/odata-core/src/test/resources/batchLarge.batch @@ -12,6 +12,7 @@ Content-Type: application/atom+xml Accept-Encoding: gzip,deflate Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 + --batch_8194-cf13-1f56 Content-Type: application/http Content-Transfer-Encoding: binary @@ -26,6 +27,7 @@ Content-Type: application/atom+xml Accept-Encoding: gzip,deflate Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 + --batch_8194-cf13-1f56 Content-Type: application/http Content-Transfer-Encoding: binary @@ -40,6 +42,7 @@ Content-Type: application/atom+xml Accept-Encoding: gzip,deflate Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 + --batch_8194-cf13-1f56 Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a416b9e/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicBatchTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicBatchTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicBatchTest.java index d440635..b57e1e6 100644 --- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicBatchTest.java +++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicBatchTest.java @@ -70,44 +70,44 @@ public class BasicBatchTest extends AbstractBasicTest { super(servletType); } - private static final String LF = "\n"; + private static final String CRLF = "\r\n"; private static final String REG_EX_BOUNDARY = "(([a-zA-Z0-9_\\-\\.'\\+]{1,70})|\"([a-zA-Z0-9_\\-\\.'\\+\\s\\(\\),/:=\\?]" + "{1,69}[a-zA-Z0-9_\\-\\.'\\+\\(\\),/:=\\?])\")"; private static final String REG_EX = "multipart/mixed;\\s*boundary=" + REG_EX_BOUNDARY + "\\s*"; private static final String REQUEST_PAYLOAD = - "--batch_98c1-8b13-36bb" + LF - + "Content-Type: application/http" + LF - + "Content-Transfer-Encoding: binary" + LF - + "Content-Id: mimeHeaderContentId1" + LF - + LF - + "GET Employees('1')/EmployeeName HTTP/1.1" + LF - + "Host: localhost:19000" + LF - + "Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1" + LF - + "Accept-Language: en" + LF - + "MaxDataServiceVersion: 2.0" + LF - + "Content-Id: requestHeaderContentId1" + LF - + LF - + LF - + "--batch_98c1-8b13-36bb" + LF - + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" + LF - + LF - + "--changeset_f980-1cb6-94dd" + LF - + "Content-Type: application/http" + LF - + "Content-Transfer-Encoding: binary" + LF - + "Content-Id: mimeHeaderContentId2" + LF - + LF - + "PUT Employees('1')/EmployeeName HTTP/1.1" + LF - + "Host: localhost:19000" + LF - + "Content-Type: application/json;odata=verbose" + LF - + "MaxDataServiceVersion: 2.0" + LF - + "Content-Id: requestHeaderContentId2" + LF - + LF - + "{\"EmployeeName\":\"Walter Winter MODIFIED\"}" + LF - + LF - + "--changeset_f980-1cb6-94dd--" + LF - + LF + "--batch_98c1-8b13-36bb" + CRLF + + "Content-Type: application/http" + CRLF + + "Content-Transfer-Encoding: binary" + CRLF + + "Content-Id: mimeHeaderContentId1" + CRLF + + CRLF + + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF + + "Host: localhost:19000" + CRLF + + "Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1" + CRLF + + "Accept-Language: en" + CRLF + + "MaxDataServiceVersion: 2.0" + CRLF + + "Content-Id: requestHeaderContentId1" + CRLF + + CRLF + + CRLF + + "--batch_98c1-8b13-36bb" + CRLF + + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" + CRLF + + CRLF + + "--changeset_f980-1cb6-94dd" + CRLF + + "Content-Type: application/http" + CRLF + + "Content-Transfer-Encoding: binary" + CRLF + + "Content-Id: mimeHeaderContentId2" + CRLF + + CRLF + + "PUT Employees('1')/EmployeeName HTTP/1.1" + CRLF + + "Host: localhost:19000" + CRLF + + "Content-Type: application/json;odata=verbose" + CRLF + + "MaxDataServiceVersion: 2.0" + CRLF + + "Content-Id: requestHeaderContentId2" + CRLF + + CRLF + + "{\"EmployeeName\":\"Walter Winter MODIFIED\"}" + CRLF + + CRLF + + "--changeset_f980-1cb6-94dd--" + CRLF + + CRLF + "--batch_98c1-8b13-36bb--"; @Test @@ -138,7 +138,7 @@ public class BasicBatchTest extends AbstractBasicTest { public void testBatchInvalidContentTypeForPut() throws Exception { final HttpPost post = new HttpPost(URI.create(getEndpoint().toString() + "$batch")); post.setHeader("Content-Type", "multipart/mixed;boundary=batch_98c1-8b13-36bb"); - String replacedEntity = REQUEST_PAYLOAD.replace("Content-Type: application/json;odata=verbose" + LF, ""); + String replacedEntity = REQUEST_PAYLOAD.replace("Content-Type: application/json;odata=verbose" + CRLF, ""); HttpEntity entity = new StringEntity(replacedEntity); post.setEntity(entity); HttpResponse response = getHttpClient().execute(post); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a416b9e/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java index f4e81f0..de5f291 100644 --- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java +++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java @@ -130,7 +130,7 @@ public class BatchTest extends AbstractRefTest { private String execute(final String batchResource) throws Exception { HttpResponse response = execute(batchResource, "batch_123"); - String responseBody = StringHelper.inputStreamToString(response.getEntity().getContent(), true); + String responseBody = StringHelper.inputStreamToStringCRLFLineBreaks(response.getEntity().getContent()); return responseBody; } @@ -139,7 +139,7 @@ public class BatchTest extends AbstractRefTest { final HttpPost post = new HttpPost(URI.create(getEndpoint().toString() + "$batch")); post.setHeader("Content-Type", "multipart/mixed;boundary=" + boundary); - String body = StringHelper.inputStreamToString(this.getClass().getResourceAsStream(batchResource), true); + String body = StringHelper.inputStreamToStringCRLFLineBreaks(this.getClass().getResourceAsStream(batchResource)); HttpEntity entity = new StringEntity(body); post.setEntity(entity); HttpResponse response = getHttpClient().execute(post); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a416b9e/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java index f47bde6..2fd6f8a 100644 --- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java +++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java @@ -77,7 +77,7 @@ public class StringHelper { BufferedReader br = new BufferedReader(new StringReader(asString())); StringBuilder sb = new StringBuilder(br.readLine()); String line = br.readLine(); - while(line != null) { + while (line != null) { sb.append(separator).append(line); line = br.readLine(); } @@ -143,6 +143,23 @@ public class StringHelper { return result; } + public static String inputStreamToStringCRLFLineBreaks(final InputStream in) throws IOException { + final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8"))); + final StringBuilder stringBuilder = new StringBuilder(); + String line = null; + + while ((line = bufferedReader.readLine()) != null) { + stringBuilder.append(line); + stringBuilder.append("\r\n"); + } + + bufferedReader.close(); + + final String result = stringBuilder.toString(); + + return result; + } + public static int countLines(final String content) { return countLines(content, "\r\n"); }
