-captures = ["", ""]
-lusers = [telnetlib.Telnet(), telnetlib.Telnet()]
-success = True
-for luser in lusers:
- luser.open("::1", 6669)
-for conversant, question, answer in dialogue:
- print("luser%s waiting for: %s" % (conversant, question))
- index, match, received = lusers[conversant].expect(
- [question.encode("utf-8")], 5)
- captures[conversant] += received.decode("utf-8")
- try:
- captures[conversant] += lusers[
- conversant].read_very_eager().decode("utf-8")
- except:
- pass
- if index is not 0:
- print("ERROR: luser%s did not receive expected string:\n\n%s"
- % (conversant, question))
- success = False
- break
- print("luser%s sending: %s" % (conversant, answer))
- lusers[conversant].write(("%s\r\n" % answer).encode("utf-8"))
- captures[conversant] += "%s\r\n" % answer
-for conversant in range(len(captures)):
- try:
- captures[conversant] += lusers[
- conversant].read_very_eager().decode("utf-8")
- except:
- pass
- lusers[conversant].close()
- log = open("capture_%s.log" % conversant, "w")
- log.write(captures[conversant])
- log.close()
-if not success:
- sys.exit(1)
+test_admin_setup = (
+ (2, "Identify yourself:", "testadmin"),
+ (2, "Enter your choice:", "n"),
+ (2, "Enter a new password for \"testadmin\":", "Test789"),
+ (2, "Enter the same new password again:", "Test789"),
+ (2, "What would you like to do\?", "c"),
+ (2, "Pick a birth gender for your new avatar:", "m"),
+ (2, "Choose a name for him:", "1"),
+ (2, "What would you like to do?", "a"),
+ (2, "Whom would you like to awaken?", ""),
+)
+
+test_admin_restriction = (
+ (0, "> ", "help halt"),
+ (0, "That is not an available command\.", "halt"),
+ (0, '(not sure what "halt" means|Arglebargle, glop-glyf)', ""),
+)
+
+test_admin_help = (
+ (2, "> ", "help"),
+ (2, "halt.*Shut down the world\.", "help halt"),
+ (2, "This will save all active accounts", ""),
+)
+
+test_show_element = (
+ (2, "> ", "show element internal:counters"),
+ (2, "These are the properties of the \"internal:counters\" element "
+ "\(in.*data/internal\.yaml\"\):.* \x1b\[32melapsed: "
+ "\x1b\[31m[0-9]+\x1b\[0m", ""),
+)
+
+test_show_log = (
+ (2, "> ", "show log"),
+ (2, "There are [0-9]+ log lines in memory and [0-9]+ at or above level "
+ "[0-9]+\. The matching lines\r\nfrom [0-9]+ to [0-9]+ are:", ""),
+)
+
+test_log_no_errors = (
+ (2, "> ", "show log 7"),
+ (2, "None of the [0-9]+ lines in memory matches your request\.", ""),
+)
+
+dialogue = (
+ (test_account0_setup, "first account setup"),
+ (test_account1_setup, "second account setup"),
+ (test_actor_appears, "actor spontaneous appearance"),
+ (test_explicit_punctuation, " explicit punctuation"),
+ (test_implicit_punctuation, "implicit punctuation"),
+ (test_typo_replacement, "typo replacement"),
+ (test_sentence_capitalization, "sentence capitalization"),
+ (test_chat_mode, "chat mode"),
+ (test_movement, "movement"),
+ (test_actor_disappears, "actor spontaneous disappearance"),
+ (test_account1_teardown, "second account teardown"),
+ (test_admin_setup, "admin account setup"),
+ (test_admin_restriction, "restricted admin commands"),
+ (test_admin_help, "admin help"),
+ (test_show_element, "show element"),
+ (test_show_log, "show log"),
+ (test_log_no_errors, "no errors logged"),
+)
+
+
+def main():
+ captures = ["", "", ""]
+ lusers = [telnetlib.Telnet(), telnetlib.Telnet(), telnetlib.Telnet()]
+ success = True
+ start = time.time()
+ for luser in lusers:
+ luser.open("::1", 6669)
+ for test, description in dialogue:
+ print("\nTesting %s..." % description)
+ test_start = time.time()
+ for conversant, question, answer in test:
+ print("luser%s waiting for: %s" % (conversant, question))
+ index, match, received = lusers[conversant].expect(
+ [re.compile(question.encode("utf-8"), flags=re.DOTALL)], 5)
+ captures[conversant] += received.decode("utf-8")
+ try:
+ captures[conversant] += lusers[
+ conversant].read_very_eager().decode("utf-8")
+ except:
+ pass
+ if index is not 0:
+ print("ERROR: luser%s did not receive expected string:\n\n"
+ "%s\n\n"
+ "Check the end of capture_%s.log for received data."
+ % (conversant, question, conversant))
+ success = False
+ break
+ print("luser%s sending: %s" % (conversant, answer))
+ lusers[conversant].write(("%s\r\n" % answer).encode("utf-8"))
+ captures[conversant] += "%s\r\n" % answer
+ if not success:
+ break
+ print("Completed in %.3f seconds." % (time.time() - test_start))
+ duration = time.time() - start
+ print("")
+ for conversant in range(len(captures)):
+ try:
+ captures[conversant] += lusers[
+ conversant].read_very_eager().decode("utf-8")
+ except:
+ pass
+ lusers[conversant].close()
+ logfile = "capture_%s.log" % conversant
+ print("Recording session %s as %s." % (conversant, logfile))
+ log = open(logfile, "w")
+ log.write(captures[conversant])
+ log.close()
+ print("\nRan %s tests in %.3f seconds." % (len(dialogue), duration))
+ if success:
+ print("SUCCESS")
+ else:
+ print("FAILURE")
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ sys.exit(main())