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/31 20:19:25 UTC

olingo-odata2 git commit: [OLINGO-769] Added tests and fixed issue

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 14d97bf86 -> 9b8badafb


[OLINGO-769] Added tests and fixed issue


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/9b8badaf
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/9b8badaf
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/9b8badaf

Branch: refs/heads/master
Commit: 9b8badafb9ba0c6b2d8290c4589d1a915045eca7
Parents: 14d97bf
Author: mibo <mi...@mirb.de>
Authored: Mon Aug 31 20:05:13 2015 +0200
Committer: mibo <mi...@mirb.de>
Committed: Mon Aug 31 20:09:23 2015 +0200

----------------------------------------------------------------------
 .../odata2/core/ep/util/CircleStreamBuffer.java |  36 ++++---
 .../core/ep/util/CircleStreamBufferTest.java    | 103 ++++++++++++++++++-
 2 files changed, 121 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9b8badaf/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBuffer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBuffer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBuffer.java
index 9a14f66..1160530 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBuffer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBuffer.java
@@ -58,12 +58,12 @@ public class CircleStreamBuffer {
   }
 
   /**
-   * Create a {@link CircleStreamBuffer} with given buffer size in bytes.
-   * 
-   * @param bufferSize
+   * Create a {@link CircleStreamBuffer} with given initial buffer size.
+   *
+   * @param initialCapacity initial capacity of internal buffer
    */
-  public CircleStreamBuffer(final int bufferSize) {
-    currentAllocateCapacity = bufferSize;
+  public CircleStreamBuffer(final int initialCapacity) {
+    currentAllocateCapacity = initialCapacity;
     createNewWriteBuffer();
     inStream = new InternalInputStream(this);
     outStream = new InternalOutputStream(this);
@@ -244,21 +244,27 @@ public class CircleStreamBuffer {
   }
 
   /**
-   * 
-   * @param requestedCapacity
+   * Allocate a new buffer with requested capacity
+   *
+   * @param requestedCapacity minimal capacity of new buffer
    * @return the buffer
    */
   private ByteBuffer allocateBuffer(final int requestedCapacity) {
-    int allocateCapacity = requestedCapacity;
-    if (allocateCapacity < currentAllocateCapacity) {
-      allocateCapacity = currentAllocateCapacity * NEW_BUFFER_RESIZE_FACTOR;
+    if (requestedCapacity > MAX_CAPACITY) {
+      currentAllocateCapacity = MAX_CAPACITY;
+      return ByteBuffer.allocate(requestedCapacity);
     }
-    if (allocateCapacity > MAX_CAPACITY) {
-      allocateCapacity = MAX_CAPACITY;
+
+    if (requestedCapacity <= currentAllocateCapacity) {
+      currentAllocateCapacity *= NEW_BUFFER_RESIZE_FACTOR;
+      if (currentAllocateCapacity > MAX_CAPACITY) {
+        currentAllocateCapacity = MAX_CAPACITY;
+      }
+    } else {
+      currentAllocateCapacity = requestedCapacity;
     }
-    // update current
-    currentAllocateCapacity = allocateCapacity;
-    return ByteBuffer.allocate(allocateCapacity);
+
+    return ByteBuffer.allocate(currentAllocateCapacity);
   }
 
   // #############################################

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9b8badaf/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBufferTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBufferTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBufferTest.java
index 783e675..4bb4304 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBufferTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/util/CircleStreamBufferTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.charset.Charset;
 
 import org.apache.olingo.odata2.testutil.fit.BaseTest;
 import org.junit.Before;
@@ -34,6 +35,7 @@ import org.junit.Test;
 public class CircleStreamBufferTest extends BaseTest {
 
   private static final boolean LOG_ON = false;
+  private static final Charset DEFAULT_CHARSET = Charset.forName("utf-8");
 
   public CircleStreamBufferTest() {}
 
@@ -111,14 +113,14 @@ public class CircleStreamBufferTest extends BaseTest {
     OutputStream outStream = csb.getOutputStream();
     InputStream inStream = csb.getInputStream();
 
-    // first writeInternal/read cyclus
+    // first writeInternal/read cycle
     outStream.write("Test_1".getBytes());
     String firstResult = readFrom(inStream);
 
     log("Test result = [" + firstResult + "]");
     assertEquals("Test_1", firstResult);
 
-    // second writeInternal/read cyclus
+    // second writeInternal/read cycle
     outStream.write("Test_2".getBytes());
     String secondResult = readFrom(inStream);
 
@@ -179,6 +181,93 @@ public class CircleStreamBufferTest extends BaseTest {
     assertEquals(testData, result);
   }
 
+  @Test
+  public void testSimpleWriteMoreThenDefaultBufferSize() throws Exception {
+    CircleStreamBuffer csb = new CircleStreamBuffer();
+
+    OutputStream outStream = csb.getOutputStream();
+    InputStream inStream = csb.getInputStream();
+    final int signs = 70110;
+
+    String testData = createTestString(signs);
+    outStream.write(testData.getBytes(DEFAULT_CHARSET));
+    String result = readFrom(inStream);
+
+    assertEquals(signs, result.length());
+    assertEquals(testData, result);
+  }
+
+  @Test
+  public void testSimpleWriteMoreThenBufferSize() throws Exception {
+    int bufferSize = 4096;
+    CircleStreamBuffer csb = new CircleStreamBuffer(bufferSize);
+
+    OutputStream outStream = csb.getOutputStream();
+    InputStream inStream = csb.getInputStream();
+    final int signs = bufferSize * 10;
+
+    String testData = createTestString(signs);
+    outStream.write(testData.getBytes(DEFAULT_CHARSET));
+    String result = readFrom(inStream, bufferSize * 2);
+
+    assertEquals(signs, result.length());
+    assertEquals(testData, result);
+  }
+
+  @Test
+  public void testSimpleWriteMoreThenBufferSizeAndUmlauts() throws Exception {
+    int bufferSize = 4096;
+    CircleStreamBuffer csb = new CircleStreamBuffer(bufferSize);
+
+    OutputStream outStream = csb.getOutputStream();
+    InputStream inStream = csb.getInputStream();
+    final int signs = bufferSize * 10;
+
+    String testData = createTestString(signs);
+    testData = "äüöÄÜÖ" + testData + "äüöÄÜÖ";
+    outStream.write(testData.getBytes(DEFAULT_CHARSET));
+    String result = readFrom(inStream);
+
+    assertEquals(testData.length(), result.length());
+    assertEquals(testData, result);
+  }
+
+  @Test
+  public void testSimpleWriteMoreThenBufferSizeAndUmlautsIso() throws Exception {
+    int bufferSize = 4096;
+    CircleStreamBuffer csb = new CircleStreamBuffer(bufferSize);
+
+    OutputStream outStream = csb.getOutputStream();
+    InputStream inStream = csb.getInputStream();
+    final int signs = bufferSize * 10;
+
+    String testData = createTestString(signs);
+    testData = "äüöÄÜÖ" + testData + "äüöÄÜÖ";
+    outStream.write(testData.getBytes("iso-8859-1"));
+    String result = readFrom(inStream, "iso-8859-1");
+
+    assertEquals(testData.length(), result.length());
+    assertEquals(testData, result);
+  }
+
+  @Test
+  public void testSimpleWriteALotMoreThenBufferSize() throws Exception {
+    int bufferSize = 4096;
+    CircleStreamBuffer csb = new CircleStreamBuffer(bufferSize);
+
+    OutputStream outStream = csb.getOutputStream();
+    InputStream inStream = csb.getInputStream();
+    final int signs = bufferSize * 100;
+
+    String testData = createTestString(signs);
+    outStream.write(testData.getBytes(DEFAULT_CHARSET));
+    String result = readFrom(inStream, bufferSize * 2);
+
+    assertEquals(signs, result.length());
+    assertEquals(testData, result);
+  }
+
+
   @Test(expected = IOException.class)
   public void testCloseInputStream() throws Exception {
     CircleStreamBuffer csb = new CircleStreamBuffer();
@@ -213,11 +302,19 @@ public class CircleStreamBufferTest extends BaseTest {
   }
 
   private String readFrom(final InputStream stream, final int bufferSize) throws IOException {
+    return readFrom(stream, DEFAULT_CHARSET, bufferSize);
+  }
+
+  private String readFrom(final InputStream stream, final String charset) throws IOException {
+    return readFrom(stream, Charset.forName(charset), 128);
+  }
+
+  private String readFrom(final InputStream stream, final Charset charset, final int bufferSize) throws IOException {
     StringBuilder b = new StringBuilder();
     int count;
     byte[] buffer = new byte[bufferSize];
     while ((count = stream.read(buffer)) >= 0) {
-      b.append(new String(buffer, 0, count));
+      b.append(new String(buffer, 0, count, charset));
     }
     return b.toString();
   }