From 7f8b5ecd9a9d1c44503eb867cc8c9815b092bb7d Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Sun, 11 Mar 2012 16:43:07 +0000 Subject: QPID-3873: Add tests to verify that publishing of unroutable messages does not cause long running store transactions Applied patch from Oleksandr Rudyy git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1299395 13f79535-47bb-0310-9956-ffa450edef68 --- .../unit/transacted/TransactionTimeoutTest.java | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'qpid/java/systests/src/main') diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactionTimeoutTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactionTimeoutTest.java index f554b0089e..9e11e940c0 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactionTimeoutTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactionTimeoutTest.java @@ -20,6 +20,16 @@ */ package org.apache.qpid.test.unit.transacted; +import javax.jms.DeliveryMode; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageProducer; +import javax.jms.Queue; +import javax.jms.Session; +import javax.jms.Topic; +import javax.jms.TopicPublisher; +import javax.jms.TopicSession; + /** * This tests the behaviour of transactional sessions when the {@code transactionTimeout} configuration * is set for a virtual host. @@ -305,4 +315,60 @@ public class TransactionTimeoutTest extends TransactionTimeoutTestCase monitor(0, 0); } + + public void testTransactionCommittedOnNonRoutableQueuePersistentMessage() throws Exception + { + checkTransactionCommittedOnNonRoutableQueueMessage(DeliveryMode.PERSISTENT); + } + + public void testTransactionCommittedOnNonRoutableQueueTransientMessage() throws Exception + { + checkTransactionCommittedOnNonRoutableQueueMessage(DeliveryMode.PERSISTENT); + } + + public void testTransactionCommittedOnNonRoutableTopicPersistentMessage() throws Exception + { + checkTransactionCommittedOnNonRoutableTopicMessage(DeliveryMode.PERSISTENT); + } + + public void testTransactionCommittedOnNonRoutableTopicTransientMessage() throws Exception + { + checkTransactionCommittedOnNonRoutableTopicMessage(DeliveryMode.PERSISTENT); + } + + protected void checkTransactionCommittedOnNonRoutableQueueMessage(int deliveryMode) throws JMSException, Exception + { + Queue nonExisting = _psession.createQueue("non-existent-queue-" + System.currentTimeMillis()); + MessageProducer producer = _psession.createProducer(nonExisting); + Message message = _psession.createMessage(); + message.setJMSDeliveryMode(deliveryMode); + for (int i=0;i<1000; i++) + { + producer.send(message); + } + _psession.commit(); + + // give time to house keeping thread to log messages + sleep(3f); + monitor(0, 0); + } + + protected void checkTransactionCommittedOnNonRoutableTopicMessage(int deliveryMode) throws JMSException, Exception + { + final TopicSession session = _con.createTopicSession(true, Session.SESSION_TRANSACTED); + Topic nonExisting = session.createTopic("non-existent-topic-" + System.currentTimeMillis()); + + TopicPublisher topicPublisher = session.createPublisher(nonExisting); + Message message = session.createMessage(); + message.setJMSDeliveryMode(deliveryMode); + for (int i=0;i<1000; i++) + { + topicPublisher.send(message); + } + session.commit(); + + // give time to house keeping thread to log messages + sleep(3f); + monitor(0, 0); + } } -- cgit v1.2.1