diff options
| author | Aidan Skinner <aidan@apache.org> | 2008-02-21 15:28:43 +0000 |
|---|---|---|
| committer | Aidan Skinner <aidan@apache.org> | 2008-02-21 15:28:43 +0000 |
| commit | a7901852d59190651225843843d013ac34e77b52 (patch) | |
| tree | 4e2a372d6a86fa90f6a1135cbd482d6ec674bf11 /java | |
| parent | 3047c0ec2d581f4b51c77fec84fbf0bec8599573 (diff) | |
| download | qpid-python-a7901852d59190651225843843d013ac34e77b52.tar.gz | |
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.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@629824 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
| -rw-r--r-- | java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java | 1 | ||||
| -rw-r--r-- | java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java | 88 |
2 files changed, 54 insertions, 35 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java b/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java index 28e5992b26..4171e9bf9b 100644 --- a/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java +++ b/java/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java @@ -88,6 +88,7 @@ public class AMQQueueBrowser implements QueueBrowser checkState(); final BasicMessageConsumer consumer = (BasicMessageConsumer) _session.createBrowserConsumer(_queue, _messageSelector, false); + consumer.closeWhenNoMessages(true); _consumers.add(consumer); return new Enumeration() diff --git a/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java b/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java index ec9df8f1b3..06f05462ba 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java +++ b/java/systests/src/main/java/org/apache/qpid/test/client/QueueBrowserTest.java @@ -34,6 +34,8 @@ import javax.jms.TextMessage; 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 @@ public class QueueBrowserTest extends VMTestCase { 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 @@ public class QueueBrowserTest extends VMTestCase //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 @@ public class QueueBrowserTest extends VMTestCase 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 @@ public class QueueBrowserTest extends VMTestCase // 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 @@ public class QueueBrowserTest extends VMTestCase // 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); + } } |
