You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/02/22 00:13:47 UTC

svn commit: r1731571 - in /qpid/java/trunk: client/src/main/java/org/apache/qpid/client/ systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/ systests/src/test/java/org/apache/qpid/test/unit/topic/ test-profiles/

Author: rgodfrey
Date: Sun Feb 21 23:13:47 2016
New Revision: 1731571

URL: http://svn.apache.org/viewvc?rev=1731571&view=rev
Log:
QPID-6703 : Add system test and properly implement JMS semantics on TemporaryQueue association with Connection (not Session)

Modified:
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java
    qpid/java/trunk/test-profiles/CPPExcludes

Modified: qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java (original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java Sun Feb 21 23:13:47 2016
@@ -1496,7 +1496,9 @@ public abstract class AMQSession<C exten
             Map<String, Object> args;
             if(_connection.getDelegate().isQueueLifetimePolicySupported())
             {
-                args = Collections.<String,Object>singletonMap("qpid.lifetime_policy", "DELETE_ON_CONNECTION_CLOSE");
+                args = new HashMap<>();
+                args.put("qpid.lifetime_policy", "DELETE_ON_CONNECTION_CLOSE");
+                args.put("qpid.exclusivity_policy", "CONNECTION");
             }
             else
             {
@@ -2482,10 +2484,10 @@ public abstract class AMQSession<C exten
         {
             _logger.debug("destination is temporary");
             final TemporaryDestination tempDest = (TemporaryDestination) destination;
-            if (tempDest.getSession() != this)
+            if (tempDest.getSession().getAMQConnection() != this.getAMQConnection())
             {
-                _logger.debug("destination is on different session");
-                throw new JMSException("Cannot consume from a temporary destination created on another session");
+                _logger.debug("destination is on different conection");
+                throw new JMSException("Cannot consume from a temporary destination created on another connection");
             }
 
             if (tempDest.isDeleted())

Modified: qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java (original)
+++ qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java Sun Feb 21 23:13:47 2016
@@ -27,6 +27,7 @@ import org.apache.qpid.test.utils.QpidBr
 
 import javax.jms.Connection;
 import javax.jms.JMSException;
+import javax.jms.Message;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;
 import javax.jms.Session;
@@ -57,13 +58,14 @@ public class TemporaryQueueTest extends
     }
 
     /**
-     * Tests that a temporary queue cannot be used by another {@link Session}.
+     * Tests that a temporary queue cannot be used by another {@link Connection}.
      */
-    public void testUseFromAnotherSessionProhibited() throws Exception
+    public void testUseFromAnotherConnectionProhibited() throws Exception
     {
         final Connection conn = getConnection();
+        final Connection conn2 = getConnection();
         final Session session1 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        final Session session2 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        final Session session2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
         final TemporaryQueue queue = session1.createTemporaryQueue();
         assertNotNull(queue);
 
@@ -75,10 +77,67 @@ public class TemporaryQueueTest extends
         catch (JMSException je)
         {
             //pass
-            assertEquals("Cannot consume from a temporary destination created on another session", je.getMessage());
+            assertEquals("Cannot consume from a temporary destination created on another connection", je.getMessage());
         }
     }
 
+
+    public void testClosingConsumerDoesNotDeleteQueue() throws Exception
+    {
+        final Connection conn = getConnection();
+        final Session session1 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        final TemporaryQueue queue = session1.createTemporaryQueue();
+        assertNotNull(queue);
+
+        MessageConsumer consumer1 = session1.createConsumer(queue);
+
+        MessageProducer producer = session1.createProducer(queue);
+
+        producer.send(session1.createTextMessage("Hello World!"));
+
+        consumer1.close();
+
+        conn.start();
+
+        MessageConsumer consumer2 = session1.createConsumer(queue);
+
+        Message message = consumer2.receive(1000l);
+
+        assertNotNull("Message should have been received", message);
+        assertTrue("Received message not a text message", message instanceof TextMessage);
+        assertEquals("Incorrect message text", "Hello World!",  ((TextMessage)message).getText());
+    }
+
+
+    public void testClosingSessionDoesNotDeleteQueue() throws Exception
+    {
+        final Connection conn = getConnection();
+        final Session session1 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        final Session session2 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+        final TemporaryQueue queue = session1.createTemporaryQueue();
+        assertNotNull(queue);
+
+        MessageConsumer consumer1 = session1.createConsumer(queue);
+
+        MessageProducer producer = session1.createProducer(queue);
+
+        producer.send(session1.createTextMessage("Hello World!"));
+
+        session1.close();
+
+        conn.start();
+
+        MessageConsumer consumer2 = session2.createConsumer(queue);
+
+        Message message = consumer2.receive(1000l);
+
+        assertNotNull("Message should have been received", message);
+        assertTrue("Received message not a text message", message instanceof TextMessage);
+        assertEquals("Incorrect message text", "Hello World!",  ((TextMessage)message).getText());
+    }
+
+
     /**
      * Tests that the client is able to explicitly delete a temporary queue using
      * {@link TemporaryQueue#delete()} and is prevented from deleting one that

Modified: qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java (original)
+++ qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java Sun Feb 21 23:13:47 2016
@@ -107,24 +107,25 @@ public class TemporaryTopicTest extends
     }
 
     /**
-     * Tests that a temporary topic cannot be used by another {@link Session}.
+     * Tests that a temporary topic cannot be used by another {@link Connection}.
      */
     public void testUseFromAnotherSessionProhibited() throws Exception
     {
         final Connection conn = getConnection();
+        final Connection conn2 = getConnection();
         final Session session1 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        final Session session2 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        final Session session2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
         final TemporaryTopic topic = session1.createTemporaryTopic();
 
         try
         {
             session2.createConsumer(topic);
-            fail("Expected a JMSException when subscribing to a temporary topic created on a different session");
+            fail("Expected a JMSException when subscribing to a temporary topic created on a different connection");
         }
         catch (JMSException je)
         {
             // pass
-            assertEquals("Cannot consume from a temporary destination created on another session", je.getMessage());
+            assertEquals("Cannot consume from a temporary destination created on another connection", je.getMessage());
         }
     }
 

Modified: qpid/java/trunk/test-profiles/CPPExcludes
URL: http://svn.apache.org/viewvc/qpid/java/trunk/test-profiles/CPPExcludes?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- qpid/java/trunk/test-profiles/CPPExcludes (original)
+++ qpid/java/trunk/test-profiles/CPPExcludes Sun Feb 21 23:13:47 2016
@@ -227,3 +227,6 @@ org.apache.qpid.test.unit.basic.Property
 
 // QPID-6786 Sending headers larger than [first] transfer/frame size (which is outside the spec) isn't supported against the C++ broker
 org.apache.qpid.test.unit.basic.PropertyValueTest#testLargeHeader_010_HeadersFillContentHeaderFrame
+
+// QPID-6703 Use of Java Broker specific queue creation arguments to properly fulfill JMS TemporaryQueue contract
+org.apache.qpid.test.unit.client.temporaryqueue.TemporaryQueueTest#testClosingSessionDoesNotDeleteQueue



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