Author: gsim
Date: Thu Jul 24 13:48:22 2014
New Revision: 1613129
URL: http://svn.apache.org/r1613129
Log:
QPID-5921: add missing clause to resolution logic for when only exchange exists
but queue create was requested
Modified:
qpid/trunk/qpid/python/qpid/messaging/driver.py
qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py
Modified: qpid/trunk/qpid/python/qpid/messaging/driver.py
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/messaging/driver.py?rev=1613129&r1=1613128&r2=1613129&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/messaging/driver.py (original)
+++ qpid/trunk/qpid/python/qpid/messaging/driver.py Thu Jul 24 13:48:22 2014
@@ -1028,6 +1028,11 @@ class Engine:
type, subtype = None, None
else:
type, subtype = "queue", None
+ elif not er.not_found:
+ if node_type == "queue" and force:
+ type, subtype = None, None
+ else:
+ type, subtype = "topic", er.type
else:
type, subtype = "topic", er.type
if type is not None:
Modified: qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py?rev=1613129&r1=1613128&r2=1613129&view=diff
==============================================================================
--- qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py (original)
+++ qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py Thu Jul 24
13:48:22 2014
@@ -19,6 +19,7 @@
from qpid.tests.messaging.implementation import *
from qpid.tests.messaging import Base
+from qpidtoollibs import BrokerAgent
from time import sleep
#
@@ -177,6 +178,63 @@ class GeneralTests(Base):
except Empty: pass
self.assertEqual(received, ["a", "c"])
+ def _node_disambiguation_test(self, e, q):
+ s1 = self.ssn.sender("ambiguous; {node:{type:topic}}");
+ s2 = self.ssn.sender("ambiguous; {node:{type:queue}}");
+ s3 = self.ssn.sender("ambiguous");
+ s1.send(Message("a"))
+ s2.send(Message("b"))
+ s3.send(Message("c"))
+ self.assertEqual(e.fetch().content, "a")
+ self.assertEqual(q.fetch().content, "b")
+ self.assertEqual(q.fetch().content, "c")
+ for r in [e, q]:
+ try:
+ m = r.fetch(timeout=0)
+ self.fail("Found unexpected message %s")
+ except Empty: pass
+
+ def test_node_disambiguation(self):
+ agent = BrokerAgent(self.conn)
+ agent.addExchange("fanout", "ambiguous")
+ queue = agent.addQueue("ambiguous")
+ try:
+ r1 = self.ssn.receiver("ambiguous; {node:{type:topic}}")
+ r2 = self.ssn.receiver("ambiguous; {node:{type:queue}}")
+ self._node_disambiguation_test(r1, r2)
+ finally:
+ agent.delExchange("ambiguous")
+ agent.delQueue("ambiguous", False, False)
+
+ def test_ambiguous_create_1(self):
+ #create queue first, then exchange
+ r1 = self.ssn.receiver("ambiguous; {create:receiver,
node:{type:queue}}")
+ r2 = self.ssn.receiver("ambiguous; {create:receiver,
node:{type:topic}}")
+ agent = BrokerAgent(self.conn)
+ exchange = agent.getExchange("ambiguous")
+ queue = agent.getQueue("ambiguous")
+ try:
+ assert(exchange)
+ assert(queue)
+ self._node_disambiguation_test(r2, r1)
+ finally:
+ if exchange: agent.delExchange("ambiguous")
+ if queue: agent.delQueue("ambiguous", False, False)
+
+ def test_ambiguous_create_2(self):
+ #create exchange first, then queue
+ r1 = self.ssn.receiver("ambiguous; {create:receiver,
node:{type:topic}}")
+ r2 = self.ssn.receiver("ambiguous; {create:receiver,
node:{type:queue}}")
+ agent = BrokerAgent(self.conn)
+ exchange = agent.getExchange("ambiguous")
+ queue = agent.getQueue("ambiguous")
+ try:
+ assert(exchange)
+ assert(queue)
+ self._node_disambiguation_test(r1, r2)
+ finally:
+ if exchange: agent.delExchange("ambiguous")
+ if queue: agent.delQueue("ambiguous", False, False)
class SequenceNumberTests(Base):
"""
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]