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/08/06 22:01:25 UTC

olingo-odata4 git commit: [OLINGO-729] Minor fix in BatchSerializer

Repository: olingo-odata4
Updated Branches:
  refs/heads/master f187ad351 -> 15a06522e


[OLINGO-729] Minor fix in BatchSerializer


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/15a06522
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/15a06522
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/15a06522

Branch: refs/heads/master
Commit: 15a06522e9cdbe52972df1078c64ee4928767181
Parents: f187ad3
Author: mibo <mi...@apache.org>
Authored: Thu Aug 6 22:00:39 2015 +0200
Committer: mibo <mi...@apache.org>
Committed: Thu Aug 6 22:00:58 2015 +0200

----------------------------------------------------------------------
 .../serializer/BatchResponseSerializer.java     |  3 +-
 .../serializer/BatchResponseSerializerTest.java | 52 ++++++++++++++++++++
 2 files changed, 54 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/15a06522/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/BatchResponseSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/BatchResponseSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/BatchResponseSerializer.java
index 46c9672..d54f028 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/BatchResponseSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/BatchResponseSerializer.java
@@ -201,7 +201,8 @@ public class BatchResponseSerializer {
       }
       if(buffer.remaining() < b.length) {
         buffer.flip();
-        ByteBuffer tmp = ByteBuffer.allocate(buffer.limit() *2);
+        int newSize = (buffer.limit() * 2) + b.length;
+        ByteBuffer tmp = ByteBuffer.allocate(newSize);
         tmp.put(buffer);
         buffer = tmp;
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/15a06522/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java
index f73479b..b57340d 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java
@@ -27,6 +27,7 @@ import java.io.InputStream;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Random;
 import java.util.UUID;
 
 import org.apache.commons.io.IOUtils;
@@ -401,6 +402,42 @@ public class BatchResponseSerializerTest {
   }
 
   @Test
+  public void testBigResponse() throws Exception {
+    List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>();
+    ODataResponse response = new ODataResponse();
+    response.setStatusCode(HttpStatusCode.OK.getStatusCode());
+    response.setHeader(HttpHeader.CONTENT_TYPE, "application/json");
+    String bigData = generateData(10000);
+    response.setContent(IOUtils.toInputStream(bigData));
+
+    List<ODataResponse> responses = new ArrayList<ODataResponse>(1);
+    responses.add(response);
+    parts.add(new ODataResponsePart(responses, false));
+
+    final BatchResponseSerializer serializer = new BatchResponseSerializer();
+    final InputStream content = serializer.serialize(parts, BOUNDARY);
+
+    assertNotNull(content);
+    final BatchLineReader reader =
+            new BatchLineReader(content);
+    final List<String> body = reader.toList();
+    reader.close();
+
+    int line = 0;
+    assertEquals(10, body.size());
+    assertTrue(body.get(line++).contains("--batch_"));
+    assertEquals("Content-Type: application/http" + CRLF, body.get(line++));
+    assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++));
+    assertEquals(CRLF, body.get(line++));
+    assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++));
+    assertEquals("Content-Type: application/json" + CRLF, body.get(line++));
+    assertEquals("Content-Length: 10000" + CRLF, body.get(line++));
+    assertEquals(CRLF, body.get(line++));
+    assertEquals(bigData + CRLF, body.get(line++));
+    assertTrue(body.get(line++).contains("--batch_"));
+  }
+
+  @Test
   public void testChangeSetResponse() throws Exception {
     List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>();
     ODataResponse response = new ODataResponse();
@@ -438,4 +475,19 @@ public class BatchResponseSerializerTest {
     assertTrue(body.get(line++).contains("--changeset_"));
     assertTrue(body.get(line++).contains("--batch_"));
   }
+
+  /**
+   * Generates a string with given length containing random upper case characters ([A-Z]).
+   * @param len length of the generated string
+   * @return random upper case characters ([A-Z])
+   */
+  public static String generateData(final int len) {
+    Random random = new Random();
+    StringBuilder b = new StringBuilder(len);
+    for (int j = 0; j < len; j++) {
+      final char c = (char) ('A' + random.nextInt('Z' - 'A' + 1));
+      b.append(c);
+    }
+    return b.toString();
+  }
 }