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

chug 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 b282a28  NO-JIRA: Instrument MessageRouteAbortTest; use new test Logger
b282a28 is described below

commit b282a284d6853acd14386f33a60d8b079dec93ec
Author: Chuck Rolke <[email protected]>
AuthorDate: Fri Feb 7 15:12:15 2020 -0500

    NO-JIRA: Instrument MessageRouteAbortTest; use new test Logger
    
    This patch adds debugability to system_tests_delivery_abort.
     - Every test message is a different length
     - Test message content is unique - a string of the message length
     - Logging statements track test progress
    
    A major frustration is a failure like DISPATCH-1559: some test fails
    intermittently and the results of the assertion that fails the test is
    *truncated*. It is an even harder problem when the failure is on some
    remote CI system over which one has no control.
    
    This patch is essentially the debug scaffolding that was required to
    debug DISPATCH-1559. This patch uses the Logger added in DISPATCH-1536.
    
    The log holds a narrative of exactly when (to the uS) each message was
    sent or aborted from the client's view. Armed with this one can then
    look into the router logs to see AMQP progress and diagnose the fault.
---
 tests/system_tests_delivery_abort.py | 34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

diff --git a/tests/system_tests_delivery_abort.py 
b/tests/system_tests_delivery_abort.py
index 752950f..eea0c2a 100644
--- a/tests/system_tests_delivery_abort.py
+++ b/tests/system_tests_delivery_abort.py
@@ -23,6 +23,7 @@ from __future__ import absolute_import
 from __future__ import print_function
 
 from proton import Message, Timeout
+from system_test import Logger
 from system_test import TestCase, Qdrouterd, main_module
 from system_test import unittest
 from proton.handlers import MessagingHandler
@@ -107,6 +108,8 @@ class RouterTest(TestCase):
                                      self.routers[0].addresses[0],
                                      "addr_05")
         test.run()
+        if test.error:
+            test.logger.dump()
         self.assertEqual(None, test.error)
 
 
@@ -115,6 +118,8 @@ class RouterTest(TestCase):
                                      self.routers[1].addresses[0],
                                      "addr_06")
         test.run()
+        if test.error:
+            test.logger.dump()
         self.assertEqual(None, test.error)
 
 
@@ -403,21 +408,24 @@ class MessageRouteAbortTest(MessagingHandler):
         self.sender1       = None
         self.receiver      = None
         self.delivery      = None
+        self.logger        = Logger(title="MessageRouteAbortTest")
 
-        self.program       = [('D', 10), ('D', 10), ('A', 10), ('A', 10), 
('D', 10), ('D', 10),
-                              ('A', 100), ('D', 100),
-                              ('A', 1000), ('A', 1000), ('A', 1000), ('A', 
1000), ('A', 1000), ('D', 1000),
-                              ('A', 10000), ('A', 10000), ('A', 10000), ('A', 
10000), ('A', 10000), ('D', 10000),
-                              ('A', 100000), ('A', 100000), ('A', 100000), 
('A', 100000), ('A', 100000), ('D', 100000), ('F', 10)]
+        self.program       = [('D', 10), ('D', 20), ('A', 30), ('A', 40), 
('D', 50), ('D', 60),
+                              ('A', 100), ('D', 110),
+                              ('A', 1000), ('A', 1010), ('A', 1020), ('A', 
1030), ('A', 1040), ('D', 1050),
+                              ('A', 10000), ('A', 10010), ('A', 10020), ('A', 
10030), ('A', 10040), ('D', 10050),
+                              ('A', 100000), ('A', 100010), ('A', 100020), 
('A', 100030), ('A', 100040), ('D', 100050), ('F', 10)]
         self.result        = []
-        self.expected_result = [10, 10, 10, 10, 100, 1000, 10000, 100000]
+        self.expected_result = [10, 20, 50, 60, 110, 1050, 10050, 100050]
 
     def timeout(self):
         self.error = "Timeout Expired - Unprocessed Ops: %r, Result: %r" % 
(self.program, self.result)
+        self.logger.log(self.error)
         self.sender_conn.close()
         self.receiver_conn.close()
 
     def on_start(self, event):
+        self.logger.log("on_start")
         self.timer         = event.reactor.schedule(10.0, Timeout(self))
         self.sender_conn   = event.container.connect(self.sender_host)
         self.receiver_conn = event.container.connect(self.receiver_host)
@@ -426,9 +434,11 @@ class MessageRouteAbortTest(MessagingHandler):
 
     def send(self):
         if self.delivery:
+            self.logger.log("send(): Do not send - delivery to be aborted is 
in flight")
             return
 
         op, size = self.program.pop(0) if len(self.program) > 0 else (None, 
None)
+        self.logger.log("send - op=%s, size=%s" % (str(op), str(size)))
 
         if op == None:
             return
@@ -437,14 +447,18 @@ class MessageRouteAbortTest(MessagingHandler):
         if op == 'F':
             body = "FINISH"
         else:
-            for i in range(size // 10):
-                body += "0123456789"
+            bod = str(size)
+            bod2 = "0000000000" + bod
+            bod3 = "." + bod2[-9:]
+            body = bod3 * (size // 10)
         msg = Message(body=body)
         
         if op in 'DF':
+            self.logger.log("send(): Send message size: %d" % (size))
             delivery = self.sender1.send(msg)
 
         if op == 'A':
+            self.logger.log("send(): Start aborted message size: %d" % (size))
             self.delivery = self.sender1.delivery(self.sender1.delivery_tag())
             encoded = msg.encode()
             self.sender1.stream(encoded)
@@ -452,15 +466,18 @@ class MessageRouteAbortTest(MessagingHandler):
     def finish(self):
         if self.result != self.expected_result:
             self.error = "Expected: %r, Actual: %r" % (self.expected_result, 
self.result)
+            self.logger.log(self.error)
         self.sender_conn.close()
         self.receiver_conn.close()
         self.timer.cancel()
         
     def on_sendable(self, event):
+        self.logger.log("on_sendable")
         if event.sender == self.sender1:
             if self.delivery:
                 self.delivery.abort()
                 self.delivery = None
+                self.logger.log("on_sendable aborts delivery")
             else:
                 self.send()
 
@@ -469,6 +486,7 @@ class MessageRouteAbortTest(MessagingHandler):
         if m.body == "FINISH":
             self.finish()
         else:
+            self.logger.log("on_message receives len: %d" %(len(m.body)))
             self.result.append(len(m.body))
             self.send()
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to