You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2017/07/27 14:44:37 UTC

[1/4] qpid-broker-j git commit: QPID-7434: Add missing properties conversion for message conversion layer from 0-10 to 0-8

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master 3e1ddbccb -> f3fad41d3


QPID-7434: Add missing properties conversion for message conversion layer from 0-10 to 0-8


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

Branch: refs/heads/master
Commit: f3fad41d3e3c2270b625e6cdf89733ed72a835dd
Parents: bfb48c7
Author: Alex Rudyy <or...@apache.org>
Authored: Thu Jul 27 15:37:37 2017 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu Jul 27 15:44:03 2017 +0100

----------------------------------------------------------------------
 .../transport/BasicContentHeaderProperties.java |   5 +
 .../MessageConverter_0_10_to_1_0.java           |  27 +-
 .../PropertyConverter_0_10_to_1_0Test.java      |  59 ++-
 .../MessageConverter_0_10_to_0_8.java           |  65 ++-
 .../MessageConverter_0_8_to_0_10.java           |  20 +-
 .../PropertyConverter_0_10_to_0_8Test.java      | 524 +++++++++++++++++++
 .../PropertyConverter_0_8_to_0_10Test.java      |  20 +-
 .../v0_8_v1_0/MessageConverter_0_8_to_1_0.java  |  16 +-
 .../PropertyConverter_0_8_to_1_0Test.java       |  17 +-
 9 files changed, 669 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
index 50bf982..db74e31 100644
--- a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
+++ b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
@@ -769,6 +769,11 @@ public class BasicContentHeaderProperties
         nullEncodedForm();
     }
 
+    public boolean hasExpiration()
+    {
+        return (_propertyFlags & EXPIRATION_MASK) != 0;
+    }
+
     public AMQShortString getMessageId()
     {
         return _messageId;

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
index 6cc4989..c28d531 100644
--- a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
+++ b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
@@ -63,26 +63,27 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
                                                   SectionEncoder sectionEncoder)
     {
         Properties props = new Properties();
+        props.setCreationTime(new Date(serverMessage.getArrivalTime()));
 
         final MessageProperties msgProps = serverMessage.getHeader().getMessageProperties();
         final DeliveryProperties deliveryProps = serverMessage.getHeader().getDeliveryProperties();
-
         Header header = new Header();
         if(deliveryProps != null)
         {
-            header.setDurable(deliveryProps.hasDeliveryMode() && deliveryProps.getDeliveryMode() == MessageDeliveryMode.PERSISTENT);
-            if(deliveryProps.hasPriority())
+            header.setDurable(deliveryProps.hasDeliveryMode()
+                              && deliveryProps.getDeliveryMode() == MessageDeliveryMode.PERSISTENT);
+            if (deliveryProps.hasPriority())
             {
                 header.setPriority(UnsignedByte.valueOf((byte) deliveryProps.getPriority().getValue()));
             }
-            if(deliveryProps.hasTtl())
+            if (deliveryProps.hasTtl())
             {
                 header.setTtl(UnsignedInteger.valueOf(deliveryProps.getTtl()));
             }
-
-            if(deliveryProps.hasExpiration())
+            else if (deliveryProps.hasExpiration())
             {
-                props.setAbsoluteExpiryTime(new Date(deliveryProps.getExpiration()));
+                long ttl = Math.max(0, deliveryProps.getExpiration() - serverMessage.getArrivalTime());
+                header.setTtl(UnsignedInteger.valueOf(ttl));
             }
 
             if(deliveryProps.hasTimestamp())
@@ -110,18 +111,6 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
 
         ApplicationProperties applicationProperties = null;
 
-
-        /*
-            TODO: the current properties are not currently set:
-
-            absoluteExpiryTime
-            creationTime
-            groupId
-            groupSequence
-            replyToGroupId
-            to
-        */
-
         if(msgProps != null)
         {
             if(msgProps.hasContentEncoding()

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
index 0b7883d..30eed53 100644
--- a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
+++ b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
@@ -22,7 +22,6 @@
 package org.apache.qpid.server.protocol.converter.v0_10_v1_0;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.mockito.Matchers.booleanThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -95,7 +94,8 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
         String contentEncoding = "my-test-encoding";
         final MessageProperties messageProperties = new MessageProperties();
         messageProperties.setContentEncoding(contentEncoding);
-        MessageTransferMessage message = createTestMessage(new DeliveryProperties(), messageProperties, new byte[]{(byte)1}, 0);
+        MessageTransferMessage message =
+                createTestMessage(new DeliveryProperties(), messageProperties, new byte[]{(byte) 1}, 0);
 
         final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
 
@@ -115,7 +115,7 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
         final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
 
         Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
-        assertEquals("Unexpected application applicationProperties", headers, new HashMap<>(applicationProperties));
+        assertEquals("Unexpected applicationProperties", headers, new HashMap<>(applicationProperties));
     }
 
     public void testHeaderConversionWhenQpidSubjectIsPresent()
@@ -184,7 +184,9 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
         final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
 
         Properties properties = convertedMessage.getPropertiesSection().getValue();
-        assertEquals("Unexpected correlationId", correlationId, new String(((Binary)properties.getCorrelationId()).getArray(), UTF_8));
+        assertEquals("Unexpected correlationId",
+                     correlationId,
+                     new String(((Binary) properties.getCorrelationId()).getArray(), UTF_8));
     }
 
     public void testReplyToConversionWhenExchangeAndRoutingKeySpecified()
@@ -221,7 +223,6 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
         messageProperties.setReplyTo(new ReplyTo(null, routingKey));
         MessageTransferMessage message = createTestMessage(messageProperties);
 
-
         final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
 
         Properties properties = convertedMessage.getPropertiesSection().getValue();
@@ -253,21 +254,25 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
         assertNull("Unexpected reply-to", properties.getReplyTo());
     }
 
-        public void testExpirationConversion()
-        {
-            long timestamp = System.currentTimeMillis();
-            int ttl = 100000;
-            final long expiration = timestamp + ttl;
+    public void testExpirationConversion()
+    {
+        long timestamp = System.currentTimeMillis();
+        int ttl = 100000;
+        final long expiration = timestamp + ttl;
 
-            final DeliveryProperties deliveryProperties = new DeliveryProperties();
-            deliveryProperties.setExpiration(expiration);
-            MessageTransferMessage message = createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setExpiration(expiration);
+        MessageTransferMessage message =
+                createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
 
-            final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
 
-            Properties properties = convertedMessage.getPropertiesSection().getValue();
-            assertEquals("Unexpected expiration", expiration, properties.getAbsoluteExpiryTime().getTime());
-        }
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertNull("Unexpected expiration", properties.getAbsoluteExpiryTime());
+
+        Header header = convertedMessage.getHeaderSection().getValue();
+        assertEquals("Unexpected TTL", ttl, header.getTtl().intValue());
+    }
 
     public void testTTLConversion()
     {
@@ -276,12 +281,16 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
 
         final DeliveryProperties deliveryProperties = new DeliveryProperties();
         deliveryProperties.setTtl(ttl);
-        MessageTransferMessage message = createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
+        MessageTransferMessage message =
+                createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
 
         final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
 
         Header header = convertedMessage.getHeaderSection().getValue();
         assertEquals("Unexpected TTL", ttl, header.getTtl().longValue());
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertNull("Unexpected expiration", properties.getAbsoluteExpiryTime());
     }
 
     public void testMessageIdConversion()
@@ -309,6 +318,17 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
         assertEquals("Unexpected creation timestamp", timestamp, properties.getCreationTime().getTime());
     }
 
+    public void testArrivalTimeConversion()
+    {
+        final long timestamp = System.currentTimeMillis() - 1000;
+        MessageTransferMessage message =
+                createTestMessage(new DeliveryProperties(), new MessageProperties(), null, timestamp);
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected creation timestamp", timestamp, properties.getCreationTime().getTime());
+    }
+
     public void testJmsTypeConversion()
     {
         final String type = "test-type";
@@ -501,7 +521,8 @@ public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
                                                      final long arrivalTime)
     {
         int bodySize = content == null ? 0 : content.length;
-        final org.apache.qpid.server.protocol.v0_10.transport.Header header = new org.apache.qpid.server.protocol.v0_10.transport.Header(deliveryProperties, messageProperties);
+        final org.apache.qpid.server.protocol.v0_10.transport.Header header =
+                new org.apache.qpid.server.protocol.v0_10.transport.Header(deliveryProperties, messageProperties);
         final MessageMetaData_0_10 metaData = new MessageMetaData_0_10(header, bodySize, arrivalTime);
 
         final StoredMessage<MessageMetaData_0_10> storedMessage = mock(StoredMessage.class);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
index f2b0652..4ba599b 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
 import org.apache.qpid.server.protocol.v0_8.AMQPInvalidClassException;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.exchange.ExchangeDefaults;
@@ -69,24 +70,42 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
                                               ? BasicContentHeaderProperties.PERSISTENT
                                               : BasicContentHeaderProperties.NON_PERSISTENT));
             }
-            if(deliveryProps.hasExpiration())
+
+            if (deliveryProps.hasTtl())
+            {
+                props.setExpiration(messageTransferMessage.getArrivalTime() + deliveryProps.getTtl());
+            }
+            else if(deliveryProps.hasExpiration())
             {
                 props.setExpiration(deliveryProps.getExpiration());
             }
+
             if(deliveryProps.hasPriority())
             {
                 props.setPriority((byte) deliveryProps.getPriority().getValue());
             }
+
             if(deliveryProps.hasTimestamp())
             {
                 props.setTimestamp(deliveryProps.getTimestamp());
             }
+            else
+            {
+                props.setTimestamp(messageTransferMessage.getArrivalTime());
+            }
         }
         if(messageProps != null)
         {
             if(messageProps.hasAppId())
             {
-                props.setAppId(new AMQShortString(messageProps.getAppId()));
+                try
+                {
+                    props.setAppId(new AMQShortString(messageProps.getAppId()));
+                }
+                catch (IllegalArgumentException e)
+                {
+                    // pass
+                }
             }
             if(messageProps.hasContentType())
             {
@@ -102,6 +121,7 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
             }
             if(messageProps.hasMessageId())
             {
+                // Add prefix 'ID:' to workaround broken 0-8..0-9-1 Qpid JMS client
                 props.setMessageId("ID:" + messageProps.getMessageId().toString());
             }
             if(messageProps.hasReplyTo())
@@ -114,16 +134,17 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
                     exchangeName = "";
                 }
 
-                MessageDestination destination = addressSpace.getAttainedMessageDestination(exchangeName);
-                Exchange<?> exchange = destination instanceof Exchange ? (Exchange<?>) destination : null;
-
-                String exchangeClass = exchange == null
-                                            ? ExchangeDefaults.DIRECT_EXCHANGE_CLASS
-                                            : exchange.getType();
-                props.setReplyTo(exchangeClass + "://" + exchangeName + "//?routingkey='" + (routingKey == null
-                                                                                             ? ""
-                                                                                             : routingKey + "'"));
-
+                if (!"".equals(exchangeName) || (routingKey != null && !"".equals(routingKey)))
+                {
+                    MessageDestination destination = addressSpace.getAttainedMessageDestination(exchangeName);
+                    Exchange<?> exchange = destination instanceof Exchange ? (Exchange<?>) destination : null;
+
+                    String exchangeClass = exchange == null
+                            ? ExchangeDefaults.DIRECT_EXCHANGE_CLASS
+                            : exchange.getType();
+                    String routingKeyOption = routingKey == null ? "" : "?routingkey='" + routingKey + "'";
+                    props.setReplyTo(String.format("%s://%s//%s", exchangeClass, exchangeName, routingKeyOption));
+                }
             }
             if(messageProps.hasUserId())
             {
@@ -135,20 +156,30 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
                 Map<String, Object> appHeaders = new HashMap<String, Object>(messageProps.getApplicationHeaders());
                 if(messageProps.getApplicationHeaders().containsKey("x-jms-type"))
                 {
-                    props.setType(String.valueOf(appHeaders.remove("x-jms-type")));
+                    String jmsType = String.valueOf(appHeaders.remove("x-jms-type"));
+                    try
+                    {
+                        props.setType(jmsType);
+                    }
+                    catch (IllegalArgumentException e)
+                    {
+                        throw new MessageConversionException("Could not convert message from 0-10 to 0-8 because x-jms-type conversion failed.", e);
+                    }
                 }
 
                 FieldTable ft = new FieldTable();
-                for(Map.Entry<String, Object> entry : appHeaders.entrySet())
+                for (Map.Entry<String, Object> entry : appHeaders.entrySet())
                 {
+                    String headerName = entry.getKey();
                     try
                     {
-                        ft.put(AMQShortString.validValueOf(entry.getKey()), entry.getValue());
+                        ft.put(AMQShortString.validValueOf(headerName), entry.getValue());
                     }
                     catch (AMQPInvalidClassException e)
                     {
-                        // TODO
-                        // log here, but ignore - just can;t convert
+                        throw new MessageConversionException(String.format(
+                                "Could not convert message from 0-10 to 0-8 because conversion of application header '%s' failed.",
+                                headerName), e);
                     }
                 }
                 props.setHeaders(ft);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
index 7540e48..9a48b84 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
@@ -20,6 +20,8 @@
  */
 package org.apache.qpid.server.protocol.converter.v0_8_v0_10;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 import java.net.URISyntaxException;
 import java.util.Collection;
 import java.util.Map;
@@ -211,20 +213,22 @@ public class MessageConverter_0_8_to_0_10  implements MessageConverter<AMQMessag
 
         if(properties.getMessageId() != null)
         {
+            UUID uuid;
+            String messageIdAsString = properties.getMessageIdAsString();
+            if(messageIdAsString.startsWith("ID:"))
+            {
+                messageIdAsString = messageIdAsString.substring(3);
+            }
+
             try
             {
-                String messageIdAsString = properties.getMessageIdAsString();
-                if(messageIdAsString.startsWith("ID:"))
-                {
-                    messageIdAsString = messageIdAsString.substring(3);
-                }
-                UUID uuid = UUID.fromString(messageIdAsString);
-                messageProps.setMessageId(uuid);
+                uuid = UUID.fromString(messageIdAsString);
             }
             catch(IllegalArgumentException e)
             {
-                throw new MessageConversionException("Could not convert message from 0-8 to 0-10 because messageId conversion failed.", e);
+                uuid = UUID.nameUUIDFromBytes(messageIdAsString.getBytes(UTF_8));
             }
+            messageProps.setMessageId(uuid);
         }
 
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_10_to_0_8Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_10_to_0_8Test.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_10_to_0_8Test.java
new file mode 100644
index 0000000..a432737
--- /dev/null
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_10_to_0_8Test.java
@@ -0,0 +1,524 @@
+/*
+ * 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.server.protocol.converter.v0_8_v0_10;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.model.NamedAddressSpace;
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
+import org.apache.qpid.server.protocol.v0_10.MessageMetaData_0_10;
+import org.apache.qpid.server.protocol.v0_10.MessageTransferMessage;
+import org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryMode;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryPriority;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageProperties;
+import org.apache.qpid.server.protocol.v0_10.transport.ReplyTo;
+import org.apache.qpid.server.protocol.v0_8.AMQMessage;
+import org.apache.qpid.server.protocol.v0_8.AMQShortString;
+import org.apache.qpid.server.protocol.v0_8.FieldTable;
+import org.apache.qpid.server.protocol.v0_8.transport.BasicContentHeaderProperties;
+import org.apache.qpid.server.protocol.v0_8.transport.MessagePublishInfo;
+import org.apache.qpid.server.store.StoredMessage;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class PropertyConverter_0_10_to_0_8Test extends QpidTestCase
+{
+    private NamedAddressSpace _namedAddressSpace;
+    private MessageConverter_0_10_to_0_8 _messageConverter;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        _namedAddressSpace = mock(NamedAddressSpace.class);
+        _messageConverter = new MessageConverter_0_10_to_0_8();
+    }
+
+    public void testContentTypeConversion()
+    {
+        String contentType = "test-content-type";
+
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setContentType(contentType);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected content type", contentType, properties.getContentType().toString());
+    }
+
+    public void testContentEncodingConversion()
+    {
+        String contentEncoding = "my-test-encoding";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setContentEncoding(contentEncoding);
+        MessageTransferMessage message = createTestMessage(new DeliveryProperties(), messageProperties, new byte[]{(byte)1}, 0);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected content encoding", contentEncoding, properties.getEncoding().toString());
+    }
+
+    public void testApplicationHeadersConversion()
+    {
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("testProperty1", "testProperty1Value");
+        headers.put("intProperty", 1);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        Map<String, Object> applicationProperties = FieldTable.convertToMap(properties.getHeaders());
+        assertEquals("Unexpected headers", headers, new HashMap<>(applicationProperties));
+    }
+
+    public void testApplicationHeadersConversionWhenQpidSubjectIsPresent()
+    {
+        String testSubject = "testSubject";
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("qpid.subject", testSubject);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        Map<String, Object> applicationProperties = FieldTable.convertToMap(properties.getHeaders());
+        assertEquals("Unexpected subject in application properties", testSubject, applicationProperties.get("qpid.subject"));
+    }
+
+    public void testApplicationHeadersConversionContainingInconvertibleValues()
+    {
+        Map<String, Object> headers = Collections.singletonMap("testUUID", UUID.randomUUID());
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testPersistentDeliveryModeConversion()
+    {
+        MessageDeliveryMode deliveryMode = MessageDeliveryMode.PERSISTENT;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setDeliveryMode(deliveryMode);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected deliveryMode", deliveryMode.getValue(), properties.getDeliveryMode());
+    }
+
+    public void testNonPersistentDeliveryModeConversion()
+    {
+        MessageDeliveryMode deliveryMode = MessageDeliveryMode.NON_PERSISTENT;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setDeliveryMode(deliveryMode);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected deliveryMode", deliveryMode.getValue(), properties.getDeliveryMode());
+    }
+
+    public void testPriorityConversion()
+    {
+        final byte priority = 5;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setPriority(MessageDeliveryPriority.get(priority));
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected priority", priority, properties.getPriority());
+    }
+
+    public void testCorrelationIdConversion()
+    {
+        final String correlationId = "testCorrelationId";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setCorrelationId(correlationId.getBytes());
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected correlationId", correlationId, properties.getCorrelationId().toString());
+    }
+
+    public void testReplyToConversionWhenExchangeAndRoutingKeySpecified()
+    {
+        final String exchangeName = "amq.direct";
+        final String routingKey = "test_routing_key";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(exchangeName, routingKey));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        String expectedReplyTo = String.format("direct://%s//?routingkey='%s'", exchangeName, routingKey);
+        assertEquals("Unexpected reply-to", expectedReplyTo, properties.getReplyTo().toString());
+    }
+
+    public void testReplyToConversionWhenExchangeSpecified()
+    {
+        final String exchangeName = "amq.direct";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(exchangeName, null));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        String expectedReplyTo = String.format("direct://%s//", exchangeName);
+        assertEquals("Unexpected reply-to", expectedReplyTo, properties.getReplyTo().toString());
+    }
+
+    public void testReplyToConversionWhenRoutingKeySpecified()
+    {
+        final String routingKey = "test_routing_key";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(null, routingKey));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        String expectedReplyTo = String.format("direct:////?routingkey='%s'", routingKey);
+        assertEquals("Unexpected reply-to", expectedReplyTo, properties.getReplyTo().toString());
+    }
+
+    public void testReplyToConversionWhenExchangeIsEmptyStringAndRoutingKeySpecified()
+    {
+        final String routingKey = "test_routing_key";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo("", routingKey));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        String expectedReplyTo = String.format("direct:////?routingkey='%s'", routingKey);
+        assertEquals("Unexpected reply-to", expectedReplyTo, properties.getReplyTo().toString());
+    }
+
+    public void testReplyToConversionWhenExchangeAndRoutingKeyAreNull()
+    {
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(null, null));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertNull("Unexpected reply-to", properties.getReplyTo());
+    }
+
+    public void testExpirationConversion()
+    {
+        long timestamp = System.currentTimeMillis();
+        int ttl = 100000;
+        final long expiration = timestamp + ttl;
+
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setExpiration(expiration);
+        MessageTransferMessage message = createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected expiration", expiration, properties.getExpiration());
+    }
+
+    public void testTTLConversion()
+    {
+        long timestamp = System.currentTimeMillis();
+        int ttl = 100000;
+
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setTtl(ttl);
+        MessageTransferMessage message = createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected expiration", timestamp + ttl, properties.getExpiration());
+    }
+
+   public void testMessageIdConversion()
+    {
+        UUID messageId = UUID.randomUUID();
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setMessageId(messageId);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected messageId", "ID:" + messageId, properties.getMessageId().toString());
+    }
+
+    public void testTimestampConversion()
+    {
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        final long timestamp = System.currentTimeMillis() - 1000;
+        deliveryProperties.setTimestamp(timestamp);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected creation timestamp", timestamp, properties.getTimestamp());
+    }
+
+    public void testArrivalTimeConversion()
+    {
+        final long timestamp = System.currentTimeMillis() - 1000;
+        MessageTransferMessage message = createTestMessage(new DeliveryProperties(), new MessageProperties(),  null, timestamp);
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected creation timestamp", timestamp, properties.getTimestamp());
+    }
+
+    public void testJmsTypeConversion()
+    {
+        final String type = "test-type";
+        final Map<String, Object> headers = Collections.singletonMap("x-jms-type", type);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+
+        assertEquals("Unexpected subject", type, properties.getType().toString());
+        Map<String, Object> applicationProperties = FieldTable.convertToMap(properties.getHeaders());
+        assertFalse("Unexpected x-jms-type in application properties", applicationProperties.containsKey("x-jms-type"));
+    }
+
+    public void testJmsTypeConversionWhenLengthExceeds255()
+    {
+        final String type = generateLongString();
+        final Map<String, Object> headers = Collections.singletonMap("x-jms-type", type);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testUserIdConversion()
+    {
+        final String userId = "test-userId";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setUserId(userId.getBytes());
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+
+        assertEquals("Unexpected user-id", userId, properties.getUserId().toString());
+    }
+
+    public void testExchangeConversion()
+    {
+        final String testExchange = "testExchange";
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setExchange(testExchange);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        MessagePublishInfo messagePublishInfo = convertedMessage.getMessagePublishInfo();
+        assertEquals("Unexpected exchange", testExchange, messagePublishInfo.getExchange().toString());
+    }
+
+    public void testRoutingKeyConversion()
+    {
+        final String testRoutingKey = "testRoutingKey";
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setRoutingKey(testRoutingKey);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        MessagePublishInfo messagePublishInfo = convertedMessage.getMessagePublishInfo();
+        assertEquals("Unexpected routing key", testRoutingKey, messagePublishInfo.getRoutingKey().toString());
+    }
+
+    public void testImmediateTrueConversion()
+    {
+        final boolean immediate = true;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setImmediate(immediate);
+
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        MessagePublishInfo messagePublishInfo = convertedMessage.getMessagePublishInfo();
+        assertEquals("Unexpected immediate flag", immediate, messagePublishInfo.isImmediate());
+    }
+
+    public void testImmediateFalseConversion()
+    {
+        final boolean immediate = false;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setImmediate(immediate);
+
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        MessagePublishInfo messagePublishInfo = convertedMessage.getMessagePublishInfo();
+        assertEquals("Unexpected immediate flag", immediate, messagePublishInfo.isImmediate());
+    }
+
+    public void testDiscardUnroutableTrueConversion()
+    {
+        final boolean discardUnroutable = true;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setDiscardUnroutable(discardUnroutable);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        MessagePublishInfo messagePublishInfo = convertedMessage.getMessagePublishInfo();
+        assertEquals("Unexpected mandatory flag", !discardUnroutable, messagePublishInfo.isMandatory());
+    }
+
+    public void testDiscardUnroutableFalseConversion()
+    {
+        final boolean discardUnroutable = false;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setDiscardUnroutable(discardUnroutable);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        MessagePublishInfo messagePublishInfo = convertedMessage.getMessagePublishInfo();
+        assertEquals("Unexpected mandatory flag", !discardUnroutable, messagePublishInfo.isMandatory());
+    }
+
+    public void testApplicationIdConversion()
+    {
+        String applicationId = "testAppId";
+        MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setAppId(applicationId.getBytes(UTF_8));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertEquals("Unexpected application id", applicationId, properties.getAppId().toString());
+    }
+
+    public void testApplicationIdConversionWhenLengthExceeds255()
+    {
+        String appId = generateLongString();
+        MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setAppId(appId.getBytes(UTF_8));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final AMQMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        BasicContentHeaderProperties properties = convertedMessage.getContentHeaderBody().getProperties();
+        assertNull("Unexpected application id", properties.getAppId());
+    }
+
+    private String generateLongString()
+    {
+        StringBuilder buffer = new StringBuilder();
+        for(int i = 0; i < AMQShortString.MAX_LENGTH + 1 ; i++)
+        {
+            buffer.append('x');
+        }
+
+        return buffer.toString();
+    }
+
+    private MessageTransferMessage createTestMessage(final DeliveryProperties deliveryProperties)
+    {
+        return createTestMessage(deliveryProperties, new MessageProperties(), null, 0);
+    }
+
+    private MessageTransferMessage createTestMessage(final MessageProperties messageProperties)
+    {
+        return createTestMessage(new DeliveryProperties(), messageProperties, null, 0);
+    }
+
+    private MessageTransferMessage createTestMessage(final DeliveryProperties deliveryProperties,
+                                                     final MessageProperties messageProperties,
+                                                     final byte[] content,
+                                                     final long arrivalTime)
+    {
+        int bodySize = content == null ? 0 : content.length;
+        final org.apache.qpid.server.protocol.v0_10.transport.Header header = new org.apache.qpid.server.protocol.v0_10.transport.Header(deliveryProperties, messageProperties);
+        final MessageMetaData_0_10 metaData = new MessageMetaData_0_10(header, bodySize, arrivalTime);
+
+        final StoredMessage<MessageMetaData_0_10> storedMessage = mock(StoredMessage.class);
+        when(storedMessage.getMetaData()).thenReturn(metaData);
+
+        if (content != null)
+        {
+            when(storedMessage.getContentSize()).thenReturn(content.length);
+            when(storedMessage.getContent(0, content.length)).thenReturn(Collections.singleton(QpidByteBuffer.wrap(
+                    content)));
+        }
+        return new MessageTransferMessage(storedMessage, null);
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
index 56db885..ab93e30 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
@@ -101,7 +101,7 @@ public class PropertyConverter_0_8_to_0_10Test extends QpidTestCase
         final MessageProperties messageProperties =
                 convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
         Map<String, Object> applicationProperties = messageProperties.getApplicationHeaders();
-        assertEquals("Unexpected application applicationProperties", headers, new HashMap<>(applicationProperties));
+        assertEquals("Unexpected applicationProperties", headers, new HashMap<>(applicationProperties));
     }
 
     public void testPersistentDeliveryModeConversion()
@@ -302,18 +302,16 @@ public class PropertyConverter_0_8_to_0_10Test extends QpidTestCase
     {
         BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
         final String messageId = "testMessageId";
-        basicContentHeaderProperties.setMessageId(messageId);
+        basicContentHeaderProperties.setMessageId("ID:" + messageId);
         AMQMessage message = createTestMessage(basicContentHeaderProperties);
 
-        try
-        {
-            _messageConverter.convert(message, _namedAddressSpace);
-            fail("non-UUID messageId should not be converted");
-        }
-        catch (MessageConversionException e)
-        {
-            // pass
-        }
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected message id",
+                     UUID.nameUUIDFromBytes(messageId.getBytes(UTF_8)),
+                     messageProperties.getMessageId());
     }
 
     public void testTimestampConversion()

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
index 357ce98..01597f2 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
@@ -65,17 +65,15 @@ public class MessageConverter_0_8_to_1_0 extends MessageConverter_to_1_0<AMQMess
         Properties props = new Properties();
         header.setDurable(serverMessage.isPersistent());
 
-        BasicContentHeaderProperties contentHeader =
-                  serverMessage.getContentHeaderBody().getProperties();
+        BasicContentHeaderProperties contentHeader = serverMessage.getContentHeaderBody().getProperties();
 
         header.setPriority(UnsignedByte.valueOf(contentHeader.getPriority()));
-        final long expiration = serverMessage.getExpiration();
-        final long arrivalTime = serverMessage.getArrivalTime();
 
-        if(expiration > arrivalTime)
+        if(contentHeader.hasExpiration())
         {
-            header.setTtl(UnsignedInteger.valueOf(expiration - arrivalTime));
-            props.setAbsoluteExpiryTime(new Date(expiration));
+            final long expiration = serverMessage.getExpiration();
+            final long arrivalTime = serverMessage.getArrivalTime();
+            header.setTtl(UnsignedInteger.valueOf(Math.max(0, expiration - arrivalTime)));
         }
 
         if(!GZIPUtils.GZIP_CONTENT_ENCODING.equals(contentHeader.getEncodingAsString()) && bodySection instanceof DataSection)
@@ -148,6 +146,10 @@ public class MessageConverter_0_8_to_1_0 extends MessageConverter_to_1_0<AMQMess
         {
             props.setCreationTime(new Date(contentHeader.getTimestamp()));
         }
+        else
+        {
+            props.setCreationTime(new Date(serverMessage.getArrivalTime()));
+        }
 
         if (contentHeader.getType() != null)
         {

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/f3fad41d/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
index 0400ad9..0520baf 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
@@ -109,7 +109,7 @@ public class PropertyConverter_0_8_to_1_0Test extends QpidTestCase
         final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
 
         Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
-        assertEquals("Unexpected application applicationProperties", headers, new HashMap<>(applicationProperties));
+        assertEquals("Unexpected applicationProperties", headers, new HashMap<>(applicationProperties));
     }
 
     public void testHeaderConversionWhenQpidSubjectIsPresent()
@@ -257,7 +257,7 @@ public class PropertyConverter_0_8_to_1_0Test extends QpidTestCase
         int ttl = 100000;
         final long expiration = timestamp + ttl;
         basicContentHeaderProperties.setExpiration(expiration);
-        basicContentHeaderProperties.setTimestamp(timestamp);
+
         AMQMessage message = createTestMessage(basicContentHeaderProperties, timestamp);
 
         final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
@@ -266,7 +266,7 @@ public class PropertyConverter_0_8_to_1_0Test extends QpidTestCase
         assertEquals("Unexpected TTL", ttl, header.getTtl().longValue());
 
         Properties properties = convertedMessage.getPropertiesSection().getValue();
-        assertEquals("Unexpected expiration", expiration, properties.getAbsoluteExpiryTime().getTime());
+        assertNull("Unexpected expiration", properties.getAbsoluteExpiryTime());
     }
 
     public void testMessageIdConversion()
@@ -295,6 +295,17 @@ public class PropertyConverter_0_8_to_1_0Test extends QpidTestCase
         assertEquals("Unexpected creation timestamp", timestamp, properties.getCreationTime().getTime());
     }
 
+    public void testArrivalTimeConversion()
+    {
+        final long timestamp = System.currentTimeMillis() - 10000;
+        AMQMessage message = createTestMessage(new BasicContentHeaderProperties(), null, timestamp);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected creation timestamp", timestamp, properties.getCreationTime().getTime());
+    }
+
     public void testTypeConversion()
     {
         BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();


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


[2/4] qpid-broker-j git commit: QPID-7434: Add missing properties conversion for message conversion layer from 0-10 to 1.0 and add unit tests

Posted by or...@apache.org.
QPID-7434: Add missing properties conversion for message conversion layer from 0-10 to 1.0 and add unit tests


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/46983ff0
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/46983ff0
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/46983ff0

Branch: refs/heads/master
Commit: 46983ff02aa25598af689e024cffbd9b773b8b2b
Parents: 9d8a05c
Author: Alex Rudyy <or...@apache.org>
Authored: Wed Jul 26 16:09:13 2017 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu Jul 27 15:44:03 2017 +0100

----------------------------------------------------------------------
 .../amqp-msg-conv-0-10-to-1-0/pom.xml           |   6 +
 .../MessageConverter_0_10_to_1_0.java           |  92 +++-
 .../PropertyConverter_0_10_to_1_0Test.java      | 518 +++++++++++++++++++
 3 files changed, 608 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/46983ff0/broker-plugins/amqp-msg-conv-0-10-to-1-0/pom.xml
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-10-to-1-0/pom.xml b/broker-plugins/amqp-msg-conv-0-10-to-1-0/pom.xml
index e9a9c9b..8c5fc1f 100644
--- a/broker-plugins/amqp-msg-conv-0-10-to-1-0/pom.xml
+++ b/broker-plugins/amqp-msg-conv-0-10-to-1-0/pom.xml
@@ -51,6 +51,12 @@
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-1-0-protocol</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.qpid</groupId>
+      <artifactId>qpid-test-utils</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/46983ff0/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
index 4e13258..6cc4989 100644
--- a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
+++ b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
@@ -21,11 +21,14 @@
 
 package org.apache.qpid.server.protocol.converter.v0_10_v1_0;
 
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.apache.qpid.server.plugin.PluggableService;
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
 import org.apache.qpid.server.protocol.v0_10.MessageTransferMessage;
+import org.apache.qpid.server.protocol.v0_10.transport.ReplyTo;
 import org.apache.qpid.server.protocol.v1_0.MessageConverter_to_1_0;
 import org.apache.qpid.server.protocol.v1_0.MessageMetaData_1_0;
 import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
@@ -35,6 +38,7 @@ import org.apache.qpid.server.protocol.v1_0.type.UnsignedByte;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.ApplicationProperties;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Data;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.DataSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.EncodingRetainingSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Properties;
@@ -58,6 +62,8 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
                                                   final EncodingRetainingSection<?> bodySection,
                                                   SectionEncoder sectionEncoder)
     {
+        Properties props = new Properties();
+
         final MessageProperties msgProps = serverMessage.getHeader().getMessageProperties();
         final DeliveryProperties deliveryProps = serverMessage.getHeader().getDeliveryProperties();
 
@@ -73,9 +79,35 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
             {
                 header.setTtl(UnsignedInteger.valueOf(deliveryProps.getTtl()));
             }
+
+            if(deliveryProps.hasExpiration())
+            {
+                props.setAbsoluteExpiryTime(new Date(deliveryProps.getExpiration()));
+            }
+
+            if(deliveryProps.hasTimestamp())
+            {
+                props.setCreationTime(new Date(deliveryProps.getTimestamp()));
+            }
+
+            String to = deliveryProps.getExchange();
+            if (deliveryProps.getRoutingKey() != null)
+            {
+                String routingKey = deliveryProps.getRoutingKey();
+                if (to != null && !"".equals(to))
+                {
+                    to += "/" + routingKey;
+                }
+                else
+                {
+                    to = routingKey;
+                }
+            }
+            props.setTo(to);
+
         }
 
-        Properties props = new Properties();
+
         ApplicationProperties applicationProperties = null;
 
 
@@ -94,14 +126,14 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
         {
             if(msgProps.hasContentEncoding()
                && !GZIPUtils.GZIP_CONTENT_ENCODING.equals(msgProps.getContentEncoding())
-               && bodySection instanceof Data)
+               && bodySection instanceof DataSection)
             {
                 props.setContentEncoding(Symbol.valueOf(msgProps.getContentEncoding()));
             }
 
             if(msgProps.hasCorrelationId())
             {
-                props.setCorrelationId(msgProps.getCorrelationId());
+                props.setCorrelationId(new Binary(msgProps.getCorrelationId()));
             }
 
             if(msgProps.hasMessageId())
@@ -110,7 +142,24 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
             }
             if(msgProps.hasReplyTo())
             {
-                props.setReplyTo(msgProps.getReplyTo().getExchange()+"/"+msgProps.getReplyTo().getRoutingKey());
+                ReplyTo replyTo = msgProps.getReplyTo();
+                String to = null;
+                if (replyTo.hasExchange() && !"".equals(replyTo.getExchange()))
+                {
+                    to = replyTo.getExchange();
+                }
+                if (replyTo.hasRoutingKey())
+                {
+                    if (to != null)
+                    {
+                        to += "/" + replyTo.getRoutingKey();
+                    }
+                    else
+                    {
+                        to = replyTo.getRoutingKey();
+                    }
+                }
+                props.setReplyTo(to);
             }
             if(msgProps.hasContentType())
             {
@@ -123,8 +172,6 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
                 }
             }
 
-            props.setSubject(serverMessage.getInitialRoutingAddress());
-
             if(msgProps.hasUserId())
             {
                 props.setUserId(new Binary(msgProps.getUserId()));
@@ -133,14 +180,43 @@ public class MessageConverter_0_10_to_1_0  extends MessageConverter_to_1_0<Messa
             Map<String, Object> applicationPropertiesMap = msgProps.getApplicationHeaders();
             if(applicationPropertiesMap != null)
             {
+                applicationPropertiesMap = new LinkedHashMap<>(applicationPropertiesMap);
+                if (applicationPropertiesMap.containsKey("x-jms-type"))
+                {
+                    props.setSubject(String.valueOf(applicationPropertiesMap.get("x-jms-type")));
+                    applicationPropertiesMap.remove("x-jms-type");
+                }
+
                 if(applicationPropertiesMap.containsKey("qpid.subject"))
                 {
                     props.setSubject(String.valueOf(applicationPropertiesMap.get("qpid.subject")));
-                    applicationPropertiesMap = new LinkedHashMap<>(applicationPropertiesMap);
                     applicationPropertiesMap.remove("qpid.subject");
                 }
-                applicationProperties = new ApplicationProperties(applicationPropertiesMap);
 
+                if(applicationPropertiesMap.containsKey("JMSXGroupID"))
+                {
+                    props.setGroupId(String.valueOf(applicationPropertiesMap.get("JMSXGroupID")));
+                    applicationPropertiesMap.remove("JMSXGroupID");
+                }
+
+                if(applicationPropertiesMap.containsKey("JMSXGroupSeq"))
+                {
+                    Object jmsxGroupSeq = applicationPropertiesMap.get("JMSXGroupSeq");
+                    if (jmsxGroupSeq instanceof Integer)
+                    {
+                        props.setGroupSequence(UnsignedInteger.valueOf((Integer)jmsxGroupSeq));
+                        applicationPropertiesMap.remove("JMSXGroupSeq");
+                    }
+                }
+
+                try
+                {
+                    applicationProperties = new ApplicationProperties(applicationPropertiesMap);
+                }
+                catch (IllegalArgumentException e)
+                {
+                    throw new MessageConversionException("Could not convert message from 0-10 to 1.0 because application headers conversion failed.", e);
+                }
             }
         }
         return new MessageMetaData_1_0(header.createEncodingRetainingSection(),

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/46983ff0/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
new file mode 100644
index 0000000..0b7883d
--- /dev/null
+++ b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
@@ -0,0 +1,518 @@
+/*
+ *
+ * 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.server.protocol.converter.v0_10_v1_0;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.mockito.Matchers.booleanThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.model.NamedAddressSpace;
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
+import org.apache.qpid.server.protocol.v0_10.MessageMetaData_0_10;
+import org.apache.qpid.server.protocol.v0_10.MessageTransferMessage;
+import org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryMode;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryPriority;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageProperties;
+import org.apache.qpid.server.protocol.v0_10.transport.ReplyTo;
+import org.apache.qpid.server.protocol.v1_0.Message_1_0;
+import org.apache.qpid.server.protocol.v1_0.type.Binary;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Properties;
+import org.apache.qpid.server.store.StoredMessage;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class PropertyConverter_0_10_to_1_0Test extends QpidTestCase
+{
+    private NamedAddressSpace _namedAddressSpace;
+    private MessageConverter_0_10_to_1_0 _messageConverter;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        _namedAddressSpace = mock(NamedAddressSpace.class);
+        _messageConverter = new MessageConverter_0_10_to_1_0();
+    }
+
+    public void testContentTypeConversion()
+    {
+        String contentType = "test-content-type";
+
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setContentType(contentType);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected content type", contentType, properties.getContentType().toString());
+    }
+
+
+    public void testContentTypeJavaObjectStreamConversion()
+    {
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setContentType("application/java-object-stream");
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected content type",
+                     "application/x-java-serialized-object",
+                     properties.getContentType().toString());
+    }
+
+    public void testContentEncodingConversion()
+    {
+        String contentEncoding = "my-test-encoding";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setContentEncoding(contentEncoding);
+        MessageTransferMessage message = createTestMessage(new DeliveryProperties(), messageProperties, new byte[]{(byte)1}, 0);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected content encoding", contentEncoding, properties.getContentEncoding().toString());
+    }
+
+    public void testHeaderConversion()
+    {
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("testProperty1", "testProperty1Value");
+        headers.put("intProperty", 1);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
+        assertEquals("Unexpected application applicationProperties", headers, new HashMap<>(applicationProperties));
+    }
+
+    public void testHeaderConversionWhenQpidSubjectIsPresent()
+    {
+        String testSubject = "testSubject";
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("testProperty1", "testProperty1Value");
+        headers.put("qpid.subject", testSubject);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected subject", testSubject, properties.getSubject());
+        Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
+        assertFalse("Unexpected subject in application properties", applicationProperties.containsKey("qpid.subject"));
+    }
+
+
+    public void testPersistentDeliveryModeConversion()
+    {
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Header header = convertedMessage.getHeaderSection().getValue();
+        assertTrue("Unexpected durable header", header.getDurable());
+    }
+
+    public void testNonPersistentDeliveryModeConversion()
+    {
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Header header = convertedMessage.getHeaderSection().getValue();
+        assertFalse("Unexpected durable header", header.getDurable());
+    }
+
+    public void testPriorityConversion()
+    {
+        final byte priority = 5;
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setPriority(MessageDeliveryPriority.get(priority));
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Header header = convertedMessage.getHeaderSection().getValue();
+        assertEquals("Unexpected priority", priority, header.getPriority().byteValue());
+    }
+
+    public void testCorrelationIdConversion()
+    {
+        final String correlationId = "testCorrelationId";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setCorrelationId(correlationId.getBytes());
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected correlationId", correlationId, new String(((Binary)properties.getCorrelationId()).getArray(), UTF_8));
+    }
+
+    public void testReplyToConversionWhenExchangeAndRoutingKeySpecified()
+    {
+        final String exchangeName = "amq.direct";
+        final String routingKey = "test_routing_key";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(exchangeName, routingKey));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected reply-to", "amq.direct/test_routing_key", properties.getReplyTo());
+    }
+
+    public void testReplyToConversionWhenExchangeSpecified()
+    {
+        final String exchangeName = "amq.direct";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(exchangeName, null));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected reply-to", exchangeName, properties.getReplyTo());
+    }
+
+    public void testReplyToConversionWhenRoutingKeySpecified()
+    {
+        final String routingKey = "test_routing_key";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(null, routingKey));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected reply-to", routingKey, properties.getReplyTo());
+    }
+
+    public void testReplyToConversionWhenExchangeIsEmptyStringAndRoutingKeySpecified()
+    {
+        final String routingKey = "test_routing_key";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo("", routingKey));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected reply-to", "test_routing_key", properties.getReplyTo());
+    }
+
+    public void testReplyToConversionWhenExchangeAndRoutingKeyAreNull()
+    {
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setReplyTo(new ReplyTo(null, null));
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertNull("Unexpected reply-to", properties.getReplyTo());
+    }
+
+        public void testExpirationConversion()
+        {
+            long timestamp = System.currentTimeMillis();
+            int ttl = 100000;
+            final long expiration = timestamp + ttl;
+
+            final DeliveryProperties deliveryProperties = new DeliveryProperties();
+            deliveryProperties.setExpiration(expiration);
+            MessageTransferMessage message = createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
+
+            final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+            Properties properties = convertedMessage.getPropertiesSection().getValue();
+            assertEquals("Unexpected expiration", expiration, properties.getAbsoluteExpiryTime().getTime());
+        }
+
+    public void testTTLConversion()
+    {
+        long timestamp = System.currentTimeMillis();
+        int ttl = 100000;
+
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setTtl(ttl);
+        MessageTransferMessage message = createTestMessage(deliveryProperties, new MessageProperties(), null, timestamp);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Header header = convertedMessage.getHeaderSection().getValue();
+        assertEquals("Unexpected TTL", ttl, header.getTtl().longValue());
+    }
+
+    public void testMessageIdConversion()
+    {
+        UUID messageId = UUID.randomUUID();
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setMessageId(messageId);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected messageId", messageId, properties.getMessageId());
+    }
+
+    public void testTimestampConversion()
+    {
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        final long timestamp = System.currentTimeMillis() - 1000;
+        deliveryProperties.setTimestamp(timestamp);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected creation timestamp", timestamp, properties.getCreationTime().getTime());
+    }
+
+    public void testJmsTypeConversion()
+    {
+        final String type = "test-type";
+        final Map<String, Object> headers = Collections.singletonMap("x-jms-type", type);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected subject", type, properties.getSubject());
+        Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
+        assertFalse("Unexpected x-jms-type in application properties", applicationProperties.containsKey("x-jms-type"));
+    }
+
+    public void testQpidSubjectTakesPrecedenceOverJmsType()
+    {
+        final String jmsType = "test-jms-type";
+        final String qpidSubjectType = "test-qpid-type";
+        final Map<String, Object> headers = new HashMap<>();
+        headers.put("x-jms-type", jmsType);
+        headers.put("qpid.subject", qpidSubjectType);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected subject", qpidSubjectType, properties.getSubject());
+        Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
+        assertTrue("Unexpected entries in application properties", applicationProperties.isEmpty());
+    }
+
+    public void testUserIdConversion()
+    {
+        final String userId = "test-userId";
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setUserId(userId.getBytes());
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+        assertEquals("Unexpected user-id", userId, new String(properties.getUserId().getArray(), UTF_8));
+    }
+
+    public void testHeaderJMSXGroupIdConversion()
+    {
+        String testGroupId = "testGroupId";
+        Map<String, Object> headers = Collections.singletonMap("JMSXGroupID", testGroupId);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+
+        assertEquals("Unexpected group-id", testGroupId, properties.getGroupId());
+
+        Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
+        assertFalse("Unexpected JMSXGroupID in application properties",
+                    applicationProperties.containsKey("JMSXGroupID"));
+    }
+
+    public void testHeaderJMSXGroupSeqConversion()
+    {
+        int testGroupSequenceNumber = 1;
+        Map<String, Object> headers = Collections.singletonMap("JMSXGroupSeq", testGroupSequenceNumber);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+
+        assertEquals("Unexpected group-sequence", testGroupSequenceNumber, properties.getGroupSequence().intValue());
+
+        Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
+        assertFalse("Unexpected JMSXGroupSeq in application properties",
+                    applicationProperties.containsKey("JMSXGroupSeq"));
+    }
+
+    public void testHeaderJMSXGroupSeqConversionWhenWrongType()
+    {
+        short testGroupSequenceNumber = (short) 1;
+        Map<String, Object> headers = Collections.singletonMap("JMSXGroupSeq", testGroupSequenceNumber);
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+
+        assertEquals("Unexpected group-sequence", null, properties.getGroupSequence());
+
+        Map<String, Object> applicationProperties = convertedMessage.getApplicationPropertiesSection().getValue();
+
+        assertTrue("JMSXGroupSeq was removed from application properties",
+                   applicationProperties.containsKey("JMSXGroupSeq"));
+    }
+
+    public void testHeaderWithMapValueConversionFails()
+    {
+        Map<String, Object> headers = Collections.singletonMap("mapHeader", Collections.emptyMap());
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is expected");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testHeaderWithListValueConversionFails()
+    {
+        Map<String, Object> headers = Collections.singletonMap("listHeader", Collections.emptyList());
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is expected");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testHeaderWithArrayValueConversionFails()
+    {
+        Map<String, Object> headers = Collections.singletonMap("listHeader", new int[]{1});
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setApplicationHeaders(headers);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is expected");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testExchangeRoutingKeyConversion()
+    {
+        final String testExchange = "testExchange";
+        final String testRoutingKey = "testRoutingKey";
+        final DeliveryProperties deliveryProperties = new DeliveryProperties();
+        deliveryProperties.setExchange(testExchange);
+        deliveryProperties.setRoutingKey(testRoutingKey);
+        MessageTransferMessage message = createTestMessage(deliveryProperties);
+
+        final Message_1_0 convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = convertedMessage.getPropertiesSection().getValue();
+
+        assertEquals("Unexpected to", testExchange + "/" + testRoutingKey, properties.getTo());
+    }
+
+    private MessageTransferMessage createTestMessage(final DeliveryProperties deliveryProperties)
+    {
+        return createTestMessage(deliveryProperties, new MessageProperties(), null, 0);
+    }
+
+    private MessageTransferMessage createTestMessage(final MessageProperties messageProperties)
+    {
+        return createTestMessage(new DeliveryProperties(), messageProperties, null, 0);
+    }
+
+    private MessageTransferMessage createTestMessage(final DeliveryProperties deliveryProperties,
+                                                     final MessageProperties messageProperties,
+                                                     final byte[] content,
+                                                     final long arrivalTime)
+    {
+        int bodySize = content == null ? 0 : content.length;
+        final org.apache.qpid.server.protocol.v0_10.transport.Header header = new org.apache.qpid.server.protocol.v0_10.transport.Header(deliveryProperties, messageProperties);
+        final MessageMetaData_0_10 metaData = new MessageMetaData_0_10(header, bodySize, arrivalTime);
+
+        final StoredMessage<MessageMetaData_0_10> storedMessage = mock(StoredMessage.class);
+        when(storedMessage.getMetaData()).thenReturn(metaData);
+
+        if (content != null)
+        {
+            when(storedMessage.getContentSize()).thenReturn(content.length);
+            when(storedMessage.getContent(0, content.length)).thenReturn(Collections.singleton(QpidByteBuffer.wrap(
+                    content)));
+        }
+        return new MessageTransferMessage(storedMessage, null);
+    }
+}


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


[3/4] qpid-broker-j git commit: QPID-7434: Fix handling of default destination on conversion from 0-8

Posted by or...@apache.org.
QPID-7434: Fix handling of default destination on conversion from 0-8


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

Branch: refs/heads/master
Commit: bfb48c7a2e9841d60cdd8f6cc9597acf2106f7dc
Parents: 46983ff
Author: Alex Rudyy <or...@apache.org>
Authored: Wed Jul 26 16:09:59 2017 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu Jul 27 15:44:03 2017 +0100

----------------------------------------------------------------------
 .../converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java       | 2 +-
 .../converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java  | 4 ++--
 .../converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java         | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bfb48c7a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
index bdf9daa..7540e48 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
@@ -196,7 +196,7 @@ public class MessageConverter_0_8_to_0_10  implements MessageConverter<AMQMessag
                 }
 
                 String exchangeName = burl.getExchangeName();
-                if(exchangeName != null)
+                if(exchangeName != null && !"".equals(exchangeName))
                 {
                     replyTo.setExchange(exchangeName);
                 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bfb48c7a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
index 2a9aa78..56db885 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/PropertyConverter_0_8_to_0_10Test.java
@@ -216,7 +216,7 @@ public class PropertyConverter_0_8_to_0_10Test extends QpidTestCase
 
         final MessageProperties messageProperties =
                 convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
-        assertEquals("Unexpected reply-to exchange", "", messageProperties.getReplyTo().getExchange());
+        assertNull("Unexpected reply-to exchange",  messageProperties.getReplyTo().getExchange());
         assertEquals("Unexpected reply-to routing-key", "queue_name", messageProperties.getReplyTo().getRoutingKey());
     }
 
@@ -232,7 +232,7 @@ public class PropertyConverter_0_8_to_0_10Test extends QpidTestCase
 
         final MessageProperties messageProperties =
                 convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
-        assertEquals("Unexpected reply-to exchange", "", messageProperties.getReplyTo().getExchange());
+        assertNull("Unexpected reply-to exchange", messageProperties.getReplyTo().getExchange());
         assertEquals("Unexpected reply-to routing-key", "test_routing_key", messageProperties.getReplyTo().getRoutingKey());
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bfb48c7a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
index 2ea8398..357ce98 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
@@ -183,7 +183,7 @@ public class MessageConverter_0_8_to_1_0 extends MessageConverter_to_1_0<AMQMess
         if (messagePublishInfo.getRoutingKey() != null)
         {
             String routingKey = AMQShortString.toString(messagePublishInfo.getRoutingKey());
-            if (to != null)
+            if (to != null && !"".equals(to))
             {
                 to += "/" + routingKey;
             }


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


[4/4] qpid-broker-j git commit: QPID-7434: Verify that illegal key or values are not included into application-properties on conversion from 0-8 into 1.0

Posted by or...@apache.org.
QPID-7434: Verify that illegal key or values are not included into application-properties on conversion from 0-8 into 1.0


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/9d8a05cd
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/9d8a05cd
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/9d8a05cd

Branch: refs/heads/master
Commit: 9d8a05cd72e4877a217024f3df5e40a8f9c45b37
Parents: 3e1ddbc
Author: Alex Rudyy <or...@apache.org>
Authored: Wed Jul 26 14:02:06 2017 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu Jul 27 15:44:03 2017 +0100

----------------------------------------------------------------------
 .../qpid/server/protocol/v0_8/FieldTable.java   | 18 +++-------
 .../type/messaging/ApplicationProperties.java   | 35 ++++++++++++++++++
 .../v0_8_v1_0/MessageConverter_0_8_to_1_0.java  | 15 +++++---
 .../PropertyConverter_0_8_to_1_0Test.java       | 37 ++++++++++++++++++++
 4 files changed, 87 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/9d8a05cd/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
index db5ce22..c344bb8 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
@@ -698,10 +698,6 @@ public class FieldTable
         {
             return setChar(string, (Character) object);
         }
-        else if (object instanceof Collection)
-        {
-            return setFieldArray(string, (Collection)object);
-        }
         else if (object instanceof FieldTable)
         {
             return setFieldTable(string, (FieldTable) object);
@@ -710,6 +706,10 @@ public class FieldTable
         {
             return setFieldTable(string, FieldTable.convertToFieldTable((Map<String,Object>) object));
         }
+        else if (object instanceof Collection)
+        {
+            return setFieldArray(string, (Collection)object);
+        }
         else if (object instanceof Date)
         {
             return setTimestamp(string, ((Date) object).getTime());
@@ -1205,15 +1205,7 @@ public class FieldTable
             for(Map.Entry<String,Object> entry : map.entrySet())
             {
                 final AMQShortString propertyNameAsShotString = AMQShortString.valueOf(entry.getKey());
-                Object value = entry.getValue();
-                if(value instanceof Map)
-                {
-                    table.setFieldTable(propertyNameAsShotString, convertToFieldTable((Map<String,Object>)value));
-                }
-                else
-                {
-                    table.put(propertyNameAsShotString, value);
-                }
+                table.put(propertyNameAsShotString, entry.getValue());
             }
 
             return table;

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/9d8a05cd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
index e799c29..213c06b 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
@@ -23,7 +23,12 @@
 
 package org.apache.qpid.server.protocol.v1_0.type.messaging;
 
+import java.util.Date;
 import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.protocol.v1_0.type.Binary;
+import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 
 public class ApplicationProperties implements NonEncodingRetainingSection<Map<String,Object>>
 {
@@ -32,6 +37,21 @@ public class ApplicationProperties implements NonEncodingRetainingSection<Map<St
 
     public ApplicationProperties(Map<String,Object> value)
     {
+        if (value == null)
+        {
+            throw new IllegalArgumentException("Value must not be null");
+        }
+        for(Map.Entry<String,Object> entry: value.entrySet())
+        {
+            if (entry.getKey() == null)
+            {
+                throw new IllegalArgumentException("Application properties do not allow null keys");
+            }
+            if (!isSimpleType(entry.getValue()))
+            {
+                throw new IllegalArgumentException("Application properties do not allow non-primitive values");
+            }
+        }
         _value = value;
     }
 
@@ -46,4 +66,19 @@ public class ApplicationProperties implements NonEncodingRetainingSection<Map<St
     {
         return new ApplicationPropertiesSection(this);
     }
+
+    private boolean isSimpleType(final Object value)
+    {
+        return value == null
+               || value instanceof String
+               || value instanceof Number
+               || value instanceof Boolean
+               || value instanceof Symbol
+               || value instanceof Date
+               || value instanceof Character
+               || value instanceof UUID
+               || value instanceof Binary
+               || value instanceof byte[];
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/9d8a05cd/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
index 868fa9d..2ea8398 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java
@@ -25,6 +25,7 @@ import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
 import org.apache.qpid.server.protocol.v0_8.AMQShortString;
 import org.apache.qpid.server.protocol.v0_8.transport.BasicContentHeaderProperties;
 import org.apache.qpid.server.protocol.v0_8.FieldTable;
@@ -39,7 +40,6 @@ import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedByte;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.ApplicationProperties;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.Data;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.DataSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.EncodingRetainingSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
@@ -195,10 +195,15 @@ public class MessageConverter_0_8_to_1_0 extends MessageConverter_to_1_0<AMQMess
         props.setTo(to);
 
 
-        // TODO: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-application
-        // Adhere to "the values are restricted to be of simple types only, that is, excluding map, list, and array types".
-        // 0-8..0-91 for instance supported field tables with maps as values.
-        final ApplicationProperties applicationProperties = new ApplicationProperties(applicationPropertiesMap);
+        final ApplicationProperties applicationProperties;
+        try
+        {
+            applicationProperties = new ApplicationProperties(applicationPropertiesMap);
+        }
+        catch (IllegalArgumentException e)
+        {
+            throw new MessageConversionException("Could not convert message from 0-8 to 1.0 because headers conversion failed.", e);
+        }
 
         return new MessageMetaData_1_0(header.createEncodingRetainingSection(),
                                        null,

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/9d8a05cd/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
index af150a3..0400ad9 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_0_8_to_1_0Test.java
@@ -30,6 +30,7 @@ import java.util.Map;
 
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.model.NamedAddressSpace;
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
 import org.apache.qpid.server.protocol.v0_8.AMQMessage;
 import org.apache.qpid.server.protocol.v0_8.AMQShortString;
 import org.apache.qpid.server.protocol.v0_8.FieldTable;
@@ -384,6 +385,42 @@ public class PropertyConverter_0_8_to_1_0Test extends QpidTestCase
                    applicationProperties.containsKey("JMSXGroupSeq"));
     }
 
+    public void testHeaderWithFiledTableValueConversionFails()
+    {
+        Map<String, Object> headers = Collections.singletonMap("mapHeader", Collections.emptyMap());
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        basicContentHeaderProperties.setHeaders(FieldTable.convertToFieldTable(headers));
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is expected");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testHeaderWithFieldArrayValueConversionFails()
+    {
+        Map<String, Object> headers = Collections.singletonMap("listHeader", Collections.emptyList());
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        basicContentHeaderProperties.setHeaders(FieldTable.convertToFieldTable(headers));
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is expected");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
     public void testExchangeRoutingKeyConversion()
     {
         final String testExchange = "testExchange";


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