You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2017/07/26 11:03:47 UTC

qpid-broker-j git commit: QPID-7434: Add missing properties conversion for message conversion layer from 0-8 to 0-10 and add unit tests

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master 94205aa2d -> ebec2d335


QPID-7434: Add missing properties conversion for message conversion layer from 0-8 to 0-10 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/ebec2d33
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/ebec2d33
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/ebec2d33

Branch: refs/heads/master
Commit: ebec2d335cdded5896477640bfa7b1c322d0cbdb
Parents: 94205aa
Author: Lorenz Quack <lq...@apache.org>
Authored: Wed Jul 26 11:54:29 2017 +0100
Committer: Lorenz Quack <lq...@apache.org>
Committed: Wed Jul 26 12:01:16 2017 +0100

----------------------------------------------------------------------
 .../converter/MessageConversionException.java   |  29 ++
 .../protocol/v0_10/MessageMetaData_0_10.java    |  10 +
 .../amqp-msg-conv-0-8-to-0-10/pom.xml           |   6 +
 .../MessageConverter_0_8_to_0_10.java           |  17 +-
 .../PropertyConverter_0_8_to_0_10Test.java      | 484 +++++++++++++++++++
 5 files changed, 545 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/ebec2d33/broker-core/src/main/java/org/apache/qpid/server/protocol/converter/MessageConversionException.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/protocol/converter/MessageConversionException.java b/broker-core/src/main/java/org/apache/qpid/server/protocol/converter/MessageConversionException.java
new file mode 100644
index 0000000..55eed43
--- /dev/null
+++ b/broker-core/src/main/java/org/apache/qpid/server/protocol/converter/MessageConversionException.java
@@ -0,0 +1,29 @@
+/*
+ * 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;
+
+public class MessageConversionException extends RuntimeException
+{
+    public MessageConversionException(final String msg, final Throwable cause)
+    {
+        super(msg, cause);
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/ebec2d33/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java b/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java
index de1aad1..e1eec89 100755
--- a/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java
+++ b/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java
@@ -252,6 +252,16 @@ public class MessageMetaData_0_10 implements StorableMessageMetaData
         return _header;
     }
 
+    public DeliveryProperties getDeliveryProperties()
+    {
+        return _deliveryProps;
+    }
+
+    public MessageProperties getMessageProperties()
+    {
+        return _messageProps;
+    }
+
     private static class MetaDataFactory implements MessageMetaDataType.Factory<MessageMetaData_0_10>
     {
         @Override

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/ebec2d33/broker-plugins/amqp-msg-conv-0-8-to-0-10/pom.xml
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/pom.xml b/broker-plugins/amqp-msg-conv-0-8-to-0-10/pom.xml
index abf8795..ec10087 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/pom.xml
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/pom.xml
@@ -51,6 +51,12 @@
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-0-10-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/ebec2d33/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 856c662..bdf9daa 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
@@ -26,6 +26,8 @@ import java.util.Map;
 import java.util.UUID;
 
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryMode;
 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;
@@ -149,10 +151,23 @@ public class MessageConverter_0_8_to_0_10  implements MessageConverter<AMQMessag
         }
 
         deliveryProps.setExpiration(message_0_8.getExpiration());
+        if (message_0_8.getExpiration() != 0)
+        {
+            deliveryProps.setTtl(message_0_8.getExpiration() - message_0_8.getArrivalTime());
+        }
         deliveryProps.setImmediate(message_0_8.isImmediate());
+        deliveryProps.setDiscardUnroutable(!message_0_8.isMandatory());
         deliveryProps.setPriority(MessageDeliveryPriority.get(properties.getPriority()));
         deliveryProps.setRoutingKey(message_0_8.getInitialRoutingAddress());
         deliveryProps.setTimestamp(properties.getTimestamp());
+        if (properties.getDeliveryMode() == BasicContentHeaderProperties.PERSISTENT)
+        {
+            deliveryProps.setDeliveryMode(MessageDeliveryMode.PERSISTENT);
+        }
+        else
+        {
+            deliveryProps.setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT);
+        }
 
         messageProps.setContentEncoding(properties.getEncodingAsString());
         messageProps.setContentLength(size);
@@ -208,7 +223,7 @@ public class MessageConverter_0_8_to_0_10  implements MessageConverter<AMQMessag
             }
             catch(IllegalArgumentException e)
             {
-                // ignore - can't parse
+                throw new MessageConversionException("Could not convert message from 0-8 to 0-10 because messageId conversion failed.", e);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/ebec2d33/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
new file mode 100644
index 0000000..2a9aa78
--- /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_8_to_0_10Test.java
@@ -0,0 +1,484 @@
+/*
+ * 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.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.MessageProperties;
+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.MessageMetaData;
+import org.apache.qpid.server.protocol.v0_8.transport.BasicContentHeaderProperties;
+import org.apache.qpid.server.protocol.v0_8.transport.ContentHeaderBody;
+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_8_to_0_10Test extends QpidTestCase
+{
+    private NamedAddressSpace _namedAddressSpace;
+    private MessageConverter_0_8_to_0_10 _messageConverter;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        _namedAddressSpace = mock(NamedAddressSpace.class);
+        _messageConverter = new MessageConverter_0_8_to_0_10();
+    }
+
+    public void testContentTypeConversion()
+    {
+        String contentType = "test-content-type";
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        basicContentHeaderProperties.setContentType(contentType);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected content type", contentType, messageProperties.getContentType());
+    }
+
+    public void testContentEncodingConversion()
+    {
+        String contentEncoding = "my-test-encoding";
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        basicContentHeaderProperties.setEncoding(contentEncoding);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties, new byte[]{(byte) 1}, 0);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected content encoding", contentEncoding, messageProperties.getContentEncoding());
+    }
+
+    public void testHeaderConversion()
+    {
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("testProperty1", "testProperty1Value");
+        headers.put("intProperty", 1);
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        basicContentHeaderProperties.setHeaders(FieldTable.convertToFieldTable(headers));
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        Map<String, Object> applicationProperties = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected application applicationProperties", headers, new HashMap<>(applicationProperties));
+    }
+
+    public void testPersistentDeliveryModeConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        basicContentHeaderProperties.setDeliveryMode(BasicContentHeaderProperties.PERSISTENT);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected deliveryMode", MessageDeliveryMode.PERSISTENT, deliveryProperties.getDeliveryMode());
+    }
+
+    public void testNonPersistentDeliveryModeConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        basicContentHeaderProperties.setDeliveryMode(BasicContentHeaderProperties.NON_PERSISTENT);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected deliveryMode", MessageDeliveryMode.NON_PERSISTENT, deliveryProperties.getDeliveryMode());
+    }
+
+    public void testPriorityConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final byte priority = 5;
+        basicContentHeaderProperties.setPriority(priority);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected priority", priority, deliveryProperties.getPriority().getValue());
+    }
+
+    public void testCorrelationIdConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final String correlationId = "testCorrelationId";
+        basicContentHeaderProperties.setCorrelationId(AMQShortString.valueOf(correlationId));
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected correlationId", correlationId, new String(messageProperties.getCorrelationId(), UTF_8));
+    }
+
+    public void testApplicationIdConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final String applicationId = "testApplicationId";
+        basicContentHeaderProperties.setAppId(applicationId);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected applicationId", applicationId, new String(messageProperties.getAppId(), UTF_8));
+    }
+
+    public void testReplyToConversionWhenBindingURLFormatIsUsed()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+
+        final String replyTo = "direct://amq.direct/destination_name/queue_name?routingkey='test_routing_key'";
+        basicContentHeaderProperties.setReplyTo(replyTo);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected reply-to exchange", "amq.direct", messageProperties.getReplyTo().getExchange());
+        assertEquals("Unexpected reply-to routing-key", "test_routing_key", messageProperties.getReplyTo().getRoutingKey());
+    }
+
+    public void testReplyToConversionWhenBindingURLFormatIsUsed2()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+
+        final String replyTo = "direct://amq.direct//queue_name";
+        basicContentHeaderProperties.setReplyTo(replyTo);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected reply-to exchange", "amq.direct", messageProperties.getReplyTo().getExchange());
+        assertEquals("Unexpected reply-to routing-key", "queue_name", messageProperties.getReplyTo().getRoutingKey());
+    }
+
+    public void testReplyToConversionWhenBindingURLFormatIsUsed3()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+
+        final String replyTo = "direct:////queue_name";
+        basicContentHeaderProperties.setReplyTo(replyTo);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected reply-to exchange", "", messageProperties.getReplyTo().getExchange());
+        assertEquals("Unexpected reply-to routing-key", "queue_name", messageProperties.getReplyTo().getRoutingKey());
+    }
+
+    public void testReplyToConversionWhenBindingURLFormatIsUsed4()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+
+        final String replyTo = "direct:////?routingkey='test_routing_key'";
+        basicContentHeaderProperties.setReplyTo(replyTo);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected reply-to exchange", "", messageProperties.getReplyTo().getExchange());
+        assertEquals("Unexpected reply-to routing-key", "test_routing_key", messageProperties.getReplyTo().getRoutingKey());
+    }
+
+    public void testReplyToConversionWhenNonBindingURLFormatIsUsed()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+
+        final String replyTo = "test";
+        basicContentHeaderProperties.setReplyTo(replyTo);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertFalse("Unexpected reply-to exchange", messageProperties.getReplyTo().hasExchange());
+        assertEquals("Unexpected reply-to routing-key", "test", messageProperties.getReplyTo().getRoutingKey());
+    }
+
+    public void testExpirationConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        long timestamp = System.currentTimeMillis();
+        int ttl = 100000;
+        final long expiration = timestamp + ttl;
+        basicContentHeaderProperties.setExpiration(expiration);
+        basicContentHeaderProperties.setTimestamp(timestamp);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties, timestamp);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected TTL", ttl, deliveryProperties.getTtl());
+        assertEquals("Unexpected expiration", expiration, deliveryProperties.getExpiration());
+    }
+
+    public void testUuidMessageIdConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final UUID messageId = UUID.randomUUID();
+        basicContentHeaderProperties.setMessageId(messageId.toString());
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId", messageId, messageProperties.getMessageId());
+    }
+
+    public void testUuidMessageIdWithPrefixConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final UUID messageId = UUID.randomUUID();
+        basicContentHeaderProperties.setMessageId("ID:" + messageId.toString());
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId", messageId, messageProperties.getMessageId());
+    }
+
+    public void testNonUuidMessageIdConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final String messageId = "testMessageId";
+        basicContentHeaderProperties.setMessageId(messageId);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("non-UUID messageId should not be converted");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testTimestampConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final long timestamp = System.currentTimeMillis() - 10000;
+        basicContentHeaderProperties.setTimestamp(timestamp);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected timestamp", timestamp, deliveryProperties.getTimestamp());
+    }
+
+    public void testTypeConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final String type = "test-type";
+        basicContentHeaderProperties.setType(type);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        Map<String, Object> applicationProperties = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected x-jms-type in application headers", type, applicationProperties.get("x-jms-type"));
+    }
+
+    public void testUserIdConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final String userId = "test-userId";
+        basicContentHeaderProperties.setUserId(userId);
+        AMQMessage message = createTestMessage(basicContentHeaderProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected user-id", userId, new String(messageProperties.getUserId(), UTF_8));
+    }
+
+    public void testPublishInfoExchangeConversion()
+    {
+        final String testExchange = "testExchange";
+        AMQMessage message = createTestMessage(new BasicContentHeaderProperties());
+        message.getMessagePublishInfo().setExchange(AMQShortString.valueOf(testExchange));
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected exchange", testExchange, deliveryProperties.getExchange());
+    }
+
+    public void testPublishInfoRoutingKeyConversion()
+    {
+        final String testRoutingKey = "testRoutingKey";
+        AMQMessage message = createTestMessage(new BasicContentHeaderProperties());
+        message.getMessagePublishInfo().setRoutingKey(AMQShortString.valueOf(testRoutingKey));
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected routing-key", testRoutingKey, deliveryProperties.getRoutingKey());
+    }
+
+    public void testPublishInfoImmediateTrueConversion()
+    {
+        final boolean immediate = true;
+        AMQMessage message = createTestMessage(new BasicContentHeaderProperties());
+        message.getMessagePublishInfo().setImmediate(immediate);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected immediate flag", immediate, deliveryProperties.getImmediate());
+    }
+
+    public void testPublishInfoImmediateFalseConversion()
+    {
+        final boolean immediate = false;
+        AMQMessage message = createTestMessage(new BasicContentHeaderProperties());
+        message.getMessagePublishInfo().setImmediate(immediate);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected immediate flag", immediate, deliveryProperties.getImmediate());
+    }
+
+    public void testPublishInfoMandatoryTrueConversion()
+    {
+        final boolean mandatory = true;
+        AMQMessage message = createTestMessage(new BasicContentHeaderProperties());
+        message.getMessagePublishInfo().setMandatory(mandatory);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected discard-unroutable flag", !mandatory, deliveryProperties.getDiscardUnroutable());
+    }
+
+    public void testPublishInfoMandatoryFalseConversion()
+    {
+        final boolean mandatory = false;
+        AMQMessage message = createTestMessage(new BasicContentHeaderProperties());
+        message.getMessagePublishInfo().setMandatory(mandatory);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected discard-unroutable flag", !mandatory, deliveryProperties.getDiscardUnroutable());
+    }
+
+    public void testContentLengthConversion()
+    {
+        BasicContentHeaderProperties basicContentHeaderProperties = new BasicContentHeaderProperties();
+        final byte[] content = {(byte) 1, (byte) 2};
+        AMQMessage message = createTestMessage(basicContentHeaderProperties, content, 0);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected content-length", content.length, messageProperties.getContentLength());
+    }
+
+    private AMQMessage createTestMessage(final BasicContentHeaderProperties basicContentHeaderProperties)
+    {
+        return createTestMessage(basicContentHeaderProperties, null, 0);
+    }
+
+    private AMQMessage createTestMessage(final BasicContentHeaderProperties basicContentHeaderProperties,
+                                         long arrivalTime)
+    {
+        return createTestMessage(basicContentHeaderProperties, null, arrivalTime);
+    }
+
+    private AMQMessage createTestMessage(final BasicContentHeaderProperties basicContentHeaderProperties,
+                                         final byte[] content, final long arrivalTime)
+    {
+        final ContentHeaderBody contentHeaderBody = mock(ContentHeaderBody.class);
+        when(contentHeaderBody.getProperties()).thenReturn(basicContentHeaderProperties);
+
+        final StoredMessage<MessageMetaData> storedMessage = mock(StoredMessage.class);
+        when(storedMessage.getMetaData()).thenReturn(new MessageMetaData(new MessagePublishInfo(),
+                                                                         contentHeaderBody,
+                                                                         arrivalTime));
+
+        if (content != null)
+        {
+            when(storedMessage.getContentSize()).thenReturn(content.length);
+            when(storedMessage.getContent(0, content.length)).thenReturn(Collections.singleton(QpidByteBuffer.wrap(
+                    content)));
+        }
+
+        return new AMQMessage(storedMessage);
+    }
+}


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