Streamline selftest output
authorJeremy Stanley <fungi@yuggoth.org>
Sun, 29 Jul 2018 17:55:16 +0000 (17:55 +0000)
committerJeremy Stanley <fungi@yuggoth.org>
Sun, 29 Jul 2018 17:55:16 +0000 (17:55 +0000)
The standard output from a selftest run is much more brief, with the
prior verbose information redirected to a capture_tests.log file.

mudpy/tests/selftest.py

index 949488d..799ac50 100644 (file)
@@ -360,7 +360,7 @@ def stop_service(service):
     service.terminate()
     returncode = service.wait(10)
     if returncode != 0:
-        print("ERROR: Service exited with code %s." % returncode)
+        tlog("\nERROR: Service exited with code %s." % returncode)
         success = False
 
     # This cleans up a daemonized and disassociated service
@@ -376,21 +376,30 @@ def stop_service(service):
             os.remove(pidfile)
         # The PID file didn't disappear, so we have a hung service
         if os.path.exists(pidfile):
-            print("ERROR: Hung daemon with PID %s." % pid)
+            tlog("\nERROR: Hung daemon with PID %s." % pid)
             success = False
 
     # Log the contents of stdout and stderr, if any
     stdout, stderr = service.communicate()
-    print("Recording stdout as capture_stdout.log.")
+    tlog("\nRecording stdout as capture_stdout.log.")
     serviceout = open("capture_stdout.log", "w")
     serviceout.write(stdout.decode("utf-8"))
-    print("Recording stderr as capture_stderr.log.")
+    tlog("\nRecording stderr as capture_stderr.log.")
     serviceerr = open("capture_stderr.log", "w")
     serviceerr.write(stderr.decode("utf-8"))
 
     return(success)
 
 
+def tlog(message, quiet=False):
+    logfile = "capture_tests.log"
+    with open(logfile, "a") as logfd:
+        logfd.write(message + "\n")
+    if not quiet:
+        sys.stdout.write(message)
+    return True
+
+
 def main():
     captures = ["", "", ""]
     lusers = [telnetlib.Telnet(), telnetlib.Telnet(), telnetlib.Telnet()]
@@ -403,23 +412,24 @@ def main():
     for luser in lusers:
         luser.open("::1", 4000)
     for test, description in dialogue:
-        print("\nTesting %s..." % description)
+        tlog("\nTesting %s..." % description)
         test_start = time.time()
         for conversant, question, answer in test:
-            print("luser%s waiting for: %s" % (conversant, question))
+            tlog("luser%s waiting for: %s" % (conversant, question),
+                 quiet=True)
             try:
                 index, match, received = lusers[conversant].expect(
                     [re.compile(question.encode("utf-8"), flags=re.DOTALL)], 5)
                 captures[conversant] += received.decode("utf-8")
             except ConnectionResetError:
-                print("ERROR: Unable to connect to server.")
+                tlog("\nERROR: Unable to connect to server.")
                 success = False
                 break
             except EOFError:
-                print("ERROR: luser%s premature disconnection expecting:\n\n"
-                      "%s\n\n"
-                      "Check the end of capture_%s.log for received data."
-                      % (conversant, question, conversant))
+                tlog("\nERROR: luser%s premature disconnection expecting:\n\n"
+                     "%s\n\n"
+                     "Check the end of capture_%s.log for received data."
+                     % (conversant, question, conversant))
                 success = False
                 break
             try:
@@ -428,30 +438,30 @@ def main():
             except Exception:
                 pass
             if index is not 0:
-                print("ERROR: luser%s did not receive expected string:\n\n"
-                      "%s\n\n"
-                      "Check the end of capture_%s.log for received data."
-                      % (conversant, question, conversant))
+                tlog("\nERROR: luser%s did not receive expected string:\n\n"
+                     "%s\n\n"
+                     "Check the end of capture_%s.log for received data."
+                     % (conversant, question, conversant))
                 success = False
                 break
             if type(answer) is str:
-                print("luser%s sending: %s" % (conversant, answer))
+                tlog("luser%s sending: %s" % (conversant, answer), quiet=True)
                 lusers[conversant].write(("%s\r\n" % answer).encode("utf-8"))
                 captures[conversant] += "%s\r\n" % answer
             elif type(answer) is bytes:
-                print("luser%s sending raw bytes: %s" % (conversant, answer))
+                tlog("luser%s sending raw bytes: %s" % (conversant, answer),
+                     quiet=True)
                 lusers[conversant].get_socket().send(answer)
                 captures[conversant] += "!!!RAW BYTES: %s" % answer
             else:
-                print("ERROR: answer provided with unsupported type %s"
-                      % type(answer))
+                tlog("\nERROR: answer provided with unsupported type %s"
+                     % type(answer))
                 success = False
                 break
         if not success:
             break
-        print("Completed in %.3f seconds." % (time.time() - test_start))
+        tlog("Completed in %.3f seconds." % (time.time() - test_start))
     duration = time.time() - start
-    print("")
     for conversant in range(len(captures)):
         try:
             captures[conversant] += lusers[
@@ -460,17 +470,17 @@ def main():
             pass
         lusers[conversant].close()
         logfile = "capture_%s.log" % conversant
-        print("Recording session %s as %s." % (conversant, logfile))
+        tlog("\nRecording session %s as %s." % (conversant, logfile))
         log = open(logfile, "w")
         log.write(captures[conversant])
         log.close()
     if not stop_service(service):
         success = False
-    print("\nRan %s tests in %.3f seconds." % (len(dialogue), duration))
+    tlog("\nRan %s tests in %.3f seconds." % (len(dialogue), duration))
     if success:
-        print("SUCCESS")
+        tlog("\nSUCCESS\n")
     else:
-        print("FAILURE")
+        tlog("\nFAILURE\n")
         sys.exit(1)