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]

Reply via email to