Make selftest dialogue mutable
authorJeremy Stanley <fungi@yuggoth.org>
Sat, 3 Oct 2020 17:45:47 +0000 (17:45 +0000)
committerJeremy Stanley <fungi@yuggoth.org>
Sun, 4 Oct 2020 22:37:36 +0000 (22:37 +0000)
In order to support future selectivity of test sets, replace the
immutable tuple of all tests with a dict keyed by test object.
Iterate over a copy of it so that the original is not altered when
tests are eventually removed during runtime. For Python 3.5 and
earlier, use OrderedDict so that test order is explicitly preserved.

mudpy/tests/selftest.py

index b1eb7cf..d5b8ac4 100644 (file)
@@ -11,6 +11,13 @@ import sys
 import telnetlib
 import time
 
+# TODO(fungi) Clean this up once Python 3.5 is no longer supported
+if sys.version < "3.6":
+    import collections
+    odict = collections.OrderedDict
+else:
+    odict = dict
+
 pidfile = "var/mudpy.pid"
 
 test_account0_setup = (
@@ -378,7 +385,7 @@ final_cleanup = (
     (2, r"Disconnecting\.\.\.", ""),
 )
 
-dialogue = (
+dialogue = odict((
     (test_account0_setup, "first account setup"),
     (test_account1_setup, "second account setup"),
     (test_actor_appears, "actor spontaneous appearance"),
@@ -423,7 +430,7 @@ dialogue = (
     (test_invalid_loglevel, "invalid loglevel"),
     (test_log_no_errors, "no errors logged"),
     (final_cleanup, "delete remaining accounts"),
-)
+))
 
 
 def start_service(config):
@@ -534,7 +541,8 @@ def main():
     for luser in lusers:
         luser.open("::1", 4000)
         luser.set_option_negotiation_callback(option_callback)
-    for test, description in dialogue:
+    selected_dialogue = odict(dialogue)
+    for test, description in selected_dialogue.items():
         tlog("\nTesting %s..." % description)
         test_start = time.time()
         for conversant, question, answer in test: