diff options
| author | Gordon Sim <gsim@apache.org> | 2014-07-24 13:48:30 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2014-07-24 13:48:30 +0000 |
| commit | 411991ff17bb52f2887f9b78350683c939b3394a (patch) | |
| tree | dda69feccf6e52dd730e4fecd9b7665fd5df1ee7 | |
| parent | ac1142c3e7a3e07f13c256c0038dc044ad594b0c (diff) | |
| download | qpid-python-411991ff17bb52f2887f9b78350683c939b3394a.tar.gz | |
QPID-5923: check requested node type when handling delete
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1613130 13f79535-47bb-0310-9956-ffa450edef68
| -rw-r--r-- | qpid/python/qpid/messaging/driver.py | 7 | ||||
| -rw-r--r-- | qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py | 31 |
2 files changed, 34 insertions, 4 deletions
diff --git a/qpid/python/qpid/messaging/driver.py b/qpid/python/qpid/messaging/driver.py index 3487e4b4ba..2ade144687 100644 --- a/qpid/python/qpid/messaging/driver.py +++ b/qpid/python/qpid/messaging/driver.py @@ -936,7 +936,8 @@ class Engine: lnk.closed = True if _lnk.options.get("delete") in ("always", dir.DIR_NAME): dir.do_unlink(sst, lnk, _lnk) - self.delete(sst, _lnk.name, unlinked) + requested_type = _lnk.options.get("node", {}).get("type") + self.delete(sst, _lnk.name, unlinked, node_type=requested_type) else: dir.do_unlink(sst, lnk, _lnk, unlinked) _lnk.closing = True @@ -1078,7 +1079,7 @@ class Engine: sst.write_cmds(cmds, declared) - def delete(self, sst, name, action): + def delete(self, sst, name, action, node_type=None): def deleted(): del self.address_cache[name] action() @@ -1092,7 +1093,7 @@ class Engine: action() else: raise ValueError(type) - self.resolve(sst, name, do_delete, force=True) + self.resolve(sst, name, do_delete, force=True, node_type=node_type) def process(self, ssn): if ssn.closed or ssn.closing: return diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py b/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py index fa7a5be0ba..4625733e30 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py +++ b/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py @@ -197,7 +197,7 @@ class GeneralTests(Base): def test_node_disambiguation(self): agent = BrokerAgent(self.conn) agent.addExchange("fanout", "ambiguous") - queue = agent.addQueue("ambiguous") + agent.addQueue("ambiguous") try: r1 = self.ssn.receiver("ambiguous; {node:{type:topic}}") r2 = self.ssn.receiver("ambiguous; {node:{type:queue}}") @@ -236,6 +236,35 @@ class GeneralTests(Base): if exchange: agent.delExchange("ambiguous") if queue: agent.delQueue("ambiguous", False, False) + def test_ambiguous_delete_1(self): + agent = BrokerAgent(self.conn) + agent.addExchange("fanout", "ambiguous") + agent.addQueue("ambiguous") + self.ssn.receiver("ambiguous; {delete:receiver, node:{type:topic}}").close() + exchange = agent.getExchange("ambiguous") + queue = agent.getQueue("ambiguous") + try: + assert(not exchange) + assert(queue) + finally: + if exchange: agent.delExchange("ambiguous") + if queue: agent.delQueue("ambiguous", False, False) + + def test_ambiguous_delete_2(self): + agent = BrokerAgent(self.conn) + agent.addExchange("fanout", "ambiguous") + agent.addQueue("ambiguous") + self.ssn.receiver("ambiguous; {delete:receiver, node:{type:queue}}").close() + exchange = agent.getExchange("ambiguous") + queue = agent.getQueue("ambiguous") + try: + assert(exchange) + assert(not queue) + finally: + if exchange: agent.delExchange("ambiguous") + if queue: agent.delQueue("ambiguous", False, False) + + class SequenceNumberTests(Base): """ Tests of ring queue sequence number |
