add tests for anonymous producer behaviour regarding target type capability


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

Branch: refs/heads/master
Commit: 9d922cace70b270444ae74d6addaea6c61dbed14
Parents: 28de176
Author: Robert Gemmell <[email protected]>
Authored: Wed Jan 7 13:57:46 2015 +0000
Committer: Robert Gemmell <[email protected]>
Committed: Wed Jan 7 16:34:47 2015 +0000

----------------------------------------------------------------------
 .../jms/integration/SessionIntegrationTest.java | 115 +++++++++++++++++++
 1 file changed, 115 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/9d922cac/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 1035e04..d11692a 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
@@ -254,6 +254,121 @@ public class SessionIntegrationTest extends 
QpidJmsTestCase {
     }
 
     @Test(timeout = 5000)
+    public void 
testCreateAnonymousProducerTargetContainsNoTypeCapabilityWhenAnonymousRelayNodeIsSupported()
 throws Exception {
+        try (TestAmqpPeer testPeer = new 
TestAmqpPeer(IntegrationTestFixture.PORT);) {
+
+            //Add capability to indicate support for ANONYMOUS-RELAY
+            Symbol[] serverCapabilities = new 
Symbol[]{AmqpConnectionProperties.ANONYMOUS_RELAY};
+
+            Connection connection = testFixture.establishConnecton(testPeer, 
serverCapabilities);
+            connection.start();
+
+            testPeer.expectBegin(true);
+            Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+
+            //Expect and accept a link to the anonymous relay node, check it 
has no type capability
+            TargetMatcher targetMatcher = new TargetMatcher();
+            targetMatcher.withAddress(nullValue());
+            targetMatcher.withDynamic(nullValue());//default = false
+            targetMatcher.withDurable(nullValue());//default = none/0
+            targetMatcher.withCapabilities(nullValue());
+
+            testPeer.expectSenderAttach(targetMatcher, false, false);
+
+            //Create an anonymous producer
+            MessageProducer producer = session.createProducer(null);
+            assertNotNull("Producer object was null", producer);
+
+            testPeer.waitForAllHandlersToComplete(1000);
+        }
+    }
+
+    @Test(timeout = 5000)
+    public void 
testCreateAnonymousProducerTargetContainsQueueCapabilityWhenAnonymousRelayNodeIsNotSupported()
 throws Exception {
+        
doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(Queue.class);
+    }
+
+    @Test(timeout = 5000)
+    public void 
testCreateAnonymousProducerTargetContainsTopicCapabilityWhenAnonymousRelayNodeIsNotSupported()
 throws Exception {
+        
doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(Topic.class);
+    }
+
+    @Test(timeout = 5000)
+    public void 
testCreateAnonymousProducerTargetContainsTempQueueCapabilityWhenAnonymousRelayNodeIsNotSupported()
 throws Exception {
+        
doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(TemporaryQueue.class);
+    }
+
+    @Test(timeout = 5000)
+    public void 
testCreateAnonymousProducerTargetContainsTempTopicCapabilityWhenAnonymousRelayNodeIsNotSupported()
 throws Exception {
+        
doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(TemporaryQueue.class);
+    }
+
+    private void 
doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(Class<?
 extends Destination> destType) throws Exception {
+        try (TestAmqpPeer testPeer = new 
TestAmqpPeer(IntegrationTestFixture.PORT);) {
+
+            //DO NOT add capability to indicate server support for 
ANONYMOUS-RELAY
+
+            Connection connection = testFixture.establishConnecton(testPeer);
+            connection.start();
+
+            testPeer.expectBegin(true);
+            Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+
+            String destName = "myDest";
+            Symbol nodeTypeCapability = null;
+
+            Destination dest = null;
+            if (destType == Queue.class) {
+                dest = session.createQueue(destName);
+                nodeTypeCapability = Symbol.valueOf("queue");// TODO: constant
+            } else if (destType == Topic.class) {
+                dest = session.createTopic(destName);
+                nodeTypeCapability = Symbol.valueOf("topic");// TODO: constant
+            } else if (destType == TemporaryQueue.class) {
+                testPeer.expectTempQueueCreationAttach(destName);
+                dest = session.createTemporaryQueue();
+                nodeTypeCapability = 
AmqpTemporaryDestination.TEMP_QUEUE_CAPABILITY;
+            } else if (destType == TemporaryTopic.class) {
+                testPeer.expectTempTopicCreationAttach(destName);
+                dest = session.createTemporaryTopic();
+                nodeTypeCapability = 
AmqpTemporaryDestination.TEMP_TOPIC_CAPABILITY;
+            } else {
+                fail("unexpected type");
+            }
+
+            // Expect no AMQP traffic when we create the anonymous producer, 
as it will wait
+            // for an actual send to occur on the producer before anything 
occurs on the wire
+
+            //Create an anonymous producer
+            MessageProducer producer = session.createProducer(null);
+            assertNotNull("Producer object was null", producer);
+
+            //Expect a new message sent by the above producer to cause 
creation of a new
+            //sender link to the given destination, then closing the link 
after the message is sent.
+            TargetMatcher targetMatcher = new TargetMatcher();
+            targetMatcher.withAddress(equalTo(destName));
+            targetMatcher.withDynamic(equalTo(false));
+            targetMatcher.withDurable(equalTo(TerminusDurability.NONE));
+            
targetMatcher.withCapabilities(arrayContaining(nodeTypeCapability));
+
+            MessageHeaderSectionMatcher headersMatcher = new 
MessageHeaderSectionMatcher(true);
+            MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new 
MessageAnnotationsSectionMatcher(true);
+            TransferPayloadCompositeMatcher messageMatcher = new 
TransferPayloadCompositeMatcher();
+            messageMatcher.setHeadersMatcher(headersMatcher);
+            messageMatcher.setMessageAnnotationsMatcher(msgAnnotationsMatcher);
+
+            testPeer.expectSenderAttach(targetMatcher, false, false);
+            testPeer.expectTransfer(messageMatcher);
+            testPeer.expectDetach(true, true, true);
+
+            Message message = session.createMessage();
+            producer.send(dest, message);
+
+            testPeer.waitForAllHandlersToComplete(1000);
+        }
+    }
+
+    @Test(timeout = 5000)
     public void testCreateDurableTopicSubscriber() throws Exception {
         try (TestAmqpPeer testPeer = new 
TestAmqpPeer(testFixture.getAvailablePort());) {
             Connection connection = testFixture.establishConnecton(testPeer);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to