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"));
   }
 
 }