You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ai...@apache.org on 2008/02/21 16:28:44 UTC

svn commit: r629824 - in /incubator/qpid/branches/M2.1/java: client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java

Author: aidan
Date: Thu Feb 21 07:28:43 2008
New Revision: 629824

URL: http://svn.apache.org/viewvc?rev=629824&view=rev
Log:
QPID-785: Make sure queue browser consumers are auto-close, add test for browsing an empty queue. Refactor QueueBrowserTest a little to split up responsibilities a bit.

We should move the sendMessage stuff to a super class, there are at least 4 implementations of that kicking about.

Modified:
    incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java
    incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java

Modified: incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java?rev=629824&r1=629823&r2=629824&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java (original)
+++ incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java Thu Feb 21 07:28:43 2008
@@ -88,6 +88,7 @@
         checkState();
         final BasicMessageConsumer consumer =
             (BasicMessageConsumer) _session.createBrowserConsumer(_queue, _messageSelector, false);
+        consumer.closeWhenNoMessages(true);
         _consumers.add(consumer);
 
         return new Enumeration()

Modified: incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java?rev=629824&r1=629823&r2=629824&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java (original)
+++ incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java Thu Feb 21 07:28:43 2008
@@ -34,6 +34,8 @@
 import javax.jms.JMSException;
 import javax.jms.QueueReceiver;
 import javax.jms.Message;
+import javax.naming.NamingException;
+
 import java.util.Enumeration;
 
 import junit.framework.TestCase;
@@ -42,8 +44,6 @@
 {
     private static final Logger _logger = Logger.getLogger(QueueBrowserTest.class);
 
-    private static final int MSG_COUNT = 10;
-
     private Connection _clientConnection;
     private Session _clientSession;
     private Queue _queue;
@@ -64,6 +64,10 @@
 
         //Ensure _queue is created
         _clientSession.createConsumer(_queue).close();
+    }
+
+    private void sendMessages(int num) throws JMSException, NamingException
+    {
 
         //Create Producer put some messages on the queue
         Connection producerConnection = ((ConnectionFactory) _context.lookup("connection")).createConnection();
@@ -74,23 +78,17 @@
 
         MessageProducer producer = producerSession.createProducer(_queue);
 
-        for (int msg = 0; msg < MSG_COUNT; msg++)
+        for (int msg = 0; msg < num; msg++)
         {
             producer.send(producerSession.createTextMessage("Message " + msg));
         }
 
         producerConnection.close();
-
     }
 
-    /*
-    * Test Messages Remain on Queue
-    * Create a queu and send messages to it. Browse them and then receive them all to verify they were still there
-    *
-    */
-
-    public void testQueueBrowserMsgsRemainOnQueue() throws JMSException
+    private void checkQueueDepth(int depth) throws JMSException, NamingException
     {
+        sendMessages(depth);
 
         // create QueueBrowser
         _logger.info("Creating Queue Browser");
@@ -100,7 +98,7 @@
         // check for messages
         if (_logger.isDebugEnabled())
         {
-            _logger.debug("Checking for " + MSG_COUNT + " messages with QueueBrowser");
+            _logger.debug("Checking for " + depth + " messages with QueueBrowser");
         }
 
         int msgCount = 0;
@@ -119,34 +117,54 @@
 
         // check to see if all messages found
 //        assertEquals("browser did not find all messages", MSG_COUNT, msgCount);
-        if (msgCount != MSG_COUNT)
+        if (msgCount != depth)
         {
-            _logger.warn(msgCount + "/" + MSG_COUNT + " messages received.");
+            _logger.warn(msgCount + " off" + depth + " messages received.");
         }
 
         //Close browser
         queueBrowser.close();
-
-        // VERIFY
-
-        // continue and try to receive all messages
-        MessageConsumer consumer = _clientSession.createConsumer(_queue);
-
-        _logger.info("Verify messages are still on the queue");
-
-        Message tempMsg;
-
-        for (msgCount = 0; msgCount < MSG_COUNT; msgCount++)
-        {
-            tempMsg = (TextMessage) consumer.receive(RECEIVE_TIMEOUT);
-            if (tempMsg == null)
-            {
-                fail("Message " + msgCount + " not retrieved from queue");
-            }
-        }
-
-        _logger.info("All messages recevied from queue");
     }
 
-
+    /*
+     * Test Messages Remain on Queue
+     * Create a queu and send messages to it. Browse them and then receive them all to verify they were still there
+     *
+     */
+
+     public void testQueueBrowserMsgsRemainOnQueue() throws Exception
+     {
+         int messages = 10;
+
+         checkQueueDepth(messages);
+
+         // VERIFY
+
+         // continue and try to receive all messages
+         MessageConsumer consumer = _clientSession.createConsumer(_queue);
+
+         _logger.info("Verify messages are still on the queue");
+
+         Message tempMsg;
+
+         for (int msgCount = 0; msgCount < messages; msgCount++)
+         {
+             tempMsg = (TextMessage) consumer.receive(RECEIVE_TIMEOUT);
+             if (tempMsg == null)
+             {
+                 fail("Message " + msgCount + " not retrieved from queue");
+             }
+         }
+
+         _logger.info("All messages recevied from queue");
+     }
+
+     /**
+      * This tests you can browse an empty queue, see QPID-785
+      * @throws Exception
+      */
+     public void testBrowsingEmptyQueue() throws Exception
+     {
+         checkQueueDepth(0);
+     }
 }