diff options
author | Gordon Sim <gsim@apache.org> | 2011-03-07 17:36:35 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2011-03-07 17:36:35 +0000 |
commit | 0b9bcff68ba68327a637279cb26b900dd9377c01 (patch) | |
tree | 2ae8defe3cd8a3834c89b1bcd2ff9ca069f1974b | |
parent | d927b9bfb2b7507c34303cecd3535e9306e93d0f (diff) | |
download | qpid-python-0b9bcff68ba68327a637279cb26b900dd9377c01.tar.gz |
QPID-3120: Merged fix and test from trunk.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.10@1078861 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/src/qpid/broker/Queue.cpp | 3 | ||||
-rw-r--r-- | qpid/tests/src/py/qpid_tests/broker_0_10/management.py | 35 |
2 files changed, 35 insertions, 3 deletions
diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp index 29b3c0d585..02ec67f839 100644 --- a/qpid/cpp/src/qpid/broker/Queue.cpp +++ b/qpid/cpp/src/qpid/broker/Queue.cpp @@ -484,8 +484,7 @@ uint32_t Queue::purge(const uint32_t purge_request, boost::shared_ptr<Exchange> while (!rerouteQueue.empty()) { DeliverableMessage msg(rerouteQueue.front()); rerouteQueue.pop_front(); - dest->route(msg, msg.getMessage().getRoutingKey(), - msg.getMessage().getApplicationHeaders()); + dest->routeWithAlternate(msg); } return count; diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/management.py b/qpid/tests/src/py/qpid_tests/broker_0_10/management.py index b0d7ca5f52..952878e0b7 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/management.py +++ b/qpid/tests/src/py/qpid_tests/broker_0_10/management.py @@ -341,7 +341,40 @@ class ManagementTest (TestBase010): self.assertEqual(result.status, 0) pq.update() self.assertEqual(pq.msgDepth,20) - + + def test_reroute_alternate_exchange(self): + """ + Test that when rerouting, the alternate-exchange is considered if relevant + """ + self.startQmf() + session = self.session + # 1. Create 2 exchanges A and B (fanout) where B is the + # alternate exchange for A + session.exchange_declare(exchange="B", type="fanout") + session.exchange_declare(exchange="A", type="fanout", alternate_exchange="B") + + # 2. Bind queue X to B + session.queue_declare(queue="X", exclusive=True, auto_delete=True) + session.exchange_bind(queue="X", exchange="B") + + # 3. Send 1 message to queue Y + session.queue_declare(queue="Y", exclusive=True, auto_delete=True) + props = session.delivery_properties(routing_key="Y") + session.message_transfer(message=Message(props, "reroute me!")) + + # 4. Call reroute on queue Y and specify that messages should + # be sent to exchange A + y = self.qmf.getObjects(_class="queue", name="Y")[0] + result = y.reroute(1, False, "A") + self.assertEqual(result.status, 0) + + # 5. verify that the message is rerouted through B (as A has + # no matching bindings) to X + self.subscribe(destination="x", queue="X") + self.assertEqual("reroute me!", session.incoming("x").get(timeout=1).body) + + # Cleanup + for e in ["A", "B"]: session.exchange_delete(exchange=e) def test_methods_async (self): """ |