Repository: qpid-dispatch Updated Branches: refs/heads/master 2a7745df9 -> a44289be5
NO-JIRA - Remove all sleeps from the multi-tenant 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/a44289be Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/a44289be Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/a44289be Branch: refs/heads/master Commit: a44289be587bf553e5342b929be94ceb77347f6b Parents: 2a7745d Author: Ted Ross <[email protected]> Authored: Fri Jan 20 17:06:31 2017 -0500 Committer: Ted Ross <[email protected]> Committed: Fri Jan 20 17:06:31 2017 -0500 ---------------------------------------------------------------------- tests/system_tests_multi_tenancy.py | 361 +++++++++++++++++++++---------- 1 file changed, 247 insertions(+), 114 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a44289be/tests/system_tests_multi_tenancy.py ---------------------------------------------------------------------- diff --git a/tests/system_tests_multi_tenancy.py b/tests/system_tests_multi_tenancy.py index 309bedf..ba01a34 100644 --- a/tests/system_tests_multi_tenancy.py +++ b/tests/system_tests_multi_tenancy.py @@ -23,7 +23,6 @@ from proton import Message, PENDING, ACCEPTED, REJECTED, RELEASED, SSLDomain, SS from system_test import TestCase, Qdrouterd, main_module, DIR, TIMEOUT, Process from proton.handlers import MessagingHandler from proton.reactor import Container, DynamicNodeProperties -import time # PROTON-828: try: @@ -163,97 +162,89 @@ class RouterTest(TestCase): def test_09_one_router_anonymous_sender_no_tenant(self): - test = MessageTransferTest(self.routers[0].addresses[0], - self.routers[0].addresses[0], - "anything/addr_09", - "anything/addr_09", - self.routers[0].addresses[0], - "M0anything/addr_09", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[0], + self.routers[0].addresses[0], + "anything/addr_09", + "anything/addr_09", + self.routers[0].addresses[0], + "M0anything/addr_09") test.run() self.assertEqual(None, test.error) def test_10_one_router_anonymous_sender_tenant_on_sender(self): - test = MessageTransferTest(self.routers[0].addresses[1], - self.routers[0].addresses[0], - "addr_10", - "0.0.0.0/addr_10", - self.routers[0].addresses[0], - "M00.0.0.0/addr_10", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[1], + self.routers[0].addresses[0], + "addr_10", + "0.0.0.0/addr_10", + self.routers[0].addresses[0], + "M00.0.0.0/addr_10") test.run() self.assertEqual(None, test.error) def test_11_one_router_anonymous_sender_tenant_on_receiver(self): - test = MessageTransferTest(self.routers[0].addresses[0], - self.routers[0].addresses[1], - "0.0.0.0/addr_11", - "addr_11", - self.routers[0].addresses[0], - "M00.0.0.0/addr_11", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[0], + self.routers[0].addresses[1], + "0.0.0.0/addr_11", + "addr_11", + self.routers[0].addresses[0], + "M00.0.0.0/addr_11") test.run() self.assertEqual(None, test.error) def test_12_one_router_anonymous_sender_tenant_on_both(self): - test = MessageTransferTest(self.routers[0].addresses[1], - self.routers[0].addresses[1], - "addr_12", - "addr_12", - self.routers[0].addresses[0], - "M00.0.0.0/addr_12", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[1], + self.routers[0].addresses[1], + "addr_12", + "addr_12", + self.routers[0].addresses[0], + "M00.0.0.0/addr_12") test.run() self.assertEqual(None, test.error) def test_13_two_router_anonymous_sender_no_tenant(self): - test = MessageTransferTest(self.routers[0].addresses[0], - self.routers[1].addresses[0], - "anything/addr_13", - "anything/addr_13", - self.routers[0].addresses[0], - "M0anything/addr_13", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[0], + self.routers[1].addresses[0], + "anything/addr_13", + "anything/addr_13", + self.routers[0].addresses[0], + "M0anything/addr_13") test.run() self.assertEqual(None, test.error) def test_14_two_router_anonymous_sender_tenant_on_sender(self): - test = MessageTransferTest(self.routers[0].addresses[1], - self.routers[1].addresses[0], - "addr_14", - "0.0.0.0/addr_14", - self.routers[0].addresses[0], - "M00.0.0.0/addr_14", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[1], + self.routers[1].addresses[0], + "addr_14", + "0.0.0.0/addr_14", + self.routers[0].addresses[0], + "M00.0.0.0/addr_14") test.run() self.assertEqual(None, test.error) def test_15_two_router_anonymous_sender_tenant_on_receiver(self): - test = MessageTransferTest(self.routers[0].addresses[0], - self.routers[1].addresses[1], - "0.0.0.0/addr_15", - "addr_15", - self.routers[0].addresses[0], - "M00.0.0.0/addr_15", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[0], + self.routers[1].addresses[1], + "0.0.0.0/addr_15", + "addr_15", + self.routers[0].addresses[0], + "M00.0.0.0/addr_15") test.run() self.assertEqual(None, test.error) def test_16_two_router_anonymous_sender_tenant_on_both(self): - test = MessageTransferTest(self.routers[0].addresses[1], - self.routers[1].addresses[1], - "addr_16", - "addr_16", - self.routers[0].addresses[0], - "M00.0.0.0/addr_16", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[1], + self.routers[1].addresses[1], + "addr_16", + "addr_16", + self.routers[0].addresses[0], + "M00.0.0.0/addr_16") test.run() self.assertEqual(None, test.error) @@ -263,7 +254,8 @@ class RouterTest(TestCase): self.routers[0].addresses[2], "link.addr_17", "0.0.0.0/link.addr_17", - False) + False, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) @@ -273,7 +265,8 @@ class RouterTest(TestCase): self.routers[0].addresses[2], "0.0.0.0/link.addr_18", "0.0.0.0/link.addr_18", - False) + False, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) @@ -283,7 +276,8 @@ class RouterTest(TestCase): self.routers[0].addresses[2], "link.addr_19", "0.0.0.0/link.addr_19", - True) + True, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) @@ -293,7 +287,8 @@ class RouterTest(TestCase): self.routers[0].addresses[2], "0.0.0.0/link.addr_20", "0.0.0.0/link.addr_20", - True) + True, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) @@ -303,7 +298,8 @@ class RouterTest(TestCase): self.routers[1].addresses[2], "link.addr_21", "0.0.0.0/link.addr_21", - False) + False, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) @@ -313,7 +309,8 @@ class RouterTest(TestCase): self.routers[1].addresses[2], "0.0.0.0/link.addr_22", "0.0.0.0/link.addr_22", - False) + False, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) @@ -323,7 +320,8 @@ class RouterTest(TestCase): self.routers[1].addresses[2], "link.addr_23", "0.0.0.0/link.addr_23", - True) + True, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) @@ -333,19 +331,19 @@ class RouterTest(TestCase): self.routers[1].addresses[2], "0.0.0.0/link.addr_24", "0.0.0.0/link.addr_24", - True) + True, + self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) def test_25_one_router_anonymous_sender_non_mobile(self): - test = MessageTransferTest(self.routers[0].addresses[1], - self.routers[0].addresses[0], - "_local/addr_25", - "_local/addr_25", - self.routers[0].addresses[0], - "Laddr_25", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[1], + self.routers[0].addresses[0], + "_local/addr_25", + "_local/addr_25", + self.routers[0].addresses[0], + "Laddr_25") test.run() self.assertEqual(None, test.error) @@ -356,20 +354,18 @@ class RouterTest(TestCase): "_local/addr_26", "_local/addr_26", self.routers[0].addresses[0], - "Laddr_26", - False) + "Laddr_26") test.run() self.assertEqual(None, test.error) def test_27_two_router_anonymous_sender_non_mobile(self): - test = MessageTransferTest(self.routers[0].addresses[1], - self.routers[1].addresses[0], - "_topo/0/B/addr_27", - "_local/addr_27", - self.routers[1].addresses[0], - "Laddr_27", - True) + test = MessageTransferAnonTest(self.routers[0].addresses[1], + self.routers[1].addresses[0], + "_topo/0/B/addr_27", + "_local/addr_27", + self.routers[1].addresses[0], + "Laddr_27") test.run() self.assertEqual(None, test.error) @@ -380,8 +376,7 @@ class RouterTest(TestCase): "_topo/0/B/addr_28", "_local/addr_28", self.routers[1].addresses[0], - "Laddr_28", - False) + "Laddr_28") test.run() self.assertEqual(None, test.error) @@ -457,8 +452,16 @@ class Timeout(object): self.parent.timeout() +class PollTimeout(object): + def __init__(self, parent): + self.parent = parent + + def on_timer_task(self, event): + self.parent.poll_timeout() + + class MessageTransferTest(MessagingHandler): - def __init__(self, sender_host, receiver_host, sender_address, receiver_address, lookup_host, lookup_address, anonymous=False): + def __init__(self, sender_host, receiver_host, sender_address, receiver_address, lookup_host, lookup_address): super(MessageTransferTest, self).__init__() self.sender_host = sender_host self.receiver_host = receiver_host @@ -466,7 +469,6 @@ class MessageTransferTest(MessagingHandler): self.receiver_address = receiver_address self.lookup_host = lookup_host self.lookup_address = lookup_address - self.anonymous = anonymous self.sender_conn = None self.receiver_conn = None @@ -480,10 +482,13 @@ class MessageTransferTest(MessagingHandler): self.n_sent = 0 self.n_rcvd = 0 self.n_accepted = 0 - self.n_released = 0 + + self.n_receiver_opened = 0 + self.n_sender_opened = 0 def timeout(self): - self.error = "Timeout Expired: n_sent=%d n_rcvd=%d n_accepted=%d n_released=%d" % (self.n_sent, self.n_rcvd, self.n_accepted, self.n_released) + self.error = "Timeout Expired: n_sent=%d n_rcvd=%d n_accepted=%d n_receiver_opened=%d n_sender_opened=%d" %\ + (self.n_sent, self.n_rcvd, self.n_accepted, self.n_receiver_opened, self.n_sender_opened) self.sender_conn.close() self.receiver_conn.close() self.lookup_conn.close() @@ -500,24 +505,20 @@ class MessageTransferTest(MessagingHandler): while self.sender.credit > 0 and self.n_sent < self.count: self.n_sent += 1 m = Message(body="Message %d of %d" % (self.n_sent, self.count)) - - if self.anonymous: - m.address = self.sender_address self.sender.send(m) - def on_released(self, event): - self.n_sent -= 1 - self.n_released += 1 - def on_link_opened(self, event): + if event.receiver: + self.n_receiver_opened += 1 + else: + self.n_sender_opened += 1 + if event.receiver == self.reply_receiver: self.proxy = RouterProxy(self.reply_receiver.remote_source.address) - self.sender = event.container.create_sender(self.sender_conn, None if self.anonymous else self.sender_address) + self.sender = event.container.create_sender(self.sender_conn, self.sender_address) self.receiver = event.container.create_receiver(self.receiver_conn, self.receiver_address) def on_sendable(self, event): - if self.n_sent == 0 and self.anonymous: - time.sleep(0.3) if event.sender == self.sender: self.send() @@ -546,14 +547,117 @@ class MessageTransferTest(MessagingHandler): Container(self).run() +class MessageTransferAnonTest(MessagingHandler): + def __init__(self, sender_host, receiver_host, sender_address, receiver_address, lookup_host, lookup_address): + super(MessageTransferAnonTest, self).__init__() + self.sender_host = sender_host + self.receiver_host = receiver_host + self.sender_address = sender_address + self.receiver_address = receiver_address + self.lookup_host = lookup_host + self.lookup_address = lookup_address + + self.sender_conn = None + self.receiver_conn = None + self.lookup_conn = None + self.error = None + self.sender = None + self.receiver = None + self.proxy = None + + self.count = 10 + self.n_sent = 0 + self.n_rcvd = 0 + self.n_accepted = 0 + + self.n_agent_reads = 0 + self.n_receiver_opened = 0 + self.n_sender_opened = 0 + + def timeout(self): + self.error = "Timeout Expired: n_sent=%d n_rcvd=%d n_accepted=%d n_agent_reads=%d n_receiver_opened=%d n_sender_opened=%d" %\ + (self.n_sent, self.n_rcvd, self.n_accepted, self.n_agent_reads, self.n_receiver_opened, self.n_sender_opened) + self.sender_conn.close() + self.receiver_conn.close() + self.lookup_conn.close() + if self.poll_timer: + self.poll_timer.cancel() + + def poll_timeout(self): + self.poll() + + def on_start(self, event): + self.timer = event.reactor.schedule(5, Timeout(self)) + self.poll_timer = None + self.sender_conn = event.container.connect(self.sender_host) + self.receiver_conn = event.container.connect(self.receiver_host) + self.lookup_conn = event.container.connect(self.lookup_host) + self.reply_receiver = event.container.create_receiver(self.lookup_conn, dynamic=True) + self.agent_sender = event.container.create_sender(self.lookup_conn, "$management") + self.receiver = event.container.create_receiver(self.receiver_conn, self.receiver_address) + + def send(self): + while self.sender.credit > 0 and self.n_sent < self.count: + self.n_sent += 1 + m = Message(body="Message %d of %d" % (self.n_sent, self.count)) + m.address = self.sender_address + self.sender.send(m) + + def poll(self): + request = self.proxy.read_address(self.lookup_address) + self.agent_sender.send(request) + self.n_agent_reads += 1 + + def on_link_opened(self, event): + if event.receiver: + self.n_receiver_opened += 1 + else: + self.n_sender_opened += 1 + + if event.receiver == self.reply_receiver: + self.proxy = RouterProxy(self.reply_receiver.remote_source.address) + self.poll() + + def on_sendable(self, event): + if event.sender == self.sender: + self.send() + + def on_message(self, event): + if event.receiver == self.receiver: + self.n_rcvd += 1 + + if event.receiver == self.reply_receiver: + response = self.proxy.response(event.message) + if response.status_code == 200 and (response.remoteCount + response.subscriberCount) > 0: + self.sender = event.container.create_sender(self.sender_conn, None) + if self.poll_timer: + self.poll_timer.cancel() + self.poll_timer = None + else: + self.poll_timer = event.reactor.schedule(0.25, PollTimeout(self)) + + def on_accepted(self, event): + if event.sender == self.sender: + self.n_accepted += 1 + if self.n_accepted == self.count: + self.sender_conn.close() + self.receiver_conn.close() + self.lookup_conn.close() + self.timer.cancel() + + def run(self): + Container(self).run() + + class LinkRouteTest(MessagingHandler): - def __init__(self, first_host, second_host, first_address, second_address, dynamic): + def __init__(self, first_host, second_host, first_address, second_address, dynamic, lookup_host): super(LinkRouteTest, self).__init__(prefetch=0) self.first_host = first_host self.second_host = second_host self.first_address = first_address self.second_address = second_address self.dynamic = dynamic + self.lookup_host = lookup_host self.first_conn = None self.second_conn = None @@ -562,6 +666,7 @@ class LinkRouteTest(MessagingHandler): self.first_receiver = None self.second_sender = None self.second_receiver = None + self.poll_timer = None self.count = 10 self.n_sent = 0 @@ -572,12 +677,21 @@ class LinkRouteTest(MessagingHandler): self.error = "Timeout Expired: n_sent=%d n_rcvd=%d n_settled=%d" % (self.n_sent, self.n_rcvd, self.n_settled) self.first_conn.close() self.second_conn.close() + self.lookup_conn.close() + if self.poll_timer: + self.poll_timer.cancel() + + def poll_timeout(self): + self.poll() def fail(self, text): self.error = text self.second_conn.close() self.first_conn.close() self.timer.cancel() + self.lookup_conn.close() + if self.poll_timer: + self.poll_timer.cancel() def send(self): while self.first_sender.credit > 0 and self.n_sent < self.count: @@ -585,23 +699,28 @@ class LinkRouteTest(MessagingHandler): m = Message(body="Message %d of %d" % (self.n_sent, self.count)) self.first_sender.send(m) - def on_start(self, event): - self.timer = event.reactor.schedule(5, Timeout(self)) - self.second_conn = event.container.connect(self.second_host) + def poll(self): + request = self.proxy.read_address("D0.0.0.0/link") + self.agent_sender.send(request) + + def setup_first_links(self, event): + self.first_sender = event.container.create_sender(self.first_conn, self.first_address) + if self.dynamic: + self.first_receiver = event.container.create_receiver(self.first_conn, + dynamic=True, + options=DynamicNodeProperties({"x-opt-qd.address": unicode(self.first_address)})) + else: + self.first_receiver = event.container.create_receiver(self.first_conn, self.first_address) - def on_connection_opened(self, event): - if event.connection == self.first_conn: - self.first_sender = event.container.create_sender(self.first_conn, self.first_address) - if self.dynamic: - self.first_receiver = event.container.create_receiver(self.first_conn, - dynamic=True, - options=DynamicNodeProperties({"x-opt-qd.address": unicode(self.first_address)})) - else: - self.first_receiver = event.container.create_receiver(self.first_conn, self.first_address) - if event.connection == self.second_conn: - time.sleep(1) - self.first_conn = event.container.connect(self.first_host) + def on_start(self, event): + self.timer = event.reactor.schedule(5, Timeout(self)) + self.first_conn = event.container.connect(self.first_host) + self.second_conn = event.container.connect(self.second_host) + self.lookup_conn = event.container.connect(self.lookup_host) + self.reply_receiver = event.container.create_receiver(self.lookup_conn, dynamic=True) + self.agent_sender = event.container.create_sender(self.lookup_conn, "$management") + def on_link_opening(self, event): if event.sender: @@ -634,6 +753,10 @@ class LinkRouteTest(MessagingHandler): if event.receiver: event.receiver.flow(self.count) + if event.receiver == self.reply_receiver: + self.proxy = RouterProxy(self.reply_receiver.remote_source.address) + self.poll() + def on_sendable(self, event): if event.sender == self.first_sender: self.send() @@ -641,7 +764,17 @@ class LinkRouteTest(MessagingHandler): def on_message(self, event): if event.receiver == self.first_receiver: self.n_rcvd += 1 - + + if event.receiver == self.reply_receiver: + response = self.proxy.response(event.message) + if response.status_code == 200 and (response.remoteCount + response.containerCount) > 0: + if self.poll_timer: + self.poll_timer.cancel() + self.poll_timer = None + self.setup_first_links(event) + else: + self.poll_timer = event.reactor.schedule(0.25, PollTimeout(self)) + def on_settled(self, event): if event.sender == self.first_sender: self.n_settled += 1 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
