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