You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2019/09/27 19:44:09 UTC
[qpid-dispatch] branch master updated: DISPATCH-1408 - Modify
ClosestTest to send specific number of messages. Also added additional
checks to make sure that all routers know about closed receivers. This
closes #574.
This is an automated email from the ASF dual-hosted git repository.
gmurthy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
The following commit(s) were added to refs/heads/master by this push:
new 0f8d91e DISPATCH-1408 - Modify ClosestTest to send specific number of messages. Also added additional checks to make sure that all routers know about closed receivers. This closes #574.
0f8d91e is described below
commit 0f8d91e30eb5477e4f832bfe09552193371145a1
Author: Ganesh Murthy <gm...@apache.org>
AuthorDate: Fri Sep 27 13:52:48 2019 -0400
DISPATCH-1408 - Modify ClosestTest to send specific number of messages. Also added additional checks to make sure that all routers know about closed receivers. This closes #574.
---
tests/system_tests_distribution.py | 103 ++++++++++++++++++++++++++++---------
1 file changed, 78 insertions(+), 25 deletions(-)
diff --git a/tests/system_tests_distribution.py b/tests/system_tests_distribution.py
index c3be49c..ea1f122 100644
--- a/tests/system_tests_distribution.py
+++ b/tests/system_tests_distribution.py
@@ -2272,6 +2272,17 @@ class ClosestTest ( MessagingHandler ):
self.test_name = test_name
self.sender = None
+ self.n_sent_1 = 0
+ self.n_sent_2 = 0
+ self.n_sent_3 = 0
+
+ self.recv_1_a_closed = False
+ self.recv_1_b_closed = False
+ self.recv_2_a_closed = False
+ self.recv_2_b_closed = False
+
+ self.first_check = True
+ self.send_on_sendable = True
def timeout ( self ):
self.bail ( "Timeout Expired " )
@@ -2322,46 +2333,69 @@ class ClosestTest ( MessagingHandler ):
self.recv_3_b.flow ( self.n_expected )
self.addr_check_receiver = event.container.create_receiver ( self.cnx_1, dynamic=True )
+ self.addr_check_receiver.flow(100)
self.addr_check_sender = event.container.create_sender ( self.cnx_1, "$management" )
def on_link_opened(self, event):
- if event.receiver:
- event.receiver.flow ( self.n_expected )
if event.receiver == self.addr_check_receiver:
# my addr-check link has opened: make the addr_checker with the given address.
self.addr_checker = AddressChecker ( self.addr_check_receiver.remote_source.address )
self.addr_check()
-
def on_sendable ( self, event ):
# Fix for DISPATCH-1408 - Make sure that the correct sender is sending the messages to self.dest
- if event.sender == self.sender:
+ if event.sender == self.sender and self.n_sent_1 < self.one_third and self.send_on_sendable:
msg = Message ( body = "Hello, closest.",
address = self.dest)
event.sender.send ( msg )
+ self.n_sent_1 += 1
+ if self.n_sent_1 == self.one_third:
+ # Henceforth, we will not be using on_sendable to send messages.
+ # Look at on_link_closed
+ self.send_on_sendable = False
+
+ def send_messages(self):
+ while self.n_sent_1 < self.one_third:
+ msg = Message ( body = "Hello, closest.",
+ address = self.dest)
+ self.sender.send ( msg )
+ self.n_sent_1 += 1
- def on_message ( self, event ):
+ def on_message ( self, event ):
if event.receiver == self.addr_check_receiver:
# This is a response to one of my address-readiness checking messages.
response = self.addr_checker.parse_address_query_response(event.message)
- if response.status_code == 200 and response.subscriberCount == 2 and response.remoteCount == 2:
- # now we know that we have two subscribers on attached router, and two remote
- # routers that know about the address. The network is ready.
- # Now we can make the sender without getting a
- # "No Path To Destination" error.
- self.sender = event.container.create_sender ( self.send_cnx, self.dest )
-
- # And we can quit checking.
- if self.addr_check_timer:
- self.addr_check_timer.cancel()
- self.addr_check_timer = None
+ if self.first_check:
+ if response.status_code == 200 and response.subscriberCount == 2 and response.remoteCount == 2:
+ # now we know that we have two subscribers on attached router, and two remote
+ # routers that know about the address. The network is ready.
+ # Now we can make the sender without getting a
+ # "No Path To Destination" error.
+ self.sender = event.container.create_sender ( self.send_cnx, self.dest )
+
+ # And we can quit checking.
+ if self.addr_check_timer:
+ self.addr_check_timer.cancel()
+ self.addr_check_timer = None
+ else:
+ # If the latest check did not find the link-attack route ready,
+ # schedule another check a little while from now.
+ self.addr_check_timer = event.reactor.schedule(0.25, AddressCheckerTimeout(self))
else:
- # If the latest check did not find the link-attack route ready,
- # schedule another check a little while from now.
- self.addr_check_timer = event.reactor.schedule(0.25, AddressCheckerTimeout(self))
+ if response.status_code == 200 and response.subscriberCount == 0 and response.remoteCount == 1:
+ self.send_messages()
+ if self.addr_check_timer:
+ self.addr_check_timer.cancel()
+ self.addr_check_timer = None
+ else:
+ # If the latest check did not find the link-attack route ready,
+ # schedule another check a little while from now.
+ self.addr_check_timer = event.reactor.schedule(0.25,
+ AddressCheckerTimeout(
+ self))
else :
# This is a payload message.
self.n_received += 1
@@ -2390,8 +2424,8 @@ class ClosestTest ( MessagingHandler ):
if (self.count_2_a + self.count_2_b + self.count_3_a + self.count_3_b) > 0 :
self.bail ( "error: routers 2 or 3 got messages before router 1 receivers were closed." )
# Make sure both receivers got some messages.
- if (self.count_1_a * self.count_1_b) == 0:
- self.bail ( "error: one of the receivers on router 1 got no messages." )
+ if (self.count_1_a < self.one_third/2 or self.count_1_b < self.one_third/2) or (self.count_1_b != self.count_1_a):
+ self.bail ( "error: recv_1_a and recv_1_b did not get equal number of messages" )
elif self.n_received == 2 * self.one_third:
# The next one-third of messages should have gone exclusively
@@ -2402,18 +2436,37 @@ class ClosestTest ( MessagingHandler ):
if (self.count_3_a + self.count_3_b) > 0 :
self.bail ( "error: router 3 got messages before 2 was closed." )
# Make sure both receivers got some messages.
- if (self.count_2_a * self.count_2_b) == 0:
- self.bail ( "error: one of the receivers on router 2 got no messages." )
+ if (self.count_2_a < self.one_third/2 or self.count_2_b < self.one_third/2) or (self.count_2_b != self.count_2_a):
+ self.bail ( "error: recv_2_a and recv_2_b did not get equal number of messages" )
# By the time we reach the expected number of messages
# we have closed the router_1 and router_2 receivers. If the
# router_3 receivers are empty at this point, something is wrong.
if self.n_received >= self.n_expected :
- if (self.count_3_a * self.count_3_b) == 0:
- self.bail ( "error: one of the receivers on router 3 got no messages." )
+ if (self.count_3_a < self.one_third/2 or self.count_3_b < self.one_third/2) or (self.count_3_b != self.count_3_a):
+ self.bail ( "error: recv_3_a and recv_3_b did not get equal number of messages" )
else:
self.bail ( None )
+ def on_link_closed(self, event):
+ if event.receiver == self.recv_1_b or event.receiver == self.recv_1_a:
+ if event.receiver == self.recv_1_a:
+ self.recv_1_a_closed = True
+ if event.receiver == self.recv_1_b:
+ self.recv_1_b_closed = True
+ if self.recv_1_a_closed and self.recv_1_b_closed:
+ self.n_sent_1 = 0
+ self.send_messages()
+
+ if event.receiver == self.recv_2_a or event.receiver == self.recv_2_b:
+ if event.receiver == self.recv_2_a:
+ self.recv_2_a_closed = True
+ if event.receiver == self.recv_2_b:
+ self.recv_2_b_closed = True
+ if self.recv_2_a_closed and self.recv_2_b_closed:
+ self.n_sent_1 = 0
+ self.first_check = False
+ self.addr_check()
def addr_check ( self ):
# Send the message that will query the management code to discover
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org