diff options
| author | Gordon Sim <gsim@apache.org> | 2013-11-12 13:42:36 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2013-11-12 13:42:36 +0000 |
| commit | b955a41e69f69a1ada69c780d9fb7260c0bfc3f2 (patch) | |
| tree | 4adb557c6b9325233acf2b48961e174325e28424 /qpid/tests | |
| parent | 50595b9c333b08327462fa3693a5ba4cdced76e6 (diff) | |
| download | qpid-python-b955a41e69f69a1ada69c780d9fb7260c0bfc3f2.tar.gz | |
QPID-5301: support autodeleted exchanges
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1541058 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/tests')
| -rw-r--r-- | qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py | 107 |
1 files changed, 78 insertions, 29 deletions
diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py b/qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py index db52b36754..315991d585 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py +++ b/qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py @@ -122,49 +122,67 @@ class StandardExchangeVerifier: Used as base class for classes that test standard exchanges.""" - def verifyDirectExchange(self, ex): + def verifyDirectExchange(self, ex, unbind=False): """Verify that ex behaves like a direct exchange.""" self.queue_declare(queue="q") self.session.exchange_bind(queue="q", exchange=ex, binding_key="k") - self.assertPublishConsume(exchange=ex, queue="q", routing_key="k") try: - self.assertPublishConsume(exchange=ex, queue="q", routing_key="kk") - self.fail("Expected Empty exception") - except Queue.Empty: None # Expected - - def verifyFanOutExchange(self, ex): + self.assertPublishConsume(exchange=ex, queue="q", routing_key="k") + try: + self.assertPublishConsume(exchange=ex, queue="q", routing_key="kk") + self.fail("Expected Empty exception") + except Queue.Empty: None # Expected + finally: + if unbind: + self.session.exchange_unbind(queue="q", exchange=ex, binding_key="k") + + def verifyFanOutExchange(self, ex, unbind=False): """Verify that ex behaves like a fanout exchange.""" self.queue_declare(queue="q") self.session.exchange_bind(queue="q", exchange=ex) self.queue_declare(queue="p") self.session.exchange_bind(queue="p", exchange=ex) - for qname in ["q", "p"]: self.assertPublishGet(self.consume(qname), ex) + try: + for qname in ["q", "p"]: self.assertPublishGet(self.consume(qname), ex) + finally: + if unbind: + self.session.exchange_unbind(queue="q", exchange=ex, binding_key="") + self.session.exchange_unbind(queue="p", exchange=ex, binding_key="") + - def verifyTopicExchange(self, ex): + def verifyTopicExchange(self, ex, unbind=False): """Verify that ex behaves like a topic exchange""" self.queue_declare(queue="a") self.session.exchange_bind(queue="a", exchange=ex, binding_key="a.#.b.*") - q = self.consume("a") - self.assertPublishGet(q, ex, "a.b.x") - self.assertPublishGet(q, ex, "a.x.b.x") - self.assertPublishGet(q, ex, "a.x.x.b.x") - # Shouldn't match - self.session.message_transfer(destination=ex, message=self.createMessage("a.b")) - self.session.message_transfer(destination=ex, message=self.createMessage("a.b.x.y")) - self.session.message_transfer(destination=ex, message=self.createMessage("x.a.b.x")) - self.session.message_transfer(destination=ex, message=self.createMessage("a.b")) - self.assert_(q.empty()) - - def verifyHeadersExchange(self, ex): + try: + q = self.consume("a") + self.assertPublishGet(q, ex, "a.b.x") + self.assertPublishGet(q, ex, "a.x.b.x") + self.assertPublishGet(q, ex, "a.x.x.b.x") + # Shouldn't match + self.session.message_transfer(destination=ex, message=self.createMessage("a.b")) + self.session.message_transfer(destination=ex, message=self.createMessage("a.b.x.y")) + self.session.message_transfer(destination=ex, message=self.createMessage("x.a.b.x")) + self.session.message_transfer(destination=ex, message=self.createMessage("a.b")) + self.assert_(q.empty()) + finally: + if unbind: + self.session.exchange_unbind(queue="a", exchange=ex, binding_key="a.#.b.*") + + def verifyHeadersExchange(self, ex, unbind=False): """Verify that ex is a headers exchange""" self.queue_declare(queue="q") self.session.exchange_bind(queue="q", exchange=ex, arguments={ "x-match":"all", "name":"fred" , "age":3} ) - q = self.consume("q") - headers = {"name":"fred", "age":3} - self.assertPublishGet(q, exchange=ex, properties=headers) - self.session.message_transfer(destination=ex) # No headers, won't deliver - self.assertEmpty(q); - + try: + q = self.consume("q") + headers = {"name":"fred", "age":3} + self.assertPublishGet(q, exchange=ex, properties=headers) + self.session.message_transfer(destination=ex) # No headers, won't deliver + self.assertEmpty(q); + finally: + if unbind: + self.session.exchange_unbind(queue="q", exchange=ex, binding_key="") + class RecommendedTypesRuleTests(TestHelper, StandardExchangeVerifier): """ @@ -485,8 +503,39 @@ class MiscellaneousErrorsTests(TestHelper): class ExchangeTests(TestHelper): def testHeadersBindNoMatchArg(self): self.session.queue_declare(queue="q", exclusive=True, auto_delete=True) - try: + try: self.session.exchange_bind(queue="q", exchange="amq.match", arguments={"name":"fred" , "age":3} ) self.fail("Expected failure for missing x-match arg.") - except SessionException, e: + except SessionException, e: self.assertEquals(541, e.args[0].error_code) + +class AutodeleteTests(TestHelper, StandardExchangeVerifier): + def checkNotExists(self, e): + try: + s = self.conn.session("verifier") + s.exchange_declare(exchange=e, passive=True) + s.exchange_delete(exchange=e) + self.fail("Expected failure for passive declare of %s" % e) + except SessionException, e: + self.assertEquals(404, e.args[0].error_code) + + + def testAutodeleteFanout(self): + self.session.exchange_declare(exchange="e", type="fanout", auto_delete=True) + self.verifyFanOutExchange("e", unbind=True) + self.checkNotExists("e"); + + def testAutodeleteDirect(self): + self.session.exchange_declare(exchange="e", type="direct", auto_delete=True) + self.verifyDirectExchange("e", unbind=True) + self.checkNotExists("e"); + + def testAutodeleteTopic(self): + self.session.exchange_declare(exchange="e", type="topic", auto_delete=True) + self.verifyTopicExchange("e", unbind=True) + self.checkNotExists("e"); + + def testAutodeleteHeaders(self): + self.session.exchange_declare(exchange="e", type="headers", auto_delete=True) + self.verifyHeadersExchange("e", unbind=True) + self.checkNotExists("e"); |
