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