Run different selftests when debug mode is engaged
authorJeremy Stanley <fungi@yuggoth.org>
Sat, 3 Oct 2020 19:04:58 +0000 (19:04 +0000)
committerJeremy Stanley <fungi@yuggoth.org>
Sun, 4 Oct 2020 22:37:38 +0000 (22:37 +0000)
Add two skiplist tuples to the selftest framework, one for tests to
remove when debug mode is on, another for tests to remove when debug
mode is off. This is not used yet, so the tuples are initially
empty. Also enable debug mode in the daemon config fixture so that
debug functionality can be tested in the normal selftest run. The
default example config (tested with tox -e selftest_config) covers
the debug disabled case.

mudpy/tests/fixtures/test_daemon.yaml
mudpy/tests/selftest.py

index 318967a..eb2edcd 100644 (file)
@@ -52,7 +52,7 @@ _lock: true
 # Debugging commands are dangerous, and may result in granting
 # administrative users access to the system account under which the
 # service runs. Be very sure you trust your admins before enabling!
-.mudpy.limit.debug: true
+.mudpy.limit.debug: true
 .mudpy.limit.password_tries: 3
 
 .mudpy.log.file: var/mudpy.log
index d5b8ac4..0bd2dd9 100644 (file)
@@ -11,6 +11,8 @@ import sys
 import telnetlib
 import time
 
+import yaml
+
 # TODO(fungi) Clean this up once Python 3.5 is no longer supported
 if sys.version < "3.6":
     import collections
@@ -432,6 +434,12 @@ dialogue = odict((
     (final_cleanup, "delete remaining accounts"),
 ))
 
+debug_tests = (
+)
+
+nondebug_tests = (
+)
+
 
 def start_service(config):
     # Clean up any previously run daemon which didn't terminate
@@ -526,6 +534,13 @@ def option_callback(telnet_socket, command, option):
         telnet_socket.send(telnetlib.IAC + telnetlib.DONT + option)
 
 
+def check_debug():
+    if len(sys.argv) > 1:
+        config = yaml.safe_load(open(sys.argv[1]))
+        return config.get(".mudpy.limit.debug", False)
+    return False
+
+
 def main():
     captures = ["", "", ""]
     lusers = [telnetlib.Telnet(), telnetlib.Telnet(), telnetlib.Telnet()]
@@ -542,6 +557,12 @@ def main():
         luser.open("::1", 4000)
         luser.set_option_negotiation_callback(option_callback)
     selected_dialogue = odict(dialogue)
+    if check_debug():
+        for test in nondebug_tests:
+            del selected_dialogue[test]
+    else:
+        for test in debug_tests:
+            del selected_dialogue[test]
     for test, description in selected_dialogue.items():
         tlog("\nTesting %s..." % description)
         test_start = time.time()