You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/01/27 20:25:06 UTC
[08/37] olingo-odata2 git commit: [OLINGO-521]
BatchResponseWriterTests and BatchRequestWriterTests improved
[OLINGO-521] BatchResponseWriterTests and BatchRequestWriterTests improved
Signed-off-by: Christian Amend <ch...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/2186daa3
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/2186daa3
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/2186daa3
Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: 2186daa3164d714f8c01129bb76f80e80b81ab6d
Parents: 14c534e
Author: Christian Holzer <c....@sap.com>
Authored: Mon Dec 15 15:28:10 2014 +0100
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Dec 16 16:13:19 2014 +0100
----------------------------------------------------------------------
.../odata2/core/batch/BatchRequestWriter.java | 3 +-
.../odata2/core/batch/BatchRequestTest.java | 8 +-
.../core/batch/BatchRequestWriterTest.java | 214 +++++++++++++------
.../core/batch/BatchResponseParserTest.java | 63 ++++++
.../core/batch/BatchResponseWriterTest.java | 128 +++++++----
5 files changed, 304 insertions(+), 112 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2186daa3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
index 9ec21cd..85242c6 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
@@ -59,7 +59,6 @@ public class BatchRequestWriter {
request.getContentId());
}
- writer.append(CRLF); // CRLF belongs to the boundary delimiter or boundary closing delimiter
}
writer.append("--").append(boundary).append("--");
InputStream batchRequestBody;
@@ -109,6 +108,8 @@ public class BatchRequestWriter {
if (body != null && !body.isEmpty()) {
writer.append(body);
+ } else {
+ writer.append(CRLF);
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2186daa3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
index f526920..7898a2c 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
@@ -101,7 +101,7 @@ public class BatchRequestTest {
headers.put("content-type", "application/json");
BatchChangeSetPart request = BatchChangeSetPart.method(PUT)
.uri("Employees('2')")
- .body("{\"Возра�т\":40}")
+ .body("{\"Возраст\":40}")
.headers(headers)
.contentId("111")
.build();
@@ -121,8 +121,8 @@ public class BatchRequestTest {
assertTrue(requestBody.contains("--batch_"));
assertTrue(requestBody.contains("--changeset_"));
assertTrue(requestBody.contains("PUT Employees('2') HTTP/1.1"));
- assertTrue(requestBody.contains("{\"Возра�т\":40}"));
- assertEquals(16, batchRequestStream.linesCount());
+ assertTrue(requestBody.contains("{\"Возраст\":40}"));
+ assertEquals(15, batchRequestStream.linesCount());
String contentType = "multipart/mixed; boundary=" + BOUNDARY;
BatchParser parser = new BatchParser(contentType, parseProperties, true);
@@ -162,7 +162,7 @@ public class BatchRequestTest {
assertTrue(requestBody.contains("GET Employees HTTP/1.1"));
assertTrue(requestBody.contains("POST Employees HTTP/1.1"));
assertTrue(requestBody.contains(body));
- assertEquals(25, batchRequestStream.linesCount());
+ assertEquals(24, batchRequestStream.linesCount());
String contentType = "multipart/mixed; boundary=" + BOUNDARY;
BatchParser parser = new BatchParser(contentType, parseProperties, true);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2186daa3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
index e8f7cd4..395c2b8 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
@@ -19,7 +19,6 @@
package org.apache.olingo.odata2.core.batch;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
@@ -37,7 +36,6 @@ import org.apache.olingo.odata2.api.client.batch.BatchPart;
import org.apache.olingo.odata2.api.client.batch.BatchQueryPart;
import org.apache.olingo.odata2.core.batch.v2.BufferedReaderIncludingLineEndings;
import org.apache.olingo.odata2.core.batch.v2.BufferedReaderIncludingLineEndings.Line;
-import org.apache.olingo.odata2.testutil.helper.StringHelper;
import org.junit.Test;
public class BatchRequestWriterTest {
@@ -48,11 +46,6 @@ public class BatchRequestWriterTest {
private static final String BOUNDARY = "batch_123";
private static final Object CRLF = "\r\n";
- private void checkMimeHeaders(final String requestBody) {
- assertTrue(requestBody.contains("Content-Type: application/http"));
- assertTrue(requestBody.contains("Content-Transfer-Encoding: binary"));
- }
-
@Test
public void testBatchQueryPart() throws BatchException, IOException {
List<BatchPart> batch = new ArrayList<BatchPart>();
@@ -63,15 +56,22 @@ public class BatchRequestWriterTest {
BatchRequestWriter writer = new BatchRequestWriter();
InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
-
- String requestBody = StringHelper.toStream(batchRequest).asString();
- assertNotNull(batchRequest);
- checkMimeHeaders(requestBody);
-
- assertTrue(requestBody.contains("--batch_"));
- assertTrue(requestBody.contains("GET Employees HTTP/1.1"));
- checkHeaders(headers, requestBody);
- assertEquals(9, StringHelper.countLines(requestBody));
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(batchRequest));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("GET Employees HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Accept: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test
@@ -81,7 +81,7 @@ public class BatchRequestWriterTest {
headers.put("content-type", "application/json");
BatchChangeSetPart request = BatchChangeSetPart.method(PUT)
.uri("Employees('2')")
- .body("{\"Возраст\":40}")
+ .body("{\"Age\":40}")
.headers(headers)
.contentId("111")
.build();
@@ -92,15 +92,27 @@ public class BatchRequestWriterTest {
BatchRequestWriter writer = new BatchRequestWriter();
InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
- String requestBody = StringHelper.inputStreamToString(batchRequest, true);
- assertNotNull(batchRequest);
- checkMimeHeaders(requestBody);
- checkHeaders(headers, requestBody);
-
- assertTrue(requestBody.contains("--batch_"));
- assertTrue(requestBody.contains("--changeset_"));
- assertTrue(requestBody.contains("PUT Employees('2') HTTP/1.1"));
- assertTrue(requestBody.contains("{\"Возраст\":40}"));
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(batchRequest));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index++).toString().startsWith("Content-Type: multipart/mixed; boundary=changeset_"));
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Id: 111" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("PUT Employees('2') HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 10" + CRLF, lines.get(index++).toString());
+ assertEquals("content-type: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("{\"Age\":40}" + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test
@@ -126,15 +138,37 @@ public class BatchRequestWriterTest {
BatchRequestWriter writer = new BatchRequestWriter();
InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
- String requestBody = StringHelper.inputStreamToString(batchRequest, true);
- assertNotNull(batchRequest);
- checkMimeHeaders(requestBody);
-
- checkHeaders(headers, requestBody);
- checkHeaders(changeSetHeaders, requestBody);
- assertTrue(requestBody.contains("GET Employees HTTP/1.1"));
- assertTrue(requestBody.contains("POST Employees HTTP/1.1"));
- assertTrue(requestBody.contains(body));
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(batchRequest));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Id: 000" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("GET Employees HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Accept: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index++).toString().startsWith("Content-Type: multipart/mixed; boundary=changeset_"));
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Id: 111" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("POST Employees HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 68" + CRLF, lines.get(index++).toString());
+ assertEquals("content-type: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals(body + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test
@@ -150,12 +184,12 @@ public class BatchRequestWriterTest {
BatchRequestWriter writer = new BatchRequestWriter();
InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
-
+
BufferedReaderIncludingLineEndings reader =
new BufferedReaderIncludingLineEndings(new InputStreamReader(batchRequest));
List<Line> lines = reader.toList();
reader.close();
-
+
int line = 0;
assertEquals("--" + BOUNDARY + CRLF, lines.get(line++).toString());
assertEquals("Content-Type: application/http" + CRLF, lines.get(line++).toString());
@@ -164,9 +198,9 @@ public class BatchRequestWriterTest {
assertEquals(CRLF, lines.get(line++).toString());
assertEquals("GET Employees HTTP/1.1" + CRLF, lines.get(line++).toString());
assertEquals("Accept: application/json" + CRLF, lines.get(line++).toString());
- assertEquals(CRLF, lines.get(line++).toString()); // Belongs to the GET request [OData Protocol - 2.2.7.2.1]
-
- assertEquals(CRLF, lines.get(line++).toString()); // Belongs conceptually to the boundary [RFC 2046 - 5.1.1]
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs to the GET request [OData Protocol - 2.2.7.2.1]
+
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs conceptually to the boundary [RFC 2046 - 5.1.1]
assertEquals("--" + BOUNDARY + CRLF, lines.get(line++).toString());
assertEquals("Content-Type: application/http" + CRLF, lines.get(line++).toString());
assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(line++).toString());
@@ -174,9 +208,9 @@ public class BatchRequestWriterTest {
assertEquals(CRLF, lines.get(line++).toString());
assertEquals("GET Employees HTTP/1.1" + CRLF, lines.get(line++).toString());
assertEquals("Accept: application/json" + CRLF, lines.get(line++).toString());
- assertEquals(CRLF, lines.get(line++).toString()); // Belongs to the GET request [OData Protocol - 2.2.7.2.1]
-
- assertEquals(CRLF, lines.get(line++).toString()); // Belongs conceptually to the boundary [RFC 2046 - 5.1.1]
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs to the GET request [OData Protocol - 2.2.7.2.1]
+
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs conceptually to the boundary [RFC 2046 - 5.1.1]
assertEquals("--" + BOUNDARY + "--", lines.get(line++).toString());
assertEquals(19, lines.size());
}
@@ -200,7 +234,7 @@ public class BatchRequestWriterTest {
changeSetHeaders = new HashMap<String, String>();
changeSetHeaders.put("content-type", "application/json;odata=verbose");
BatchChangeSetPart changeRequest2 = BatchChangeSetPart.method(PUT)
- .uri("$/ManagerId")
+ .uri("$1/ManagerId")
.body("{\"ManagerId\":1}")
.headers(changeSetHeaders)
.contentId("2")
@@ -211,16 +245,39 @@ public class BatchRequestWriterTest {
BatchRequestWriter writer = new BatchRequestWriter();
InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
- String requestBody = StringHelper.inputStreamToString(batchRequest);
- assertNotNull(batchRequest);
- checkMimeHeaders(requestBody);
-
- assertTrue(requestBody.contains("POST Employees('2') HTTP/1.1"));
- assertTrue(requestBody.contains("PUT $/ManagerId HTTP/1.1"));
- assertTrue(requestBody.contains(BatchHelper.HTTP_CONTENT_ID + ": 1"));
- assertTrue(requestBody.contains(BatchHelper.HTTP_CONTENT_ID + ": 2"));
- assertTrue(requestBody.contains(body));
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(batchRequest));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index++).toString().startsWith("Content-Type: multipart/mixed; boundary=changeset_"));
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Id: 1" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("POST Employees('2') HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 68" + CRLF, lines.get(index++).toString());
+ assertEquals("content-type: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals(body + CRLF, lines.get(index++).toString());
+
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Id: 2" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("PUT $1/ManagerId HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 15" + CRLF, lines.get(index++).toString());
+ assertEquals("content-type: application/json;odata=verbose" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("{\"ManagerId\":1}" + CRLF, lines.get(index++).toString());
+
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test
@@ -254,22 +311,43 @@ public class BatchRequestWriterTest {
BatchRequestWriter writer = new BatchRequestWriter();
InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(batchRequest));
+ List<Line> lines = reader.toList();
+ reader.close();
- String requestBody = StringHelper.inputStreamToString(batchRequest);
- assertNotNull(batchRequest);
- checkMimeHeaders(requestBody);
-
- assertTrue(requestBody.contains("POST Employees HTTP/1.1"));
- assertTrue(requestBody.contains("PUT Employees('2')/ManagerId HTTP/1.1"));
-
- assertTrue(requestBody.contains(body));
-
- }
-
- private void checkHeaders(final Map<String, String> headers, final String requestBody) {
- for (Map.Entry<String, String> header : headers.entrySet()) {
- assertTrue(requestBody.contains(header.getKey() + ": " + header.getValue()));
- }
+ int index = 0;
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index++).toString().startsWith("Content-Type: multipart/mixed; boundary=changeset_"));
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("POST Employees HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 68" + CRLF, lines.get(index++).toString());
+ assertEquals("content-type: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals("content-Id: 111" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals(body + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index++).toString().startsWith("Content-Type: multipart/mixed; boundary=changeset_"));
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("PUT Employees('2')/ManagerId HTTP/1.1" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 15" + CRLF, lines.get(index++).toString());
+ assertEquals("content-type: application/json;odata=verbose" + CRLF, lines.get(index++).toString());
+ assertEquals("content-Id: 222" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("{\"ManagerId\":1}" + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test(expected = IllegalArgumentException.class)
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2186daa3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseParserTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseParserTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseParserTest.java
index e107db5..dacdb5a 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseParserTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseParserTest.java
@@ -170,7 +170,70 @@ public class BatchResponseParserTest {
assertEquals("1", response.getContentId());
}
}
+
+ @Test
+ public void testResponseChangeSetBodyWithoutCRLF() throws BatchException {
+ String putResponse = "--batch_123" + CRLF
+ + "Content-Type: " + HttpContentType.MULTIPART_MIXED + ";boundary=changeset_12ks93js84d" + CRLF
+ + CRLF
+ + "--changeset_12ks93js84d" + CRLF
+ + "Content-Type: application/http" + CRLF
+ + "Content-Transfer-Encoding: binary" + CRLF
+ + "Content-ID: 1" + CRLF
+ + CRLF
+ + "HTTP/1.1 200 Ok" + CRLF
+ + "DataServiceVersion: 2.0" + CRLF
+ + "Content-Length: 19" + CRLF
+ + CRLF
+ + "TestBodyWithoutCRLF" + CRLF
+ + "--changeset_12ks93js84d--" + CRLF
+ + CRLF
+ + "--batch_123--";
+
+ InputStream in = new ByteArrayInputStream(putResponse.getBytes());
+ BatchParser parser = new BatchParser("multipart/mixed;boundary=batch_123", true);
+ List<BatchSingleResponse> responses = parser.parseBatchResponse(in);
+ for (BatchSingleResponse response : responses) {
+ assertEquals("200", response.getStatusCode());
+ assertEquals("Ok", response.getStatusInfo());
+ assertEquals("19", response.getHeader(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("TestBodyWithoutCRLF", response.getBody());
+ assertEquals("1", response.getContentId());
+ }
+ }
+
+ @Test
+ public void testResponseChangeSetBodyWithCRLF() throws BatchException {
+ String putResponse = "--batch_123" + CRLF
+ + "Content-Type: " + HttpContentType.MULTIPART_MIXED + ";boundary=changeset_12ks93js84d" + CRLF
+ + CRLF
+ + "--changeset_12ks93js84d" + CRLF
+ + "Content-Type: application/http" + CRLF
+ + "Content-Transfer-Encoding: binary" + CRLF
+ + "Content-ID: 1" + CRLF
+ + CRLF
+ + "HTTP/1.1 200 Ok" + CRLF
+ + "DataServiceVersion: 2.0" + CRLF
+ + "Content-Length: 18" + CRLF
+ + CRLF
+ + "TestBodyWithCRLF" + CRLF
+ + CRLF
+ + "--changeset_12ks93js84d--" + CRLF
+ + CRLF
+ + "--batch_123--";
+ InputStream in = new ByteArrayInputStream(putResponse.getBytes());
+ BatchParser parser = new BatchParser("multipart/mixed;boundary=batch_123", true);
+ List<BatchSingleResponse> responses = parser.parseBatchResponse(in);
+ for (BatchSingleResponse response : responses) {
+ assertEquals("200", response.getStatusCode());
+ assertEquals("Ok", response.getStatusInfo());
+ assertEquals("18", response.getHeader(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("TestBodyWithCRLF" + CRLF, response.getBody());
+ assertEquals("1", response.getContentId());
+ }
+ }
+
@Test
public void testResponseToChangeSetNoContentButContentLength() throws BatchException {
String putResponse =
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2186daa3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
index cc58159..ecc5e93 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
@@ -19,11 +19,12 @@
package org.apache.olingo.odata2.core.batch;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
@@ -31,10 +32,14 @@ import org.apache.olingo.odata2.api.batch.BatchException;
import org.apache.olingo.odata2.api.batch.BatchResponsePart;
import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
import org.apache.olingo.odata2.api.processor.ODataResponse;
+import org.apache.olingo.odata2.core.batch.v2.BufferedReaderIncludingLineEndings;
+import org.apache.olingo.odata2.core.batch.v2.BufferedReaderIncludingLineEndings.Line;
import org.junit.Test;
public class BatchResponseWriterTest {
+ private static final String CRLF = "\r\n";
+
@Test
public void testBatchResponse() throws BatchException, IOException {
List<BatchResponsePart> parts = new ArrayList<BatchResponsePart>();
@@ -57,16 +62,35 @@ public class BatchResponseWriterTest {
assertEquals(202, batchResponse.getStatus().getStatusCode());
assertNotNull(batchResponse.getEntity());
String body = (String) batchResponse.getEntity();
-
- assertTrue(body.contains("--batch"));
- assertTrue(body.contains("--changeset"));
- assertTrue(body.contains("HTTP/1.1 200 OK"));
- assertTrue(body.contains("Content-Type: application/http"));
- assertTrue(body.contains("Content-Transfer-Encoding: binary"));
- assertTrue(body.contains("Walter Winter"));
- assertTrue(body.contains("multipart/mixed; boundary=changeset"));
- assertTrue(body.contains("HTTP/1.1 204 No Content"));
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(new ByteArrayInputStream(body.getBytes())));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("HTTP/1.1 200 OK" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Type: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 13" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("Walter Winter" + CRLF, lines.get(index++).toString());
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index++).toString().startsWith("Content-Type: multipart/mixed; boundary=changeset_"));
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("HTTP/1.1 204 No Content" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test
@@ -83,15 +107,23 @@ public class BatchResponseWriterTest {
assertEquals(202, batchResponse.getStatus().getStatusCode());
assertNotNull(batchResponse.getEntity());
String body = (String) batchResponse.getEntity();
-
- assertTrue(body.contains("--batch"));
- assertFalse(body.contains("--changeset"));
- assertTrue(body.contains("HTTP/1.1 200 OK" + "\r\n"));
- assertTrue(body.contains("Content-Type: application/http" + "\r\n"));
- assertTrue(body.contains("Content-Transfer-Encoding: binary" + "\r\n"));
- assertTrue(body.contains("Walter Winter"));
- assertFalse(body.contains("multipart/mixed; boundary=changeset"));
-
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(new ByteArrayInputStream(body.getBytes())));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("HTTP/1.1 200 OK" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Type: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 13" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("Walter Winter" + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test
@@ -108,15 +140,25 @@ public class BatchResponseWriterTest {
assertEquals(202, batchResponse.getStatus().getStatusCode());
assertNotNull(batchResponse.getEntity());
String body = (String) batchResponse.getEntity();
- assertTrue(body.contains("--batch"));
- assertTrue(body.contains("--changeset"));
- assertTrue(body.indexOf("--changeset") != body.lastIndexOf("--changeset"));
- assertFalse(body.contains("HTTP/1.1 200 OK" + "\r\n"));
- assertTrue(body.contains("Content-Type: application/http" + "\r\n"));
- assertTrue(body.contains("Content-Transfer-Encoding: binary" + "\r\n"));
- assertTrue(body.contains("HTTP/1.1 204 No Content" + "\r\n"));
- assertTrue(body.contains("Content-Type: multipart/mixed; boundary=changeset"));
-
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(new ByteArrayInputStream(body.getBytes())));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index++).toString().startsWith("Content-Type: multipart/mixed; boundary=changeset_"));
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("HTTP/1.1 204 No Content" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--changeset"));
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
@Test
@@ -137,17 +179,25 @@ public class BatchResponseWriterTest {
assertEquals(202, batchResponse.getStatus().getStatusCode());
assertNotNull(batchResponse.getEntity());
String body = (String) batchResponse.getEntity();
-
- String mimeHeader = "Content-Type: application/http" + "\r\n"
- + "Content-Transfer-Encoding: binary" + "\r\n"
- + "Content-Id: mimeHeaderContentId123" + "\r\n";
-
- String requestHeader = "Content-Id: requestHeaderContentId123" + "\r\n"
- + "Content-Type: application/json" + "\r\n"
- + "Content-Length: 13" + "\r\n";
-
- assertTrue(body.contains(mimeHeader));
- assertTrue(body.contains(requestHeader));
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(new ByteArrayInputStream(body.getBytes())));
+ List<Line> lines = reader.toList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Id: mimeHeaderContentId123" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("HTTP/1.1 200 OK" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Id: requestHeaderContentId123" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Type: application/json" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 13" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("Walter Winter" + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
}