summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2014-07-24 13:48:30 +0000
committerGordon Sim <gsim@apache.org>2014-07-24 13:48:30 +0000
commit411991ff17bb52f2887f9b78350683c939b3394a (patch)
treedda69feccf6e52dd730e4fecd9b7665fd5df1ee7
parentac1142c3e7a3e07f13c256c0038dc044ad594b0c (diff)
downloadqpid-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.py7
-rw-r--r--qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py31
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