X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy%2Ftests%2Fselftest.py;h=c6f339866011342f65a91f9bb84fa264c8981039;hp=b1eb7cff93f18504608783ecf250c0bbb51f2915;hb=d1362ea83d4d7eae9dd786109c02224928b2bf01;hpb=ed9b25ba4a86c6e969d35f053b69ae2ed5b1990f diff --git a/mudpy/tests/selftest.py b/mudpy/tests/selftest.py index b1eb7cf..c6f3398 100644 --- a/mudpy/tests/selftest.py +++ b/mudpy/tests/selftest.py @@ -11,6 +11,15 @@ 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 + odict = collections.OrderedDict +else: + odict = dict + pidfile = "var/mudpy.pid" test_account0_setup = ( @@ -331,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 = ( @@ -378,7 +402,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"), @@ -417,12 +441,22 @@ dialogue = ( (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"), (test_log_no_errors, "no errors logged"), (final_cleanup, "delete remaining accounts"), +)) + +debug_tests = ( + test_evaluate, +) + +nondebug_tests = ( + test_debug_disabled, ) @@ -519,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()] @@ -534,7 +575,14 @@ 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) + 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() for conversant, question, answer in test: