You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2018/04/18 15:04:16 UTC

qpid-proton-j git commit: PROTON-1672 Fix CompositeReadableBuffer arrayOffset

Repository: qpid-proton-j
Updated Branches:
  refs/heads/master ea46607e7 -> 25bc3cfba


PROTON-1672 Fix CompositeReadableBuffer arrayOffset

The arrayOffset should return a fixed position based on the state of the
buffer (slices will normally have a non-zero value)

Project: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/commit/25bc3cfb
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/tree/25bc3cfb
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/diff/25bc3cfb

Branch: refs/heads/master
Commit: 25bc3cfbad79a750c24af39e3b3aa5740bc62cea
Parents: ea46607
Author: Timothy Bish <ta...@gmail.com>
Authored: Wed Apr 18 11:03:07 2018 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Wed Apr 18 11:03:07 2018 -0400

----------------------------------------------------------------------
 .../proton/codec/CompositeReadableBuffer.java   |  2 +-
 .../codec/CompositeReadableBufferTest.java      | 57 ++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/25bc3cfb/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
index 388d140..5ab0348 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
@@ -103,7 +103,7 @@ public class CompositeReadableBuffer implements ReadableBuffer {
     @Override
     public int arrayOffset() {
         if (hasArray()) {
-            return currentOffset;
+            return currentOffset - position;
         }
 
         throw new UnsupportedOperationException("Buffer not backed by a single array");

http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/25bc3cfb/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
index 298d01c..99a0ced 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
@@ -989,6 +989,63 @@ public class CompositeReadableBufferTest {
         }
     }
 
+    //----- Test arrayOffset method ------------------------------------------//
+
+    @Test
+    public void testArrayOffsetIsZeroRegardlessOfPositionOnNonSlicedBuffer() {
+        CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+
+        byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+
+        buffer.append(data);
+
+        assertTrue(buffer.hasArray());
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(1);
+
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(buffer.limit());
+
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(0);
+
+        assertEquals(0, buffer.arrayOffset());
+    }
+
+    @Test
+    public void testArrayOffsetIsFixedOnSliceRegardlessOfPosition() {
+        CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+
+        byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+
+        buffer.append(data);
+
+        assertTrue(buffer.hasArray());
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(1);
+        ReadableBuffer slice = buffer.slice();
+
+        assertEquals(1, slice.arrayOffset());
+
+        slice.position(slice.limit());
+
+        assertEquals(1, slice.arrayOffset());
+
+        slice.position(0);
+
+        assertEquals(1, slice.arrayOffset());
+
+        slice.position(1);
+
+        ReadableBuffer anotherSlice = slice.slice();
+
+        assertEquals(2, anotherSlice.arrayOffset());
+    }
+
     //----- Test appending data to the buffer --------------------------------//
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org