summaryrefslogtreecommitdiff
path: root/qpid/tests
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2010-06-22 19:27:12 +0000
committerGordon Sim <gsim@apache.org>2010-06-22 19:27:12 +0000
commit91c77007649756868748b02fa8fd7ff9d6e881b4 (patch)
treeeb54eacbd4fee0ab2c825d7739c004195a9a817d /qpid/tests
parent9f875847254c6a47f7fc9fef3fcfee7e0391d39e (diff)
downloadqpid-python-91c77007649756868748b02fa8fd7ff9d6e881b4.tar.gz
QPID-2688: ensure that unacked messages are requeued before autodeletion occurs when session closes
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@956988 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/tests')
-rw-r--r--qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py b/qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py
index 4d8617eb8e..0ffeb57172 100644
--- a/qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py
+++ b/qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py
@@ -196,6 +196,46 @@ class AlternateExchangeTests(TestBase010):
session.exchange_delete(exchange="onealternate")
session.exchange_delete(exchange="alt1")
+ def test_queue_autodelete(self):
+ """
+ Test that messages in a queue being auto-deleted are delivered
+ to the alternate-exchange if specified, including messages
+ that are acquired but not accepted
+ """
+ session = self.session
+ #set up a 'dead letter queue':
+ session.exchange_declare(exchange="dlq", type="fanout")
+ session.queue_declare(queue="deleted", exclusive=True, auto_delete=True)
+ session.exchange_bind(exchange="dlq", queue="deleted")
+ session.message_subscribe(destination="dlq", queue="deleted")
+ session.message_flow(destination="dlq", unit=session.credit_unit.message, value=0xFFFFFFFFL)
+ session.message_flow(destination="dlq", unit=session.credit_unit.byte, value=0xFFFFFFFFL)
+ dlq = session.incoming("dlq")
+
+ #on a separate session, create an auto-deleted queue using the
+ #dlq as its alternate exchange (handling of auto-delete is
+ #different for exclusive and non-exclusive queues, so test
+ #both modes):
+ for mode in [True, False]:
+ session2 = self.conn.session("another-session")
+ session2.queue_declare(queue="my-queue", alternate_exchange="dlq", exclusive=mode, auto_delete=True)
+ #send it some messages:
+ dp=session2.delivery_properties(routing_key="my-queue")
+ session2.message_transfer(message=Message(dp, "One"))
+ session2.message_transfer(message=Message(dp, "Two"))
+ session2.message_transfer(message=Message(dp, "Three"))
+ session2.message_subscribe(destination="incoming", queue="my-queue")
+ session2.message_flow(destination="incoming", unit=session.credit_unit.message, value=1)
+ session2.message_flow(destination="incoming", unit=session.credit_unit.byte, value=0xFFFFFFFFL)
+ self.assertEqual("One", session2.incoming("incoming").get(timeout=1).body)
+ session2.close()
+
+ #check the messages were delivered to the dlq:
+ self.assertEqual("One", dlq.get(timeout=1).body)
+ self.assertEqual("Two", dlq.get(timeout=1).body)
+ self.assertEqual("Three", dlq.get(timeout=1).body)
+ self.assertEmpty(dlq)
+
def assertEmpty(self, queue):
try: