qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tab...@apache.org
Subject [1/4] qpid-proton-j git commit: PROTON-1708 Optimizations for the EncoderImpl and DecoderImpl
Date Fri, 01 Dec 2017 21:11:54 GMT
Repository: qpid-proton-j
Updated Branches:
  refs/heads/master cb3b9f4d5 -> 2a2d3ff27


http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2a2d3ff2/proton-j/src/test/java/org/apache/qpid/proton/codec/PropertiesCodecTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/PropertiesCodecTest.java
b/proton-j/src/test/java/org/apache/qpid/proton/codec/PropertiesCodecTest.java
new file mode 100644
index 0000000..e6ef140
--- /dev/null
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/PropertiesCodecTest.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qpid.proton.codec;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Date;
+
+import org.apache.qpid.proton.amqp.Binary;
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.amqp.UnsignedInteger;
+import org.apache.qpid.proton.amqp.messaging.Properties;
+import org.junit.Test;
+
+/**
+ * Test for decoder of AMQP Properties type.
+ */
+public class PropertiesCodecTest extends CodecTestSupport {
+
+    private final int LARGE_SIZE = 1024;
+    private final int SMALL_SIZE = 32;
+
+    @Test
+    public void testDecodeSmallSeriesOfPropertiess() throws IOException {
+        doTestDecodePropertiesSeries(SMALL_SIZE);
+    }
+
+    @Test
+    public void testDecodeLargeSeriesOfPropertiess() throws IOException {
+        doTestDecodePropertiesSeries(LARGE_SIZE);
+    }
+
+    private void doTestDecodePropertiesSeries(int size) throws IOException {
+        Properties properties = new Properties();
+
+        Date timeNow = new Date(System.currentTimeMillis());
+
+        properties.setMessageId("ID:Message-1:1:1:0");
+        properties.setUserId(new Binary(new byte[1]));
+        properties.setTo("queue:work");
+        properties.setSubject("help");
+        properties.setReplyTo("queue:temp:me");
+        properties.setContentEncoding(Symbol.valueOf("text/UTF-8"));
+        properties.setContentType(Symbol.valueOf("text"));
+        properties.setCorrelationId("correlation-id");
+        properties.setAbsoluteExpiryTime(timeNow);
+        properties.setCreationTime(timeNow);
+        properties.setGroupId("group-1");
+        properties.setGroupSequence(UnsignedInteger.valueOf(1));
+        properties.setReplyToGroupId("group-1");
+
+        for (int i = 0; i < size; ++i) {
+            encoder.writeObject(properties);
+        }
+
+        buffer.clear();
+
+        for (int i = 0; i < size; ++i) {
+            final Object result = decoder.readObject();
+
+            assertNotNull(result);
+            assertTrue(result instanceof Properties);
+
+            Properties decoded = (Properties) result;
+
+            assertNotNull(decoded.getAbsoluteExpiryTime());
+            assertEquals(timeNow, decoded.getAbsoluteExpiryTime());
+            assertEquals(Symbol.valueOf("text/UTF-8"), decoded.getContentEncoding());
+            assertEquals(Symbol.valueOf("text"), decoded.getContentType());
+            assertEquals("correlation-id", decoded.getCorrelationId());
+            assertEquals(timeNow, decoded.getCreationTime());
+            assertEquals("group-1", decoded.getGroupId());
+            assertEquals(UnsignedInteger.valueOf(1), decoded.getGroupSequence());
+            assertEquals("ID:Message-1:1:1:0", decoded.getMessageId());
+            assertEquals("queue:temp:me", decoded.getReplyTo());
+            assertEquals("group-1", decoded.getReplyToGroupId());
+            assertEquals("help", decoded.getSubject());
+            assertEquals("queue:work", decoded.getTo());
+            assertTrue(decoded.getUserId() instanceof Binary);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2a2d3ff2/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java b/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
index 90cfe26..6c376d5 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
@@ -125,6 +125,30 @@ public class StringTypeTest
         }
     }
 
+    @Test
+    public void testSkipString()
+    {
+        final DecoderImpl decoder = new DecoderImpl();
+        final EncoderImpl encoder = new EncoderImpl(decoder);
+        AMQPDefinedTypes.registerAllTypes(decoder, encoder);
+        final ByteBuffer buffer = ByteBuffer.allocate(64);
+
+        decoder.setByteBuffer(buffer);
+        encoder.setByteBuffer(buffer);
+
+        encoder.writeString("skipped");
+        encoder.writeString("read");
+
+        buffer.clear();
+
+        TypeConstructor<?> stringType = decoder.readConstructor();
+        assertEquals(String.class, stringType.getTypeClass());
+        stringType.skipValue();
+
+        String result = decoder.readString();
+        assertEquals("read", result);
+    }
+
     // build up some test data with a set of suitable Unicode characters
     private static List<String> generateTestData()
     {

http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2a2d3ff2/proton-j/src/test/java/org/apache/qpid/proton/codec/TransferTypeTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/TransferTypeTest.java b/proton-j/src/test/java/org/apache/qpid/proton/codec/TransferTypeTest.java
new file mode 100644
index 0000000..8e2d088
--- /dev/null
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/TransferTypeTest.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qpid.proton.codec;
+
+import static org.junit.Assert.*;
+
+import org.apache.qpid.proton.amqp.Binary;
+import org.apache.qpid.proton.amqp.UnsignedInteger;
+import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode;
+import org.apache.qpid.proton.amqp.transport.Transfer;
+import org.junit.Test;
+
+/**
+ * Tests for encode / decode of Transfer types
+ */
+public class TransferTypeTest extends CodecTestSupport {
+
+    @Test
+    public void testEncodeDecodeTransfers() {
+        Transfer transfer = new Transfer();
+        transfer.setHandle(UnsignedInteger.ONE);
+        transfer.setDeliveryTag(new Binary(new byte[] {0, 1}));
+        transfer.setMessageFormat(UnsignedInteger.ZERO);
+        transfer.setDeliveryId(UnsignedInteger.valueOf(127));
+        transfer.setAborted(false);
+        transfer.setBatchable(true);
+        transfer.setRcvSettleMode(ReceiverSettleMode.SECOND);
+
+        encoder.writeObject(transfer);
+        buffer.clear();
+        final Transfer outputValue = (Transfer) decoder.readObject();
+
+        assertEquals(transfer.getHandle(), outputValue.getHandle());
+        assertEquals(transfer.getMessageFormat(), outputValue.getMessageFormat());
+        assertEquals(transfer.getDeliveryTag(), outputValue.getDeliveryTag());
+        assertEquals(transfer.getDeliveryId(), outputValue.getDeliveryId());
+        assertEquals(transfer.getAborted(), outputValue.getAborted());
+        assertEquals(transfer.getBatchable(), outputValue.getBatchable());
+        assertEquals(transfer.getRcvSettleMode(), outputValue.getRcvSettleMode());
+    }
+
+    @Test
+    public void testSkipValue() {
+        Transfer transfer = new Transfer();
+        transfer.setHandle(UnsignedInteger.ONE);
+        transfer.setDeliveryTag(new Binary(new byte[] {0, 1}));
+        transfer.setMessageFormat(UnsignedInteger.ZERO);
+        transfer.setDeliveryId(UnsignedInteger.valueOf(127));
+        transfer.setAborted(false);
+        transfer.setBatchable(true);
+        transfer.setRcvSettleMode(ReceiverSettleMode.SECOND);
+
+        encoder.writeObject(transfer);
+
+        transfer.setHandle(UnsignedInteger.valueOf(2));
+
+        encoder.writeObject(transfer);
+
+        buffer.clear();
+
+        TypeConstructor<?> type = decoder.readConstructor();
+        assertEquals(Transfer.class, type.getTypeClass());
+        type.skipValue();
+
+        Transfer result = (Transfer) decoder.readObject();
+        assertEquals(UnsignedInteger.valueOf(2), result.getHandle());
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2a2d3ff2/proton-j/src/test/java/org/apache/qpid/proton/codec/UnknownDescribedTypeCodecTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/UnknownDescribedTypeCodecTest.java
b/proton-j/src/test/java/org/apache/qpid/proton/codec/UnknownDescribedTypeCodecTest.java
new file mode 100644
index 0000000..2aaaac6
--- /dev/null
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/UnknownDescribedTypeCodecTest.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qpid.proton.codec;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.qpid.proton.amqp.DescribedType;
+import org.junit.Test;
+
+/**
+ * Tests the handling of UnknownDescribedType instances.
+ */
+public class UnknownDescribedTypeCodecTest extends CodecTestSupport {
+
+    private final int LARGE_SIZE = 1024;
+    private final int SMALL_SIZE = 32;
+
+    @Test
+    public void testDecodeUnknownDescribedType() throws Exception {
+        encoder.writeObject(NoLocalType.NO_LOCAL);
+
+        buffer.clear();
+
+        Object result = decoder.readObject();
+        assertTrue(result instanceof DescribedType);
+        DescribedType resultTye = (DescribedType) result;
+        assertEquals(NoLocalType.NO_LOCAL.getDescriptor(), resultTye.getDescriptor());
+    }
+
+    @Test
+    public void testDecodeSmallSeriesOfUnknownDescribedTypes() throws IOException {
+        doTestDecodeUnknownDescribedTypeSeries(SMALL_SIZE);
+    }
+
+    @Test
+    public void testDecodeLargeSeriesOfUnknownDescribedTypes() throws IOException {
+        doTestDecodeUnknownDescribedTypeSeries(LARGE_SIZE);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testUnknownDescribedTypeInList() throws IOException {
+        List<Object> listOfUnkowns = new ArrayList<>();
+
+        listOfUnkowns.add(NoLocalType.NO_LOCAL);
+
+        encoder.writeList(listOfUnkowns);
+
+        buffer.clear();
+
+        final Object result = decoder.readObject();
+
+        assertNotNull(result);
+        assertTrue(result instanceof List);
+
+        final List<Object> decodedList = (List<Object>) result;
+        assertEquals(1, decodedList.size());
+
+        final Object listEntry = decodedList.get(0);
+        assertTrue(listEntry instanceof DescribedType);
+
+        DescribedType resultTye = (DescribedType) listEntry;
+        assertEquals(NoLocalType.NO_LOCAL.getDescriptor(), resultTye.getDescriptor());
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testUnknownDescribedTypeInMap() throws IOException {
+        Map<Object, Object> mapOfUnknowns = new HashMap<>();
+
+        mapOfUnknowns.put(NoLocalType.NO_LOCAL.getDescriptor(), NoLocalType.NO_LOCAL);
+
+        encoder.writeMap(mapOfUnknowns);
+
+        buffer.clear();
+
+        final Object result = decoder.readObject();
+
+        assertNotNull(result);
+        assertTrue(result instanceof Map);
+
+        final Map<Object, Object> decodedMap = (Map<Object, Object>) result;
+        assertEquals(1, decodedMap.size());
+
+        final Object mapEntry = decodedMap.get(NoLocalType.NO_LOCAL.getDescriptor());
+        assertTrue(mapEntry instanceof DescribedType);
+
+        DescribedType resultTye = (DescribedType) mapEntry;
+        assertEquals(NoLocalType.NO_LOCAL.getDescriptor(), resultTye.getDescriptor());
+    }
+
+    private void doTestDecodeUnknownDescribedTypeSeries(int size) throws IOException {
+        for (int i = 0; i < size; ++i) {
+            encoder.writeObject(NoLocalType.NO_LOCAL);
+        }
+
+        buffer.clear();
+
+        for (int i = 0; i < size; ++i) {
+            final Object result = decoder.readObject();
+
+            assertNotNull(result);
+            assertTrue(result instanceof DescribedType);
+
+            DescribedType resultTye = (DescribedType) result;
+            assertEquals(NoLocalType.NO_LOCAL.getDescriptor(), resultTye.getDescriptor());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2a2d3ff2/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedIntegerTypeTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedIntegerTypeTest.java
b/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedIntegerTypeTest.java
index 45523e2..42b80cc 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedIntegerTypeTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedIntegerTypeTest.java
@@ -22,6 +22,8 @@ package org.apache.qpid.proton.codec;
 
 import static org.junit.Assert.*;
 
+import java.nio.ByteBuffer;
+
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.apache.qpid.proton.codec.UnsignedIntegerType.UnsignedIntegerEncoding;
 import org.junit.Test;
@@ -63,4 +65,28 @@ public class UnsignedIntegerTypeTest
         UnsignedIntegerEncoding encoding = ult.getEncoding(UnsignedInteger.valueOf(val));
         assertEquals("incorrect encoding returned", EncodingCodes.UINT, encoding.getEncodingCode());
     }
+
+    @Test
+    public void testSkipValue()
+    {
+        final DecoderImpl decoder = new DecoderImpl();
+        final EncoderImpl encoder = new EncoderImpl(decoder);
+        AMQPDefinedTypes.registerAllTypes(decoder, encoder);
+        final ByteBuffer buffer = ByteBuffer.allocate(64);
+
+        decoder.setByteBuffer(buffer);
+        encoder.setByteBuffer(buffer);
+
+        encoder.writeUnsignedInteger(UnsignedInteger.ZERO);
+        encoder.writeUnsignedInteger(UnsignedInteger.ONE);
+
+        buffer.clear();
+
+        TypeConstructor<?> type = decoder.readConstructor();
+        assertEquals(UnsignedInteger.class, type.getTypeClass());
+        type.skipValue();
+
+        UnsignedInteger result = decoder.readUnsignedInteger();
+        assertEquals(UnsignedInteger.ONE, result);
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2a2d3ff2/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedLongTypeTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedLongTypeTest.java
b/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedLongTypeTest.java
index bcc6ff8..7b4cea3 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedLongTypeTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/UnsignedLongTypeTest.java
@@ -23,6 +23,7 @@ package org.apache.qpid.proton.codec;
 import static org.junit.Assert.*;
 
 import java.math.BigInteger;
+import java.nio.ByteBuffer;
 
 import org.apache.qpid.proton.amqp.UnsignedLong;
 import org.apache.qpid.proton.codec.UnsignedLongType.UnsignedLongEncoding;
@@ -65,4 +66,28 @@ public class UnsignedLongTypeTest
         UnsignedLongEncoding encoding = ult.getEncoding(UnsignedLong.valueOf(bigInt));
         assertEquals("incorrect encoding returned", EncodingCodes.ULONG, encoding.getEncodingCode());
     }
+
+    @Test
+    public void testSkipValue()
+    {
+        final DecoderImpl decoder = new DecoderImpl();
+        final EncoderImpl encoder = new EncoderImpl(decoder);
+        AMQPDefinedTypes.registerAllTypes(decoder, encoder);
+        final ByteBuffer buffer = ByteBuffer.allocate(64);
+
+        decoder.setByteBuffer(buffer);
+        encoder.setByteBuffer(buffer);
+
+        encoder.writeUnsignedLong(UnsignedLong.ZERO);
+        encoder.writeUnsignedLong(UnsignedLong.valueOf(1));
+
+        buffer.clear();
+
+        TypeConstructor<?> type = decoder.readConstructor();
+        assertEquals(UnsignedLong.class, type.getTypeClass());
+        type.skipValue();
+
+        UnsignedLong result = decoder.readUnsignedLong();
+        assertEquals(UnsignedLong.valueOf(1), result);
+    }
 }


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


Mime
View raw message