summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2013-09-05 21:46:14 +0000
committerTed Ross <tross@apache.org>2013-09-05 21:46:14 +0000
commit3b6c1b687d371e036f41419cbb51a5127c1ffded (patch)
tree3119c3578a102e9e8da759c0c09ed49419126ee1
parentf57e0169b389ce053e23c3ae75606b1220411926 (diff)
downloadqpid-python-3b6c1b687d371e036f41419cbb51a5127c1ffded.tar.gz
QPID-5068 - Beefed up the the annotation test and fixed an additional exposed bug.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1520435 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/extras/dispatch/src/router_node.c11
-rw-r--r--qpid/extras/dispatch/tests/system_tests_one_router.py63
2 files changed, 68 insertions, 6 deletions
diff --git a/qpid/extras/dispatch/src/router_node.c b/qpid/extras/dispatch/src/router_node.c
index 27b5c515a1..d2704c4bd5 100644
--- a/qpid/extras/dispatch/src/router_node.c
+++ b/qpid/extras/dispatch/src/router_node.c
@@ -286,12 +286,15 @@ static void router_annotate_message(dx_router_t *router, dx_message_t *msg)
}
//
- // If there is no ingress field, annotate the ingress as this router
+ // If there is no ingress field, annotate the ingress as this router else
+ // keep the original field.
//
- if (!ingress) {
- dx_compose_insert_string(out_da, "qdx.ingress");
+ dx_compose_insert_string(out_da, "qdx.ingress");
+ if (ingress && dx_parse_is_scalar(ingress)) {
+ dx_field_iterator_t *iter = dx_parse_raw(ingress);
+ dx_compose_insert_string_iterator(out_da, iter);
+ } else
dx_compose_insert_string(out_da, router->router_id);
- }
dx_compose_end_map(out_da);
diff --git a/qpid/extras/dispatch/tests/system_tests_one_router.py b/qpid/extras/dispatch/tests/system_tests_one_router.py
index ee9b8a2472..a952195785 100644
--- a/qpid/extras/dispatch/tests/system_tests_one_router.py
+++ b/qpid/extras/dispatch/tests/system_tests_one_router.py
@@ -275,8 +275,65 @@ class RouterTest(unittest.TestCase):
rm = Message()
tm.address = addr
- tm.instructions = {'qdx.trace' : []}
+
+ ##
+ ## No inbound delivery annotations
+ ##
+ for i in range(10):
+ tm.body = {'number': i}
+ M1.put(tm)
+ M1.send()
+
+ for i in range(10):
+ M2.recv(1)
+ M2.get(rm)
+ self.assertEqual(i, rm.body['number'])
+ da = rm.instructions
+ self.assertEqual(da.__class__, dict)
+ self.assertEqual(da['qdx.ingress'], 'Qpid.Dispatch.Router.A')
+ self.assertFalse('qdx.trace' in da)
+
+ ##
+ ## Pre-existing ingress
+ ##
+ tm.instructions = {'qdx.ingress': 'ingress-router'}
+ for i in range(10):
+ tm.body = {'number': i}
+ M1.put(tm)
+ M1.send()
+
+ for i in range(10):
+ M2.recv(1)
+ M2.get(rm)
+ self.assertEqual(i, rm.body['number'])
+ da = rm.instructions
+ self.assertEqual(da.__class__, dict)
+ self.assertEqual(da['qdx.ingress'], 'ingress-router')
+ self.assertFalse('qdx.trace' in da)
+
+ ##
+ ## Invalid trace type
+ ##
+ tm.instructions = {'qdx.trace' : 45}
+ for i in range(10):
+ tm.body = {'number': i}
+ M1.put(tm)
+ M1.send()
+
+ for i in range(10):
+ M2.recv(1)
+ M2.get(rm)
+ self.assertEqual(i, rm.body['number'])
+ da = rm.instructions
+ self.assertEqual(da.__class__, dict)
+ self.assertEqual(da['qdx.ingress'], 'Qpid.Dispatch.Router.A')
+ self.assertFalse('qdx.trace' in da)
+
+ ##
+ ## Empty trace
+ ##
+ tm.instructions = {'qdx.trace' : []}
for i in range(10):
tm.body = {'number': i}
M1.put(tm)
@@ -291,8 +348,10 @@ class RouterTest(unittest.TestCase):
self.assertEqual(da['qdx.ingress'], 'Qpid.Dispatch.Router.A')
self.assertEqual(da['qdx.trace'], ['Qpid.Dispatch.Router.A'])
+ ##
+ ## Non-empty trace
+ ##
tm.instructions = {'qdx.trace' : ['first.hop']}
-
for i in range(10):
tm.body = {'number': i}
M1.put(tm)