X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy%2Ftests%2Fselftest.py;h=bb19d331ff347f72031a432934c01e0be89c6f8c;hp=d5b8ac4d6712459f2aa4d2cdb4300eefbb5ae4fe;hb=a75fa6326ef030ad1dbbe25171c75180f93e657c;hpb=b27c62e7d11d4c221666e7e0241a8ea51902be88 diff --git a/mudpy/tests/selftest.py b/mudpy/tests/selftest.py index d5b8ac4..bb19d33 100644 --- a/mudpy/tests/selftest.py +++ b/mudpy/tests/selftest.py @@ -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 @@ -338,17 +340,32 @@ test_show_element = ( r' \x1b\[32mgender: \x1b\[31mfemale.*> ', ""), ) -test_show_result = ( - (2, "> ", "show result 12345*67890"), - (2, r"\r\n838102050\r\n.*> ", "show result 1/0"), - (2, r"Your expression raised an exception.*division by zero.*> ", - "show result mudpy"), - (2, r" ", "show result re"), - (2, r"Your expression raised an exception.*name 're' is not defined.*> ", - "show result universe"), - (2, r" ", "show result actor"), - (2, r"Your expression raised an exception.*name 'actor' is not " - r"defined.*> ", ""), +test_evaluate = ( + (2, "> ", "evaluate 12345*67890"), + (2, r"\r\n838102050\r\n.*> ", "evaluate 1/0"), + (2, "Your expression raised an exception.*division by zero.*> ", + "evaluate mudpy"), + (2, " ", "evaluate re"), + (2, "Your expression raised an exception.*name 're' is not defined.*> ", + "evaluate universe"), + (2, r" ", "evaluate actor"), + (2, "Your expression raised an exception.*name 'actor' is not defined.*> ", + "evaluate dir(mudpy)"), + (2, "__builtins__.*> ", "evaluate mudpy.__builtins__.open"), + (2, "not allowed.*> ", "evaluate (lambda x: x + 1)(2)"), + (2, "not allowed.*> ", ""), +) + +test_debug_restricted = ( + (0, "> ", "help evaluate"), + (0, r"That is not an available command\.", "evaluate"), + (0, '(not sure what "evaluate" means|Arglebargle, glop-glyf)', ""), +) + +test_debug_disabled = ( + (2, "> ", "help evaluate"), + (2, r"That is not an available command\.", "evaluate"), + (2, '(not sure what "evaluate" means|Arglebargle, glop-glyf)', ""), ) test_show_log = ( @@ -424,7 +441,9 @@ dialogue = odict(( (test_show_groups, "show groups"), (test_show_group, "show group"), (test_show_element, "show element"), - (test_show_result, "show result of a python expression"), + (test_evaluate, "show results of python expressions"), + (test_debug_restricted, "only admins can run debug commands"), + (test_debug_disabled, "debugging commands only in debug mode"), (test_show_log, "show log"), (test_custom_loglevel, "custom loglevel"), (test_invalid_loglevel, "invalid loglevel"), @@ -432,6 +451,14 @@ dialogue = odict(( (final_cleanup, "delete remaining accounts"), )) +debug_tests = ( + test_evaluate, +) + +nondebug_tests = ( + test_debug_disabled, +) + def start_service(config): # Clean up any previously run daemon which didn't terminate @@ -450,9 +477,7 @@ def start_service(config): # Clean up any previous test output for f in pathlib.Path(".").glob("capture_*.log"): - # have to use .name here since remove() doesn't support passing a - # PosixPath argument until Python3.6 - os.remove(f.name) + os.remove(f) for d in ("data", "var"): shutil.rmtree(d, ignore_errors=True) @@ -461,7 +486,7 @@ def start_service(config): stdout=subprocess.PIPE, stderr=subprocess.PIPE) time.sleep(1) - return(service) + return service def stop_service(service): @@ -469,7 +494,7 @@ def stop_service(service): # The no-op case when no service was started if service is None: - return(success) + return success # This handles when the service is running as a direct child process service.terminate() @@ -503,7 +528,7 @@ def stop_service(service): with open("capture_stderr.log", "w") as serviceerr: serviceerr.write(stderr.decode("utf-8")) - return(success) + return success def tlog(message, quiet=False): @@ -526,6 +551,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 +574,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()