You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by mg...@apache.org on 2018/03/28 14:19:00 UTC
[2/2] qpid-dispatch git commit: DISPATCH-947 : de-Messenger first 9
Messenger tests.
DISPATCH-947 : de-Messenger first 9 Messenger tests.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/a5da7488
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/a5da7488
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/a5da7488
Branch: refs/heads/master
Commit: a5da7488b1a6d22293dedd2ddbf9728d42322f6f
Parents: 968d0fd
Author: mgoulish <mg...@redhat.com>
Authored: Wed Mar 28 10:13:08 2018 -0400
Committer: mgoulish <mg...@redhat.com>
Committed: Wed Mar 28 10:13:08 2018 -0400
----------------------------------------------------------------------
tests/system_tests_one_router.py | 591 +++++++++++++++++++++++++++++++++-
1 file changed, 576 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a5da7488/tests/system_tests_one_router.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_one_router.py b/tests/system_tests_one_router.py
index c75c2fc..f27a8d6 100644
--- a/tests/system_tests_one_router.py
+++ b/tests/system_tests_one_router.py
@@ -161,67 +161,628 @@ class OneRouterTest(TestCase):
# This test will test the stripAnnotations = no option - meaning no annotations must be stripped.
# We will send in a custom annotation and make that we get back 3 annotations on the received message
def test_10_strip_message_annotations_custom(self):
- pass
+ addr = self.router.addresses[1]+"/strip_message_annotations_no_custom/1"
+
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ ingress_message = Message()
+ ingress_message.address = addr
+ ingress_message.body = {'message': 'Hello World!'}
+ ingress_message_annotations = {}
+ ingress_message_annotations['custom-annotation'] = '1/Custom_Annotation'
+
+ ingress_message.annotations = ingress_message_annotations
+
+ M1.put(ingress_message)
+ M1.send()
+
+ # Receive the message
+ M2.recv(1)
+ egress_message = Message()
+ M2.get(egress_message)
+
+ # Make sure 'Hello World!' is in the message body dict
+ self.assertEqual('Hello World!', egress_message.body['message'])
+
+ egress_message_annotations = egress_message.annotations
+
+ self.assertEqual(egress_message_annotations.__class__, dict)
+ self.assertEqual(egress_message_annotations['custom-annotation'], '1/Custom_Annotation')
+ self.assertEqual(egress_message_annotations['x-opt-qd.ingress'], '0/QDR')
+ self.assertEqual(egress_message_annotations['x-opt-qd.trace'], ['0/QDR'])
+
+ M1.stop()
+ M2.stop()
+
# stripAnnotations property is set to "no"
def test_11_test_strip_message_annotations_no(self):
- pass
+ addr = self.router.addresses[1]+"/strip_message_annotations_no/1"
+
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ ingress_message = Message()
+ ingress_message.address = addr
+ ingress_message.body = {'message': 'Hello World!'}
+ ingress_message_annotations = {}
+
+ ingress_message.annotations = ingress_message_annotations
+
+ M1.put(ingress_message)
+ M1.send()
+
+ # Receive the message
+ M2.recv(1)
+ egress_message = Message()
+ M2.get(egress_message)
+
+ #Make sure 'Hello World!' is in the message body dict
+ self.assertEqual('Hello World!', egress_message.body['message'])
+
+ egress_message_annotations = egress_message.annotations
+
+ self.assertEqual(egress_message_annotations.__class__, dict)
+ self.assertEqual(egress_message_annotations['x-opt-qd.ingress'], '0/QDR')
+ self.assertEqual(egress_message_annotations['x-opt-qd.trace'], ['0/QDR'])
+
+ M1.stop()
+ M2.stop()
+
# stripAnnotations property is set to "no"
def test_12_test_strip_message_annotations_no_add_trace(self):
- pass
+ addr = self.router.addresses[1]+"/strip_message_annotations_no_add_trace/1"
+
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ ingress_message = Message()
+ ingress_message.address = addr
+ ingress_message.body = {'message': 'Hello World!'}
+
+ #
+ # Pre-existing ingress and trace
+ #
+ ingress_message_annotations = {'x-opt-qd.ingress': 'ingress-router',
+ 'x-opt-qd.trace': ['0/QDR.1'],
+ 'work': 'hard'}
+ ingress_message.annotations = ingress_message_annotations
+
+ M1.put(ingress_message)
+ M1.send()
+
+ # Receive the message
+ M2.recv(1)
+ egress_message = Message()
+ M2.get(egress_message)
+
+ # Make sure 'Hello World!' is in the message body dict
+ self.assertEqual('Hello World!', egress_message.body['message'])
+
+ egress_message_annotations = egress_message.annotations
+
+ self.assertEqual(egress_message_annotations.__class__, dict)
+ self.assertEqual(egress_message_annotations['x-opt-qd.ingress'], 'ingress-router')
+ # Make sure the user defined annotation also makes it out.
+ self.assertEqual(egress_message_annotations['work'], 'hard')
+ self.assertEqual(egress_message_annotations['x-opt-qd.trace'], ['0/QDR.1', '0/QDR'])
+
+ M1.stop()
+ M2.stop()
+
# Dont send any pre-existing ingress or trace annotations. Make sure that there are no outgoing message annotations
# stripAnnotations property is set to "both"
def test_13_test_strip_message_annotations_both(self):
- pass
+ addr = self.router.addresses[2]+"/strip_message_annotations_both/1"
+
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ ingress_message = Message()
+ ingress_message.address = addr
+ ingress_message.body = {'message': 'Hello World!'}
+
+ #Put and send the message
+ M1.put(ingress_message)
+ M1.send()
+
+ # Receive the message
+ M2.recv(1)
+ egress_message = Message()
+ M2.get(egress_message)
+
+ self.assertEqual(egress_message.annotations, None)
+
+ M1.stop()
+ M2.stop()
+
# Dont send any pre-existing ingress or trace annotations. Send in a custom annotation.
# Make sure that the custom annotation comes out and nothing else.
# stripAnnotations property is set to "both"
def test_14_test_strip_message_annotations_both_custom(self):
- pass
+ addr = self.router.addresses[2]+"/strip_message_annotations_both/1"
+
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ ingress_message = Message()
+ ingress_message.address = addr
+ ingress_message.body = {'message': 'Hello World!'}
+
+ # Only annotations with prefix "x-opt-qd." will be stripped
+ ingress_message_annotations = {'stay': 'humble', 'x-opt-qd': 'work'}
+ ingress_message.annotations = ingress_message_annotations
+
+ #Put and send the message
+ M1.put(ingress_message)
+ M1.send()
+
+ # Receive the message
+ M2.recv(1)
+ egress_message = Message()
+ M2.get(egress_message)
+
+ self.assertEqual(egress_message.annotations, ingress_message_annotations)
+
+ M1.stop()
+ M2.stop()
+
#Dont send any pre-existing ingress or trace annotations. Make sure that there are no outgoing message annotations
#stripAnnotations property is set to "out"
def test_15_test_strip_message_annotations_out(self):
- pass
+ addr = self.router.addresses[3]+"/strip_message_annotations_out/1"
+
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ ingress_message = Message()
+ ingress_message.address = addr
+ ingress_message.body = {'message': 'Hello World!'}
+
+ #Put and send the message
+ M1.put(ingress_message)
+ M1.send()
+
+ # Receive the message
+ M2.recv(1)
+ egress_message = Message()
+ M2.get(egress_message)
+
+ self.assertEqual(egress_message.annotations, None)
+
+ M1.stop()
+ M2.stop()
+
#Send in pre-existing trace and ingress and annotations and make sure that they are not in the outgoing annotations.
#stripAnnotations property is set to "in"
def test_16_test_strip_message_annotations_in(self):
- pass
+ addr = self.router.addresses[4]+"/strip_message_annotations_in/1"
+
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ ingress_message = Message()
+ ingress_message.address = addr
+ ingress_message.body = {'message': 'Hello World!'}
+
+ ##
+ ## Pre-existing ingress and trace
+ ##
+ ingress_message_annotations = {'x-opt-qd.ingress': 'ingress-router', 'x-opt-qd.trace': ['0/QDR.1']}
+ ingress_message.annotations = ingress_message_annotations
+
+ #Put and send the message
+ M1.put(ingress_message)
+ M1.send()
+
+ # Receive the message
+ M2.recv(1)
+ egress_message = Message()
+ M2.get(egress_message)
+
+ #Make sure 'Hello World!' is in the message body dict
+ self.assertEqual('Hello World!', egress_message.body['message'])
+
+ egress_message_annotations = egress_message.annotations
+
+ self.assertEqual(egress_message_annotations.__class__, dict)
+ self.assertEqual(egress_message_annotations['x-opt-qd.ingress'], '0/QDR')
+ self.assertEqual(egress_message_annotations['x-opt-qd.trace'], ['0/QDR'])
+
+ M1.stop()
+ M2.stop()
+
def test_17_management(self):
- pass
+ addr = "amqp:/$management"
+
+ M = self.messenger()
+ M.start()
+ M.route("amqp:/*", self.address+"/$1")
+ sub = M.subscribe("amqp:/#")
+ reply = sub.address
+
+ request = Message()
+ response = Message()
+
+ request.address = addr
+ request.reply_to = reply
+ request.correlation_id = "C1"
+ request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'}
+
+ M.put(request)
+ M.send()
+ M.recv()
+ M.get(response)
+
+ assert response.properties['statusCode'] == 200, response.properties['statusCode']
+ self.assertEqual(response.correlation_id, "C1")
+ self.assertEqual(response.body, [])
+
+ request.address = addr
+ request.reply_to = reply
+ request.correlation_id = 135
+ request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'}
+
+ M.put(request)
+ M.send()
+ M.recv()
+ M.get(response)
+
+ self.assertEqual(response.properties['statusCode'], 200)
+ self.assertEqual(response.correlation_id, 135)
+ self.assertEqual(response.body, [])
+
+ request.address = addr
+ request.reply_to = reply
+ request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'}
+
+ M.put(request)
+ M.send()
+ M.recv()
+ M.get(response)
+
+ self.assertEqual(response.properties['statusCode'], 200)
+ self.assertEqual(response.body, [])
+
+ M.stop()
+
def test_18_management_no_reply(self):
- pass
+ addr = "amqp:/$management"
+
+ M = self.messenger()
+ M.start()
+ M.route("amqp:/*", self.address+"/$1")
+
+ request = Message()
+
+ request.address = addr
+ request.correlation_id = "C1"
+ request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'}
+
+ M.put(request)
+ M.send()
+
+ M.put(request)
+ M.send()
+
+ M.stop()
+
def test_19_management_get_operations(self):
- pass
+ addr = "amqp:/_local/$management"
+
+ M = self.messenger()
+ M.start()
+ M.route("amqp:/*", self.address+"/$1")
+ sub = M.subscribe("amqp:/#")
+ reply = sub.address
+
+ request = Message()
+ response = Message()
+
+ ##
+ ## Unrestricted request
+ ##
+ request.address = addr
+ request.reply_to = reply
+ request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-OPERATIONS'}
+
+ M.put(request)
+ M.send()
+ M.recv()
+ M.get(response)
+
+ self.assertEqual(response.properties['statusCode'], 200)
+ self.assertEqual(response.body.__class__, dict)
+ self.assertTrue('org.apache.qpid.dispatch.router' in response.body.keys())
+ self.assertTrue(len(response.body.keys()) > 2)
+ self.assertTrue(response.body['org.apache.qpid.dispatch.router'].__class__, list)
+
+ M.stop()
+
def test_20_management_not_implemented(self):
- pass
+ addr = "amqp:/$management"
+
+ M = self.messenger()
+ M.start()
+ M.route("amqp:/*", self.address+"/$1")
+ sub = M.subscribe("amqp:/#")
+ reply = sub.address
+
+ request = Message()
+ response = Message()
+
+ ##
+ ## Request with an invalid operation
+ ##
+ request.address = addr
+ request.reply_to = reply
+ request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'NOT-IMPL'}
+
+ M.put(request)
+ M.send()
+ M.recv()
+ M.get(response)
+
+ self.assertEqual(response.properties['statusCode'], 501)
+
+ M.stop()
+
+
+
def test_21_semantics_multicast(self):
- pass
+ addr = self.address+"/multicast.10"
+ M1 = self.messenger()
+ M2 = self.messenger()
+ M3 = self.messenger()
+ M4 = self.messenger()
+
+
+ M1.start()
+ M2.start()
+ M3.start()
+ M4.start()
+
+ M2.subscribe(addr)
+ M3.subscribe(addr)
+ M4.subscribe(addr)
+
+ tm = Message()
+ rm = Message()
+
+ tm.address = addr
+ for i in range(100):
+ tm.body = {'number': i}
+ M1.put(tm)
+ M1.send()
+
+ for i in range(100):
+ M2.recv(1)
+ M2.get(rm)
+ self.assertEqual(i, rm.body['number'])
+
+ M3.recv(1)
+ M3.get(rm)
+ self.assertEqual(i, rm.body['number'])
+
+ M4.recv(1)
+ M4.get(rm)
+ self.assertEqual(i, rm.body['number'])
+
+ M1.stop()
+ M2.stop()
+ M3.stop()
+ M4.stop()
+
def test_22_semantics_closest(self):
- pass
+ addr = self.address+"/closest.1"
+ M1 = self.messenger()
+ M2 = self.messenger()
+ M3 = self.messenger()
+ M4 = self.messenger()
+
+
+ M1.start()
+ M2.start()
+ M3.start()
+ M4.start()
+
+ M2.subscribe(addr)
+ M3.subscribe(addr)
+ M4.subscribe(addr)
+
+ tm = Message()
+ rm = Message()
+
+ tm.address = addr
+ for i in range(30):
+ tm.body = {'number': i}
+ M1.put(tm)
+ M1.send()
+
+ i = 0
+ rx_set = []
+ for i in range(10):
+ M2.recv(1)
+ M2.get(rm)
+ rx_set.append(rm.body['number'])
+
+ M3.recv(1)
+ M3.get(rm)
+ rx_set.append(rm.body['number'])
+
+ M4.recv(1)
+ M4.get(rm)
+ rx_set.append(rm.body['number'])
+
+ self.assertEqual(30, len(rx_set))
+ rx_set.sort()
+ for i in range(30):
+ self.assertEqual(i, rx_set[i])
+
+ M1.stop()
+ M2.stop()
+ M3.stop()
+ M4.stop()
+
def test_23_semantics_spread(self):
- pass
+ addr = self.address+"/spread.1"
+ M1 = self.messenger()
+ M2 = self.messenger()
+ M3 = self.messenger()
+ M4 = self.messenger()
+
+ M2.timeout = 0.1
+ M3.timeout = 0.1
+ M4.timeout = 0.1
+
+ M1.start()
+ M2.start()
+ M3.start()
+ M4.start()
+
+ M2.subscribe(addr)
+ M3.subscribe(addr)
+ M4.subscribe(addr)
+
+ tm = Message()
+ rm = Message()
+
+ tm.address = addr
+ for i in range(30):
+ tm.body = {'number': i}
+ M1.put(tm)
+ M1.send()
+
+ i = 0
+ rx_set = []
+ ca = 0
+ cb = 0
+ cc = 0
+
+ while len(rx_set) < 30:
+ try:
+ M2.recv(1)
+ M2.get(rm)
+ rx_set.append(rm.body['number'])
+ ca += 1
+ except:
+ pass
+
+ try:
+ M3.recv(1)
+ M3.get(rm)
+ rx_set.append(rm.body['number'])
+ cb += 1
+ except:
+ pass
+
+ try:
+ M4.recv(1)
+ M4.get(rm)
+ rx_set.append(rm.body['number'])
+ cc += 1
+ except:
+ pass
+
+ self.assertEqual(30, len(rx_set))
+ self.assertTrue(ca > 0)
+ self.assertTrue(cb > 0)
+ self.assertTrue(cc > 0)
+
+ rx_set.sort()
+ for i in range(30):
+ self.assertEqual(i, rx_set[i])
+
+ M1.stop()
+ M2.stop()
+ M3.stop()
+ M4.stop()
+
+
+
def test_24_to_override(self):
- pass
+ addr = self.address+"/toov/1"
+ M1 = self.messenger()
+ M2 = self.messenger()
+
+ M1.start()
+ M2.start()
+ M2.subscribe(addr)
+
+ tm = Message()
+ rm = Message()
+
+ tm.address = addr
+
+ ##
+ ## Pre-existing TO
+ ##
+ tm.annotations = {'x-opt-qd.to': 'toov/1'}
+ 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'])
+ ma = rm.annotations
+ self.assertEqual(ma.__class__, dict)
+ self.assertEqual(ma['x-opt-qd.to'], 'toov/1')
+
+ M1.stop()
+ M2.stop()
+
def test_25_send_settle_mode_settled(self):
"""
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org