You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2017/03/21 12:37:48 UTC
qpid-proton-j git commit: PROTON-1441 : Incorrect sizes calculated
for arrays of lists/maps using the Data API
Repository: qpid-proton-j
Updated Branches:
refs/heads/master 8929454ce -> b49969c1f
PROTON-1441 : Incorrect sizes calculated for arrays of lists/maps using the Data API
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/b49969c1
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/tree/b49969c1
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/diff/b49969c1
Branch: refs/heads/master
Commit: b49969c1ff22ee76d37705c463091b3d935b1c43
Parents: 8929454
Author: rgodfrey <rg...@apache.org>
Authored: Tue Mar 21 13:28:03 2017 +0100
Committer: rgodfrey <rg...@apache.org>
Committed: Tue Mar 21 13:28:03 2017 +0100
----------------------------------------------------------------------
.../qpid/proton/codec/impl/ListElement.java | 5 +-
.../qpid/proton/codec/impl/MapElement.java | 6 +-
.../qpid/proton/codec/impl/DataImplTest.java | 126 +++++++++++++++++++
3 files changed, 134 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/b49969c1/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/ListElement.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/ListElement.java b/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/ListElement.java
index 6b2dde1..c9eddc8 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/ListElement.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/ListElement.java
@@ -83,7 +83,10 @@ class ListElement extends AbstractElement<List<Object>>
size += 2;
}
}
- size += 8;
+ else
+ {
+ size += 8;
+ }
}
else
http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/b49969c1/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/MapElement.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/MapElement.java b/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/MapElement.java
index 710e9f0..eec3c60 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/MapElement.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/codec/impl/MapElement.java
@@ -76,8 +76,10 @@ class MapElement extends AbstractElement<Map<Object,Object>>
size += 2;
}
}
- size += 8;
-
+ else
+ {
+ size += 8;
+ }
}
else
{
http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/b49969c1/proton-j/src/test/java/org/apache/qpid/proton/codec/impl/DataImplTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/impl/DataImplTest.java b/proton-j/src/test/java/org/apache/qpid/proton/codec/impl/DataImplTest.java
index 5799f17..b650aed 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/codec/impl/DataImplTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/impl/DataImplTest.java
@@ -86,6 +86,132 @@ public class DataImplTest
}
@Test
+ public void testEncodeArrayOfLists()
+ {
+ // encode an array of two empty lists
+ Data data = new DataImpl();
+ data.putArray(false, Data.DataType.LIST);
+ data.enter();
+ data.putList();
+ data.putList();
+ data.exit();
+
+ int expectedEncodedSize = 4; // 1b type + 1b size + 1b length + 1b element constructor
+
+
+ Binary encoded = data.encode();
+ assertEquals("unexpected encoding size", expectedEncodedSize, encoded.getLength());
+
+ ByteBuffer expectedEncoding = ByteBuffer.allocate(expectedEncodedSize);
+ expectedEncoding.put((byte)0xe0); // constructor
+ expectedEncoding.put((byte)2); // size
+ expectedEncoding.put((byte)2); // count
+ expectedEncoding.put((byte)0x45); // element constructor
+
+ assertEquals("unexpected encoding", new Binary(expectedEncoding.array()), encoded);
+
+ data = new DataImpl();
+ data.putArray(false, Data.DataType.LIST);
+ data.enter();
+ data.putList();
+ data.putList();
+ data.putList();
+ data.enter();
+ data.putNull();
+ data.exit();
+ data.exit();
+
+ expectedEncodedSize = 11; // 1b type + 1b size + 1b length + 1b element constructor + 3 * (1b size + 1b count) + 1b null elt
+
+ encoded = data.encode();
+ assertEquals("unexpected encoding size", expectedEncodedSize, encoded.getLength());
+
+ expectedEncoding = ByteBuffer.allocate(expectedEncodedSize);
+ expectedEncoding.put((byte)0xe0); // constructor
+ expectedEncoding.put((byte)9); // size
+ expectedEncoding.put((byte)3); // count
+ expectedEncoding.put((byte)0xc0); // element constructor
+ expectedEncoding.put((byte)1); // size
+ expectedEncoding.put((byte)0); // count
+ expectedEncoding.put((byte)1); // size
+ expectedEncoding.put((byte)0); // count
+ expectedEncoding.put((byte)2); // size
+ expectedEncoding.put((byte)1); // count
+ expectedEncoding.put((byte)0x40); // null value
+
+ assertEquals("unexpected encoding", new Binary(expectedEncoding.array()), encoded);
+
+ data = new DataImpl();
+ data.putArray(false, Data.DataType.LIST);
+ data.enter();
+ data.putList();
+ data.putList();
+ data.putList();
+ data.enter();
+ for(int i = 0; i < 256; i++)
+ {
+ data.putNull();
+ }
+ data.exit();
+ data.exit();
+
+ expectedEncodedSize = 290; // 1b type + 4b size + 4b length + 1b element constructor + 3 * (4b size + 4b count) + (256 * 1b) null elt
+ encoded = data.encode();
+ assertEquals("unexpected encoding size", expectedEncodedSize, encoded.getLength());
+
+ expectedEncoding = ByteBuffer.allocate(expectedEncodedSize);
+ expectedEncoding.put((byte)0xf0); // constructor
+ expectedEncoding.putInt(285); // size
+ expectedEncoding.putInt(3); // count
+ expectedEncoding.put((byte)0xd0); // element constructor
+ expectedEncoding.putInt(4); // size
+ expectedEncoding.putInt(0); // count
+ expectedEncoding.putInt(4); // size
+ expectedEncoding.putInt(0); // count
+ expectedEncoding.putInt(260); // size
+ expectedEncoding.putInt(256); // count
+ for(int i = 0; i < 256; i++)
+ {
+ expectedEncoding.put((byte)0x40); // null value
+ }
+
+ assertEquals("unexpected encoding", new Binary(expectedEncoding.array()), encoded);
+
+ }
+
+ @Test
+ public void testEncodeArrayOfMaps()
+ {
+ // encode an array of two empty maps
+ Data data = new DataImpl();
+ data.putArray(false, Data.DataType.MAP);
+ data.enter();
+ data.putMap();
+ data.putMap();
+ data.exit();
+
+ int expectedEncodedSize = 8; // 1b type + 1b size + 1b length + 1b element constructor + 2 * (1b size + 1b count)
+
+
+ Binary encoded = data.encode();
+ assertEquals("unexpected encoding size", expectedEncodedSize, encoded.getLength());
+
+ ByteBuffer expectedEncoding = ByteBuffer.allocate(expectedEncodedSize);
+ expectedEncoding.put((byte) 0xe0); // constructor
+ expectedEncoding.put((byte) 6); // size
+ expectedEncoding.put((byte) 2); // count
+ expectedEncoding.put((byte) 0xc1); // element constructor
+ expectedEncoding.put((byte)1); // size
+ expectedEncoding.put((byte)0); // count
+ expectedEncoding.put((byte)1); // size
+ expectedEncoding.put((byte)0); // count
+
+
+ assertEquals("unexpected encoding", new Binary(expectedEncoding.array()), encoded);
+
+ }
+
+ @Test
public void testEncodeString32()
{
byte[] strPayload = createStringPayloadBytes(256);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org