PROTON-1891: ensure the empty slice rejects appends like non-empty slices do
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 f5f2e2a..3780668 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
@@ -36,7 +36,7 @@
private static final List<byte[]> EMPTY_LIST = Collections.unmodifiableList(new ArrayList<byte[]>());
private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap(new byte[0]);
- private static final CompositeReadableBuffer EMPTY_SLICE = new CompositeReadableBuffer(true);
+ private static final CompositeReadableBuffer EMPTY_SLICE = new CompositeReadableBuffer(false);
private static int UNSET_MARK = -1;
private static final int SHORT_BYTES = 2;
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 136f655..4daef3e 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
@@ -1940,7 +1940,42 @@
}
@Test
- public void testSliceIgnoresAppends() {
+ public void testSliceWithNoRemainderRefusesAppends() {
+ CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+ buffer.append(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
+
+ // Empty slice at end of buffer
+ assertEquals(10, buffer.remaining());
+ buffer.position(10);
+ assertEquals(0, buffer.remaining());
+
+ CompositeReadableBuffer emptySlice = buffer.slice();
+ assertNotSame(buffer, emptySlice);
+ assertEquals(0, emptySlice.remaining());
+
+ try {
+ emptySlice.append(new byte[] { 10 });
+ fail("Should not be allowed to append to empty slice, must throw IllegalStateException");
+ } catch (IllegalStateException ise) {}
+
+ // Empty slice at start of buffer
+ buffer.position(0);
+ assertEquals(10, buffer.remaining());
+ buffer.limit(0);
+ assertEquals(0, buffer.remaining());
+
+ emptySlice = buffer.slice();
+ assertNotSame(buffer, emptySlice);
+ assertEquals(0, emptySlice.remaining());
+
+ try {
+ emptySlice.append(new byte[] { 10 });
+ fail("Should not be allowed to append to empty slice, must throw IllegalStateException");
+ } catch (IllegalStateException ise) {}
+ }
+
+ @Test
+ public void testSliceRefusesAppends() {
CompositeReadableBuffer buffer = new CompositeReadableBuffer();
buffer.append(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
@@ -1950,7 +1985,7 @@
try {
slice.append(new byte[] { 10 });
- fail("Should not be allowed to append to a slice, must throw ReadOnlyBufferException");
+ fail("Should not be allowed to append to a slice, must throw IllegalStateException");
} catch (IllegalStateException ise) {}
}