This is an automated email from the ASF dual-hosted git repository.

kgiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/main by this push:
     new 5771f8b  DISPATCH-2327: clean up link routes at end of tests
5771f8b is described below

commit 5771f8b12ab6b5bd98bc4ac093c5926481e035b4
Author: Kenneth Giusti <kgiu...@apache.org>
AuthorDate: Thu Feb 10 08:58:54 2022 -0500

    DISPATCH-2327: clean up link routes at end of tests
    
    This closes #1512
---
 tests/system_tests_multi_tenancy.py | 86 ++++++++++++++++++++++++++-----------
 1 file changed, 62 insertions(+), 24 deletions(-)

diff --git a/tests/system_tests_multi_tenancy.py 
b/tests/system_tests_multi_tenancy.py
index 1295e40..e739ee3 100644
--- a/tests/system_tests_multi_tenancy.py
+++ b/tests/system_tests_multi_tenancy.py
@@ -235,7 +235,8 @@ class RouterTest(TestCase):
                              "link.addr_17",
                              "0.0.0.0/link.addr_17",
                              False,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -245,7 +246,8 @@ class RouterTest(TestCase):
                              "0.0.0.0/link.addr_18",
                              "0.0.0.0/link.addr_18",
                              False,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -255,7 +257,8 @@ class RouterTest(TestCase):
                              "link.addr_19",
                              "0.0.0.0/link.addr_19",
                              True,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -265,7 +268,8 @@ class RouterTest(TestCase):
                              "0.0.0.0/link.addr_20",
                              "0.0.0.0/link.addr_20",
                              True,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -275,7 +279,8 @@ class RouterTest(TestCase):
                              "link.addr_21",
                              "0.0.0.0/link.addr_21",
                              False,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -285,7 +290,8 @@ class RouterTest(TestCase):
                              "0.0.0.0/link.addr_22",
                              "0.0.0.0/link.addr_22",
                              False,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -295,7 +301,8 @@ class RouterTest(TestCase):
                              "link.addr_23",
                              "0.0.0.0/link.addr_23",
                              True,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -305,7 +312,8 @@ class RouterTest(TestCase):
                              "0.0.0.0/link.addr_24",
                              "0.0.0.0/link.addr_24",
                              True,
-                             self.routers[0].addresses[0])
+                             self.routers[0].addresses[0],
+                             self.routers)
         test.run()
         self.assertIsNone(test.error)
 
@@ -659,14 +667,18 @@ class MessageTransferAnonTest(MessagingHandler):
 
 
 class LinkRouteTest(MessagingHandler):
-    def __init__(self, first_host, second_host, first_address, second_address, 
dynamic, lookup_host):
+    def __init__(self, first_host, second_host, first_address, second_address,
+                 dynamic, lookup_host, routers):
         super(LinkRouteTest, self).__init__(prefetch=0)
+        self.logger         = Logger(title="LinkRouteTest")
         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.routers        = routers
+        self.reactor        = None
 
         self.first_conn      = None
         self.second_conn     = None
@@ -683,36 +695,53 @@ class LinkRouteTest(MessagingHandler):
         self.n_settled = 0
 
     def timeout(self):
-        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()
+        self.done("Timeout Expired: n_sent=%d n_rcvd=%d n_settled=%d" %
+                  (self.n_sent, self.n_rcvd, self.n_settled))
 
     def poll_timeout(self):
         self.poll()
 
-    def fail(self, text):
-        self.error = text
+    def cleanup(self):
+        for router in self.routers:
+            router.wait_address_unsubscribed("D0.0.0.0/link")
+
+    def done(self, error=None):
+        self.error = error
         self.second_conn.close()
         self.first_conn.close()
         self.timer.cancel()
         self.lookup_conn.close()
         if self.poll_timer:
             self.poll_timer.cancel()
+        if error:
+            self.logger.dump()
+
+        # give proton a chance to close all of the above connections,
+        # then wait for the route tables remove the link route
+
+        class _CleanupTimer:
+            def __init__(self, parent):
+                self.parent = parent
+
+            def on_timer_task(self, event):
+                self.parent.cleanup()
+
+        self.reactor.schedule(1.0, _CleanupTimer(self))
 
     def send(self):
+        self.logger.log("Send")
         while self.first_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))
             self.first_sender.send(m)
 
     def poll(self):
+        self.logger.log("Poll")
         request = self.proxy.read_address("D0.0.0.0/link")
         self.agent_sender.send(request)
 
     def setup_first_links(self, event):
+        self.logger.log("First links")
         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,
@@ -723,6 +752,8 @@ class LinkRouteTest(MessagingHandler):
             self.first_receiver = 
event.container.create_receiver(self.first_conn, self.first_address)
 
     def on_start(self, event):
+        self.logger.log("On Start")
+        self.reactor        = event.reactor
         self.timer          = event.reactor.schedule(TIMEOUT, 
TestTimeout(self))
         self.first_conn     = event.container.connect(self.first_host)
         self.second_conn    = event.container.connect(self.second_host)
@@ -732,31 +763,34 @@ class LinkRouteTest(MessagingHandler):
 
     def on_link_opening(self, event):
         if event.sender:
+            self.logger.log("On sender link opening")
             self.second_sender = event.sender
             if self.dynamic:
                 if event.sender.remote_source.dynamic:
                     event.sender.source.address = self.second_address
                     event.sender.open()
                 else:
-                    self.fail("Expected dynamic source on sender")
+                    self.done("Expected dynamic source on sender")
             else:
                 if event.sender.remote_source.address == self.second_address:
                     event.sender.source.address = self.second_address
                     event.sender.open()
                 else:
-                    self.fail("Incorrect address on incoming sender: got %s, 
expected %s" %
+                    self.done("Incorrect address on incoming sender: got %s, 
expected %s" %
                               (event.sender.remote_source.address, 
self.second_address))
 
         elif event.receiver:
+            self.logger.log("On receiver link opening")
             self.second_receiver = event.receiver
             if event.receiver.remote_target.address == self.second_address:
                 event.receiver.target.address = self.second_address
                 event.receiver.open()
             else:
-                self.fail("Incorrect address on incoming receiver: got %s, 
expected %s" %
+                self.done("Incorrect address on incoming receiver: got %s, 
expected %s" %
                           (event.receiver.remote_target.address, 
self.second_address))
 
     def on_link_opened(self, event):
+        self.logger.log("On link opened")
         if event.receiver:
             event.receiver.flow(self.count)
 
@@ -765,14 +799,17 @@ class LinkRouteTest(MessagingHandler):
             self.poll()
 
     def on_sendable(self, event):
+        self.logger.log("On sendable")
         if event.sender == self.first_sender:
             self.send()
 
     def on_message(self, event):
         if event.receiver == self.first_receiver:
+            self.logger.log("On message 1st")
             self.n_rcvd += 1
 
         if event.receiver == self.reply_receiver:
+            self.logger.log("On message reply")
             response = self.proxy.response(event.message)
             if response.status_code == 200 and (response.remoteCount + 
response.containerCount) > 0:
                 if self.poll_timer:
@@ -784,9 +821,10 @@ class LinkRouteTest(MessagingHandler):
 
     def on_settled(self, event):
         if event.sender == self.first_sender:
+            self.logger.log("On settled")
             self.n_settled += 1
             if self.n_settled == self.count:
-                self.fail(None)
+                self.done(None)
 
     def run(self):
         container = Container(self)
@@ -827,9 +865,9 @@ class WaypointTest(MessagingHandler):
         self.outs = None
 
     def timeout(self):
-        self.error = "Timeout Expired: n_sent=%d n_rcvd=%d n_thru=%d 
n_waypoint_rcvd=%d" % (self.n_sent, self.n_rcvd, self.n_thru, 
self.n_waypoint_rcvd)
-        self.first_conn.close()
-        self.second_conn.close()
+        self.fail("Timeout Expired: n_sent=%d n_rcvd=%d n_thru=%d"
+                  " n_waypoint_rcvd=%d" % (self.n_sent, self.n_rcvd,
+                                           self.n_thru, self.n_waypoint_rcvd))
 
     def fail(self, text):
         self.error = text

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to