X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy%2Ftests%2Fselftest.py;h=c6f339866011342f65a91f9bb84fa264c8981039;hp=d5b8ac4d6712459f2aa4d2cdb4300eefbb5ae4fe;hb=d1362ea83d4d7eae9dd786109c02224928b2bf01;hpb=b27c62e7d11d4c221666e7e0241a8ea51902be88 diff --git a/mudpy/tests/selftest.py b/mudpy/tests/selftest.py index d5b8ac4..c6f3398 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 @@ -526,6 +553,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 +576,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()