You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2016/09/14 20:17:46 UTC
qpid-jms git commit: QPIDJMS-207 Add some additional testing
Repository: qpid-jms
Updated Branches:
refs/heads/master d35ea7680 -> 8494d1812
QPIDJMS-207 Add some additional testing
Adds more JMSProducer tests and fixes a C&P issue with Delivery Delay on
message sends.
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/8494d181
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/8494d181
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/8494d181
Branch: refs/heads/master
Commit: 8494d1812c89d2678a26e86b014e1fcb9ae5df41
Parents: d35ea76
Author: Timothy Bish <ta...@gmail.com>
Authored: Wed Sep 14 16:17:29 2016 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Wed Sep 14 16:17:29 2016 -0400
----------------------------------------------------------------------
.../java/org/apache/qpid/jms/JmsSession.java | 2 +-
.../facade/test/JmsTestMessageFacade.java | 1 +
.../qpid/jms/producer/JmsProducerTest.java | 349 +++++++++++++++++++
.../qpid/jms/provider/mock/MockProvider.java | 6 +-
.../qpid/jms/provider/mock/MockRemotePeer.java | 15 +-
5 files changed, 370 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8494d181/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
index e740ba7..39d8002 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
@@ -745,7 +745,7 @@ public class JmsSession implements AutoCloseable, Session, QueueSession, TopicSe
}
if (hasDelay) {
- original.setJMSDeliveryTime(timeStamp + timeToLive);
+ original.setJMSDeliveryTime(timeStamp + deliveryDelay);
} else {
original.setJMSDeliveryTime(0);
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8494d181/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestMessageFacade.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestMessageFacade.java
index f1ccb4c..9e182e5 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestMessageFacade.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestMessageFacade.java
@@ -86,6 +86,7 @@ public class JmsTestMessageFacade implements JmsMessageFacade {
target.groupSequence = this.groupSequence;
target.groupId = this.groupId;
target.expiration = this.expiration;
+ target.deliveryTime = this.deliveryTime;
target.timestamp = this.timestamp;
target.correlationId = this.correlationId;
target.persistent = this.persistent;
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8494d181/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
index 8b52959..1bf4a08 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
@@ -20,11 +20,15 @@ package org.apache.qpid.jms.producer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
import javax.jms.CompletionListener;
@@ -41,6 +45,9 @@ import org.apache.qpid.jms.JmsMessageProducer;
import org.apache.qpid.jms.JmsProducer;
import org.apache.qpid.jms.JmsSession;
import org.apache.qpid.jms.JmsTopic;
+import org.apache.qpid.jms.message.JmsMessage;
+import org.apache.qpid.jms.message.JmsOutboundMessageDispatch;
+import org.apache.qpid.jms.provider.mock.MockRemotePeer;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
@@ -52,6 +59,8 @@ public class JmsProducerTest extends JmsConnectionTestSupport {
private JmsContext context;
+ private final MockRemotePeer remotePeer = new MockRemotePeer();
+
private final String STRING_PROPERTY_NAME = "StringProperty";
private final String STRING_PROPERTY_VALUE = UUID.randomUUID().toString();
@@ -89,9 +98,12 @@ public class JmsProducerTest extends JmsConnectionTestSupport {
public void setUp() throws Exception {
super.setUp();
+ remotePeer.start();
context = createJMSContextToMockProvider();
}
+ //----- Test Property Handling methods -----------------------------------//
+
@Test
public void testGetPropertyNames() {
JMSProducer producer = context.createProducer();
@@ -813,8 +825,345 @@ public class JmsProducerTest extends JmsConnectionTestSupport {
Mockito.verify(message).setJMSType(JMS_TYPE_STRING);
}
+ //----- Test that Send methods modify Message data -----------------------//
+
+ @Test
+ public void testSendAppliesDeliveryDelayMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryDelayMessageBody(Message.class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryDelayStringMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryDelayMessageBody(String.class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryDelayMapMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryDelayMessageBody(Map.class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryDelayBytesMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryDelayMessageBody(byte[].class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryDelaySerializableMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryDelayMessageBody(UUID.class);
+ }
+
+ private void doTestSendAppliesDeliveryDelayMessageBody(Class<?> bodyType) throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ sendWithBodyOfType(producer, bodyType);
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertTrue(message.getJMSDeliveryTime() == 0);
+
+ producer.setDeliveryDelay(2000);
+ sendWithBodyOfType(producer, bodyType);
+ envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ message = envelope.getMessage();
+ assertFalse(message.getJMSDeliveryTime() == 0);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryModeMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryModeWithMessageBody(Message.class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryModeStringMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryModeWithMessageBody(String.class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryModeMapMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryModeWithMessageBody(Map.class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryModeBytesMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryModeWithMessageBody(byte[].class);
+ }
+
+ @Test
+ public void testSendAppliesDeliveryModeSerializableMessageBody() throws JMSException {
+ doTestSendAppliesDeliveryModeWithMessageBody(UUID.class);
+ }
+
+ public void doTestSendAppliesDeliveryModeWithMessageBody(Class<?> bodyType) throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ producer.setDeliveryMode(DeliveryMode.PERSISTENT);
+ producer.send(JMS_DESTINATION, "text");
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertEquals(DeliveryMode.PERSISTENT, message.getJMSDeliveryMode());
+
+ producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+ producer.send(JMS_DESTINATION, "text");
+ envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ message = envelope.getMessage();
+ assertEquals(DeliveryMode.NON_PERSISTENT, message.getJMSDeliveryMode());
+ }
+
+ @Test
+ public void testSendAppliesDisableMessageIDMessageBody() throws JMSException {
+ doTestSendAppliesDisableMessageIDWithMessageBody(Message.class);
+ }
+
+ @Test
+ public void testSendAppliesDisableMessageIDStringMessageBody() throws JMSException {
+ doTestSendAppliesDisableMessageIDWithMessageBody(String.class);
+ }
+
+ @Test
+ public void testSendAppliesDisableMessageIDMapMessageBody() throws JMSException {
+ doTestSendAppliesDisableMessageIDWithMessageBody(Map.class);
+ }
+
+ @Test
+ public void testSendAppliesDisableMessageIDBytesMessageBody() throws JMSException {
+ doTestSendAppliesDisableMessageIDWithMessageBody(byte[].class);
+ }
+
+ @Test
+ public void testSendAppliesDisableMessageIDSerializableMessageBody() throws JMSException {
+ doTestSendAppliesDisableMessageIDWithMessageBody(UUID.class);
+ }
+
+ private void doTestSendAppliesDisableMessageIDWithMessageBody(Class<?> bodyType) throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ producer.setDisableMessageID(true);
+ producer.send(JMS_DESTINATION, "text");
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertNull(message.getJMSMessageID());
+
+ producer.setDisableMessageID(false);
+ producer.send(JMS_DESTINATION, "text");
+ envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ message = envelope.getMessage();
+ assertNotNull(message.getJMSMessageID());
+ }
+
+ @Test
+ public void testSendAppliesDisableTimestampMessageBody() throws JMSException {
+ doTestSendAppliesDisableTimestampWithMessageBody(Message.class);
+ }
+
+ @Test
+ public void testSendAppliesDisableTimestampStringMessageBody() throws JMSException {
+ doTestSendAppliesDisableTimestampWithMessageBody(String.class);
+ }
+
+ @Test
+ public void testSendAppliesDisableTimestampMapMessageBody() throws JMSException {
+ doTestSendAppliesDisableTimestampWithMessageBody(Map.class);
+ }
+
+ @Test
+ public void testSendAppliesDisableTimestampBytesMessageBody() throws JMSException {
+ doTestSendAppliesDisableTimestampWithMessageBody(byte[].class);
+ }
+
+ @Test
+ public void testSendAppliesDisableTimestampSerializableMessageBody() throws JMSException {
+ doTestSendAppliesDisableTimestampWithMessageBody(UUID.class);
+ }
+
+ private void doTestSendAppliesDisableTimestampWithMessageBody(Class<?> bodyType) throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ producer.setDisableMessageTimestamp(true);
+ producer.send(JMS_DESTINATION, "text");
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertTrue(message.getJMSTimestamp() == 0);
+
+ producer.setDisableMessageTimestamp(false);
+ producer.send(JMS_DESTINATION, "text");
+ envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ message = envelope.getMessage();
+ assertFalse(message.getJMSTimestamp() == 0);
+ }
+
+ @Test
+ public void testSendAppliesPrioirtyMessageBody() throws JMSException {
+ doTestSendAppliesPriorityWithMessageBody(Message.class);
+ }
+
+ @Test
+ public void testSendAppliesPriorityStringMessageBody() throws JMSException {
+ doTestSendAppliesPriorityWithMessageBody(String.class);
+ }
+
+ @Test
+ public void testSendAppliesPriorityMapMessageBody() throws JMSException {
+ doTestSendAppliesPriorityWithMessageBody(Map.class);
+ }
+
+ @Test
+ public void testSendAppliesPriorityBytesMessageBody() throws JMSException {
+ doTestSendAppliesPriorityWithMessageBody(byte[].class);
+ }
+
+ @Test
+ public void testSendAppliesPrioritySerializableMessageBody() throws JMSException {
+ doTestSendAppliesPriorityWithMessageBody(UUID.class);
+ }
+
+ private void doTestSendAppliesPriorityWithMessageBody(Class<?> bodyType) throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ producer.setPriority(0);
+ producer.send(JMS_DESTINATION, "text");
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertEquals(0, message.getJMSPriority());
+
+ producer.setPriority(7);
+ producer.send(JMS_DESTINATION, "text");
+ envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ message = envelope.getMessage();
+ assertEquals(7, message.getJMSPriority());
+ }
+
+ @Test
+ public void testSendAppliesTimeToLiveMessageBody() throws JMSException {
+ doTestSendAppliesTimeToLiveWithMessageBody(Message.class);
+ }
+
+ @Test
+ public void testSendAppliesTimeToLiveStringMessageBody() throws JMSException {
+ doTestSendAppliesTimeToLiveWithMessageBody(String.class);
+ }
+
+ @Test
+ public void testSendAppliesTimeToLiveMapMessageBody() throws JMSException {
+ doTestSendAppliesTimeToLiveWithMessageBody(Map.class);
+ }
+
+ @Test
+ public void testSendAppliesTimeToLiveBytesMessageBody() throws JMSException {
+ doTestSendAppliesTimeToLiveWithMessageBody(byte[].class);
+ }
+
+ @Test
+ public void testSendAppliesTimeToLiveSerializableMessageBody() throws JMSException {
+ doTestSendAppliesTimeToLiveWithMessageBody(UUID.class);
+ }
+
+ private void doTestSendAppliesTimeToLiveWithMessageBody(Class<?> bodyType) throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ producer.setTimeToLive(2000);
+ producer.send(JMS_DESTINATION, "text");
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertTrue(message.getJMSExpiration() > 0);
+
+ producer.setTimeToLive(Message.DEFAULT_TIME_TO_LIVE);
+ producer.send(JMS_DESTINATION, "text");
+ envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ message = envelope.getMessage();
+ assertTrue(message.getJMSExpiration() == 0);
+ }
+
+ //----- Test that body values are written into sent messages -------------//
+
+ @Test
+ public void testStringBodyIsApplied() throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ final String bodyValue = "String-Value";
+
+ producer.send(JMS_DESTINATION, bodyValue);
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertEquals(bodyValue, message.getBody(String.class));
+ }
+
+ @Test
+ public void testMapBodyIsApplied() throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ final Map<String, Object> bodyValue = new HashMap<String, Object>();
+
+ bodyValue.put("Value-1", "First");
+ bodyValue.put("Value-2", "Second");
+
+ producer.send(JMS_DESTINATION, bodyValue);
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertEquals(bodyValue, message.getBody(Map.class));
+ }
+
+ @Test
+ public void testBytesBodyIsApplied() throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ final byte[] bodyValue = new byte[] { 0, 1, 2, 3, 4 };
+
+ producer.send(JMS_DESTINATION, bodyValue);
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+
+ byte[] payload = message.getBody(byte[].class);
+ assertNotNull(payload);
+ assertEquals(bodyValue.length, payload.length);
+
+ for (int i = 0; i < payload.length; ++i) {
+ assertEquals(bodyValue[i], payload[i]);
+ }
+ }
+
+ @Test
+ public void testSerializableBodyIsApplied() throws JMSException {
+ JMSProducer producer = context.createProducer();
+
+ final UUID bodyValue = UUID.randomUUID();
+
+ producer.send(JMS_DESTINATION, bodyValue);
+ JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage();
+ assertNotNull(envelope);
+ JmsMessage message = envelope.getMessage();
+ assertEquals(bodyValue, message.getBody(UUID.class));
+ }
+
//----- Internal Support -------------------------------------------------//
+ private void sendWithBodyOfType(JMSProducer producer, Class<?> asType) {
+ if (asType.equals(String.class)) {
+ producer.send(JMS_DESTINATION, "String-body-type");
+ } else if (asType.equals(Map.class)) {
+ producer.send(JMS_DESTINATION, Collections.<String, Object>emptyMap());
+ } else if (asType.equals(Message.class)) {
+ producer.send(JMS_DESTINATION, context.createMessage());
+ } else if (asType.equals(byte[].class)) {
+ producer.send(JMS_DESTINATION, new byte[10]);
+ } else if (asType.equals(UUID.class)) {
+ producer.send(JMS_DESTINATION, UUID.randomUUID());
+ }
+ }
+
private class TestJmsCompletionListener implements CompletionListener {
@Override
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8494d181/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockProvider.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockProvider.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockProvider.java
index 35d305c..b1fc319 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockProvider.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockProvider.java
@@ -275,9 +275,13 @@ public class MockProvider implements Provider {
checkClosed();
stats.recordSendCall();
+ if (context != null) {
+ context.recordSend(MockProvider.this, envelope);
+ }
+
request.onSuccess();
if (envelope.isCompletionRequired()) {
- if (configuration.isDelayCompletionCalls()) {
+ if (context != null && configuration.isDelayCompletionCalls()) {
context.recordPendingCompletion(MockProvider.this, envelope);
} else {
if (listener != null) {
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8494d181/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockRemotePeer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockRemotePeer.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockRemotePeer.java
index a964282..f24043d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockRemotePeer.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/mock/MockRemotePeer.java
@@ -42,6 +42,8 @@ public class MockRemotePeer {
private final MockProviderStats contextStats = new MockProviderStats();
private MockProvider lastRegistered;
+ private JmsOutboundMessageDispatch lastRecordedMessage;
+
private boolean offline;
private ResourceLifecycleFilter createFilter;
@@ -157,6 +159,16 @@ public class MockRemotePeer {
destroyFilter = filter;
}
+ public JmsOutboundMessageDispatch getLastReceivedMessage() {
+ return lastRecordedMessage;
+ }
+
+ //----- Record operations for connected providers ------------------------//
+
+ public void recordSend(MockProvider provider, JmsOutboundMessageDispatch envelope) {
+ this.lastRecordedMessage = envelope;
+ }
+
//----- Controls handling of Message Send Completions --------------------//
public void recordPendingCompletion(MockProvider provider, JmsOutboundMessageDispatch envelope) {
@@ -258,6 +270,8 @@ public class MockRemotePeer {
return result;
}
+ //----- Internal classes used for record state information ---------------//
+
private class PendingCompletion {
public final MockProvider provider;
@@ -267,6 +281,5 @@ public class MockRemotePeer {
this.provider = provider;
this.envelope = envelope;
}
-
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org