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/03/28 17:40:25 UTC

qpid-jms git commit: QPIDJMS-157 Add timeout tests for temp Topic and Queue create / delete handling.

Repository: qpid-jms
Updated Branches:
  refs/heads/master dc4b57067 -> d96150771


QPIDJMS-157 Add timeout tests for temp Topic and Queue create / delete
handling.  

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

Branch: refs/heads/master
Commit: d96150771817ed30fae0fc72c56c8b2041991720
Parents: dc4b570
Author: Timothy Bish <ta...@gmail.com>
Authored: Mon Mar 28 11:40:18 2016 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Mon Mar 28 11:40:18 2016 -0400

----------------------------------------------------------------------
 .../jms/integration/SessionIntegrationTest.java | 104 ++++++++++++
 .../qpid/jms/test/testpeer/TestAmqpPeer.java    | 160 +++++++++++--------
 2 files changed, 193 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d9615077/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
index e16fa55..ffb59b9 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
@@ -385,6 +385,29 @@ public class SessionIntegrationTest extends QpidJmsTestCase {
     }
 
     @Test(timeout = 20000)
+    public void testCreateTemporaryQueueTimesOut() throws Exception {
+        try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+            JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
+            connection.setRequestTimeout(500);
+            connection.start();
+
+            testPeer.expectBegin();
+            testPeer.expectTempQueueCreationAttach(null, false);
+
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+            try {
+                session.createTemporaryQueue();
+                fail("Should have timed out on create.");
+            } catch (JmsOperationTimedOutException jmsEx) {
+                LOG.info("Caught expected exception: {}", jmsEx.getMessage());
+            }
+
+            testPeer.waitForAllHandlersToComplete(1000);
+        }
+    }
+
+    @Test(timeout = 20000)
     public void testCreateAndDeleteTemporaryQueue() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -406,6 +429,35 @@ public class SessionIntegrationTest extends QpidJmsTestCase {
     }
 
     @Test(timeout = 20000)
+    public void testDeleteTemporaryQueueTimesOut() throws Exception {
+        try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+            JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
+            connection.setRequestTimeout(500);
+
+            connection.start();
+
+            testPeer.expectBegin();
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+            String dynamicAddress = "myTempQueueAddress";
+            testPeer.expectTempQueueCreationAttach(dynamicAddress);
+            TemporaryQueue tempQueue = session.createTemporaryQueue();
+
+            // Deleting the TemporaryQueue will be achieved by closing its creating link.
+            testPeer.expectDetach(true, false, true);
+
+            try {
+                tempQueue.delete();
+                fail("Should have timed out waiting to delete.");
+            } catch (JmsOperationTimedOutException jmsEx) {
+                LOG.info("Caught expected exception: {}", jmsEx.getMessage());
+            }
+
+            testPeer.waitForAllHandlersToComplete(1000);
+        }
+    }
+
+    @Test(timeout = 20000)
     public void testCreateTemporaryTopic() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -427,6 +479,29 @@ public class SessionIntegrationTest extends QpidJmsTestCase {
     }
 
     @Test(timeout = 20000)
+    public void testCreateTemporaryTopicTimesOut() throws Exception {
+        try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+            JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
+            connection.setRequestTimeout(500);
+            connection.start();
+
+            testPeer.expectBegin();
+            testPeer.expectTempTopicCreationAttach(null, false);
+
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+            try {
+                session.createTemporaryTopic();
+                fail("Should have timed out on create.");
+            } catch (JmsOperationTimedOutException jmsEx) {
+                LOG.info("Caught expected exception: {}", jmsEx.getMessage());
+            }
+
+            testPeer.waitForAllHandlersToComplete(1000);
+        }
+    }
+
+    @Test(timeout = 20000)
     public void testCreateAndDeleteTemporaryTopic() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -448,6 +523,35 @@ public class SessionIntegrationTest extends QpidJmsTestCase {
     }
 
     @Test(timeout = 20000)
+    public void testDeleteTemporaryTopicTimesOut() throws Exception {
+        try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+            JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
+            connection.setRequestTimeout(500);
+
+            connection.start();
+
+            testPeer.expectBegin();
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+            String dynamicAddress = "myTempTopicAddress";
+            testPeer.expectTempTopicCreationAttach(dynamicAddress);
+            TemporaryTopic tempTopic = session.createTemporaryTopic();
+
+            // Deleting the TemporaryTopic will be achieved by closing its creating link.
+            testPeer.expectDetach(true, false, true);
+
+            try {
+                tempTopic.delete();
+                fail("Should have timed out waiting to delete.");
+            } catch (JmsOperationTimedOutException jmsEx) {
+                LOG.info("Caught expected exception: {}", jmsEx.getMessage());
+            }
+
+            testPeer.waitForAllHandlersToComplete(1000);
+        }
+    }
+
+    @Test(timeout = 20000)
     public void testCreateConsumerSourceContainsQueueCapability() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(Queue.class);
     }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d9615077/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
index 296c108..582a0d2 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
@@ -717,11 +717,21 @@ public class TestAmqpPeer implements AutoCloseable
         expectTempNodeCreationAttach(dynamicAddress, AmqpDestinationHelper.TEMP_QUEUE_CAPABILITY, false, false, null, null);
     }
 
+    public void expectTempQueueCreationAttach(final String dynamicAddress, boolean sendReponse)
+    {
+        expectTempNodeCreationAttach(dynamicAddress, AmqpDestinationHelper.TEMP_QUEUE_CAPABILITY, sendReponse, false, false, null, null);
+    }
+
     public void expectTempTopicCreationAttach(final String dynamicAddress)
     {
         expectTempNodeCreationAttach(dynamicAddress, AmqpDestinationHelper.TEMP_TOPIC_CAPABILITY, false, false, null, null);
     }
 
+    public void expectTempTopicCreationAttach(final String dynamicAddress, boolean sendReponse)
+    {
+        expectTempNodeCreationAttach(dynamicAddress, AmqpDestinationHelper.TEMP_TOPIC_CAPABILITY, sendReponse, false, false, null, null);
+    }
+
     public void expectAndRefuseTempQueueCreationAttach(Symbol errorType, String errorMessage, boolean deferAttachResponseWrite)
     {
         expectTempNodeCreationAttach(null, AmqpDestinationHelper.TEMP_QUEUE_CAPABILITY, true, deferAttachResponseWrite, errorType, errorMessage);
@@ -734,6 +744,11 @@ public class TestAmqpPeer implements AutoCloseable
 
     private void expectTempNodeCreationAttach(final String dynamicAddress, final Symbol nodeTypeCapability, final boolean refuseLink, boolean deferAttachResponseWrite, Symbol errorType, String errorMessage)
     {
+        expectTempNodeCreationAttach(dynamicAddress, nodeTypeCapability, true, refuseLink, deferAttachResponseWrite, errorType, errorMessage);
+    }
+
+    private void expectTempNodeCreationAttach(final String dynamicAddress, final Symbol nodeTypeCapability, boolean sendResponse, final boolean refuseLink, boolean deferAttachResponseWrite, Symbol errorType, String errorMessage)
+    {
         TargetMatcher targetMatcher = new TargetMatcher();
         targetMatcher.withAddress(nullValue());
         targetMatcher.withDynamic(equalTo(true));
@@ -751,95 +766,98 @@ public class TestAmqpPeer implements AutoCloseable
                 .withSource(notNullValue())
                 .withTarget(targetMatcher);
 
-        final AttachFrame attachResponse = new AttachFrame()
-                            .setRole(Role.RECEIVER)
-                            .setSndSettleMode(SenderSettleMode.UNSETTLED)
-                            .setRcvSettleMode(ReceiverSettleMode.FIRST);
-
-        // The response frame channel will be dynamically set based on the incoming frame. Using the -1 is an illegal placeholder.
-        final FrameSender attachResponseSender = new FrameSender(this, FrameType.AMQP, -1, attachResponse, null);
-        attachResponseSender.setValueProvider(new ValueProvider()
+        if (sendResponse)
         {
-            @Override
-            public void setValues()
-            {
-                Object receivedHandle = attachMatcher.getReceivedHandle();
+            final AttachFrame attachResponse = new AttachFrame()
+                                .setRole(Role.RECEIVER)
+                                .setSndSettleMode(SenderSettleMode.UNSETTLED)
+                                .setRcvSettleMode(ReceiverSettleMode.FIRST);
 
-                attachResponseSender.setChannel(attachMatcher.getActualChannel());
-                attachResponse.setHandle(receivedHandle);
-                attachResponse.setName(attachMatcher.getReceivedName());
-                attachResponse.setSource(attachMatcher.getReceivedSource());
+            // The response frame channel will be dynamically set based on the incoming frame. Using the -1 is an illegal placeholder.
+            final FrameSender attachResponseSender = new FrameSender(this, FrameType.AMQP, -1, attachResponse, null);
+            attachResponseSender.setValueProvider(new ValueProvider()
+            {
+                @Override
+                public void setValues()
+                {
+                    Object receivedHandle = attachMatcher.getReceivedHandle();
+
+                    attachResponseSender.setChannel(attachMatcher.getActualChannel());
+                    attachResponse.setHandle(receivedHandle);
+                    attachResponse.setName(attachMatcher.getReceivedName());
+                    attachResponse.setSource(attachMatcher.getReceivedSource());
+
+                    if (!refuseLink) {
+                        Target t = (Target) createTargetObjectFromDescribedType(attachMatcher.getReceivedTarget());
+                        t.setAddress(dynamicAddress);
+                        attachResponse.setTarget(t);
+                    } else {
+                        attachResponse.setTarget(null);
+                    }
 
-                if (!refuseLink) {
-                    Target t = (Target) createTargetObjectFromDescribedType(attachMatcher.getReceivedTarget());
-                    t.setAddress(dynamicAddress);
-                    attachResponse.setTarget(t);
-                } else {
-                    attachResponse.setTarget(null);
+                    _lastInitiatedLinkHandle = (UnsignedInteger) receivedHandle;
                 }
+            });
 
-                _lastInitiatedLinkHandle = (UnsignedInteger) receivedHandle;
+            if (deferAttachResponseWrite)
+            {
+                // Defer writing the attach frame until the subsequent frame is also ready
+                attachResponseSender.setDeferWrite(true);
             }
-        });
 
-        if (deferAttachResponseWrite)
-        {
-            // Defer writing the attach frame until the subsequent frame is also ready
-            attachResponseSender.setDeferWrite(true);
-        }
+            CompositeAmqpPeerRunnable composite = new CompositeAmqpPeerRunnable();
+            composite.add(attachResponseSender);
 
-        CompositeAmqpPeerRunnable composite = new CompositeAmqpPeerRunnable();
-        composite.add(attachResponseSender);
+            if (!refuseLink) {
+                final FlowFrame flowFrame = new FlowFrame().setNextIncomingId(UnsignedInteger.ONE)  //TODO: shouldnt be hard coded
+                        .setIncomingWindow(UnsignedInteger.valueOf(2048))
+                        .setNextOutgoingId(UnsignedInteger.ONE) //TODO: shouldn't be hard coded
+                        .setOutgoingWindow(UnsignedInteger.valueOf(2048))
+                        .setLinkCredit(UnsignedInteger.valueOf(100));
 
-        if (!refuseLink) {
-            final FlowFrame flowFrame = new FlowFrame().setNextIncomingId(UnsignedInteger.ONE)  //TODO: shouldnt be hard coded
-                    .setIncomingWindow(UnsignedInteger.valueOf(2048))
-                    .setNextOutgoingId(UnsignedInteger.ONE) //TODO: shouldn't be hard coded
-                    .setOutgoingWindow(UnsignedInteger.valueOf(2048))
-                    .setLinkCredit(UnsignedInteger.valueOf(100));
+                // The flow frame channel will be dynamically set based on the incoming frame. Using the -1 is an illegal placeholder.
+                final FrameSender flowFrameSender = new FrameSender(this, FrameType.AMQP, -1, flowFrame, null);
+                flowFrameSender.setValueProvider(new ValueProvider()
+                {
+                    @Override
+                    public void setValues()
+                    {
+                        flowFrameSender.setChannel(attachMatcher.getActualChannel());
+                        flowFrame.setHandle(attachMatcher.getReceivedHandle());
+                        flowFrame.setDeliveryCount(attachMatcher.getReceivedInitialDeliveryCount());
+                    }
+                });
 
-            // The flow frame channel will be dynamically set based on the incoming frame. Using the -1 is an illegal placeholder.
-            final FrameSender flowFrameSender = new FrameSender(this, FrameType.AMQP, -1, flowFrame, null);
-            flowFrameSender.setValueProvider(new ValueProvider()
-            {
-                @Override
-                public void setValues()
+                composite.add(flowFrameSender);
+            } else {
+                final DetachFrame detachResponse = new DetachFrame().setClosed(true);
+                if (errorType != null)
                 {
-                    flowFrameSender.setChannel(attachMatcher.getActualChannel());
-                    flowFrame.setHandle(attachMatcher.getReceivedHandle());
-                    flowFrame.setDeliveryCount(attachMatcher.getReceivedInitialDeliveryCount());
-                }
-            });
+                    org.apache.qpid.jms.test.testpeer.describedtypes.Error detachError = new org.apache.qpid.jms.test.testpeer.describedtypes.Error();
 
-            composite.add(flowFrameSender);
-        } else {
-            final DetachFrame detachResponse = new DetachFrame().setClosed(true);
-            if (errorType != null)
-            {
-                org.apache.qpid.jms.test.testpeer.describedtypes.Error detachError = new org.apache.qpid.jms.test.testpeer.describedtypes.Error();
+                    detachError.setCondition(errorType);
+                    detachError.setDescription(errorMessage);
 
-                detachError.setCondition(errorType);
-                detachError.setDescription(errorMessage);
+                    detachResponse.setError(detachError);
+                }
 
-                detachResponse.setError(detachError);
-            }
+                // The response frame channel will be dynamically set based on the
+                // incoming frame. Using the -1 is an illegal placeholder.
+                final FrameSender detachResonseSender = new FrameSender(this, FrameType.AMQP, -1, detachResponse, null);
+                detachResonseSender.setValueProvider(new ValueProvider() {
+                     @Override
+                     public void setValues() {
+                          detachResonseSender.setChannel(attachMatcher.getActualChannel());
+                          detachResponse.setHandle(attachMatcher.getReceivedHandle());
+                     }
+                });
 
-            // The response frame channel will be dynamically set based on the
-            // incoming frame. Using the -1 is an illegal placeholder.
-            final FrameSender detachResonseSender = new FrameSender(this, FrameType.AMQP, -1, detachResponse, null);
-            detachResonseSender.setValueProvider(new ValueProvider() {
-                 @Override
-                 public void setValues() {
-                      detachResonseSender.setChannel(attachMatcher.getActualChannel());
-                      detachResponse.setHandle(attachMatcher.getReceivedHandle());
-                 }
-            });
+                composite.add(detachResonseSender);
+            }
 
-            composite.add(detachResonseSender);
+            attachMatcher.onCompletion(composite);
         }
 
-        attachMatcher.onCompletion(composite);
-
         addHandler(attachMatcher);
     }
 


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