From aa2409fc6489721703ec46c255e99f0a785a70f5 Mon Sep 17 00:00:00 2001 From: trhr Date: Sun, 3 May 2020 23:56:50 -0500 Subject: [PATCH 1/5] added return docstring on create_script --- evennia/commands/_trial_temp/_trial_marker | 0 evennia/utils/create.py | 3 +++ 2 files changed, 3 insertions(+) create mode 100755 evennia/commands/_trial_temp/_trial_marker diff --git a/evennia/commands/_trial_temp/_trial_marker b/evennia/commands/_trial_temp/_trial_marker new file mode 100755 index 0000000000..e69de29bb2 diff --git a/evennia/utils/create.py b/evennia/utils/create.py index 182a1e4ba3..74fa49ffa2 100644 --- a/evennia/utils/create.py +++ b/evennia/utils/create.py @@ -232,6 +232,9 @@ def create_script( attributes (list): List if tuples (key, value) or (key, value, category) (key, value, lockstring) or (key, value, lockstring, default_access). + Returns: + script (obj): An instance of the script created + See evennia.scripts.manager for methods to manipulate existing scripts in the database. From 0ea77b959b32d09bc2948ca38b0f485043183856 Mon Sep 17 00:00:00 2001 From: trhr Date: Sat, 9 May 2020 22:22:08 -0500 Subject: [PATCH 2/5] Websocket unit tests --- evennia/server/portal/tests.py | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/evennia/server/portal/tests.py b/evennia/server/portal/tests.py index df01a29981..696159155e 100644 --- a/evennia/server/portal/tests.py +++ b/evennia/server/portal/tests.py @@ -1,3 +1,4 @@ + try: from django.utils.unittest import TestCase except ImportError: @@ -12,8 +13,12 @@ import sys import string import mock import pickle +import json + from mock import Mock, MagicMock from evennia.server.portal import irc +from evennia.utils.test_resources import mockdelay, EvenniaTest, patch +from twisted import internet from twisted.conch.telnet import IAC, WILL, DONT, SB, SE, NAWS, DO from twisted.test import proto_helpers @@ -32,6 +37,9 @@ from .telnet_oob import MSDP, MSDP_VAL, MSDP_VAR from .amp import AMPMultiConnectionProtocol, MsgServer2Portal, MsgPortal2Server, AMP_MAXLEN from .amp_server import AMPServerFactory +from autobahn.twisted.websocket import WebSocketServerFactory, WebSocketServerProtocol +from .webclient import WebSocketClient + class TestAMPServer(TwistedTestCase): """ @@ -269,3 +277,54 @@ class TestTelnet(TwistedTestCase): self.proto.nop_keep_alive.stop() self.proto._handshake_delay.cancel() return d + + +class WebSocket(EvenniaTest): + def setUp(self): + super().setUp() + # from autobahn.websocket.protocol import WebSocketProtocol + # WebSocketServerProtocol.log = Mock() + # internet.base.DelayedCall.debug = True + # self.proto = WebSocketClient() + # self.proto.factory = WebSocketServerFactory() + # self.proto.factory.sessionhandler = PORTAL_SESSIONS + # self.proto.sessionhandler = PORTAL_SESSIONS + # self.proto.sessionhandler.portal = Mock() + # self.proto.data_in = MagicMock() + # self.proto.data_out = MagicMock() + # self.transport = WebSocketProtocol() + # self.transport.client = ["localhost"] + # self.transport.setTcpKeepAlive = Mock() + # self.proto.state = WebSocketProtocol.STATE_OPEN + self.proto = WebSocketClient() + self.proto.factory = WebSocketServerFactory() + self.proto.factory.sessionhandler = PORTAL_SESSIONS + self.proto.sessionhandler = PORTAL_SESSIONS + self.proto.sessionhandler.portal = Mock() + self.proto.transport = proto_helpers.StringTransport() + #self.proto.transport = proto_helpers.FakeDatagramTransport() + self.proto.transport.client = ["localhost"] + self.proto.transport.setTcpKeepAlive = Mock() + self.proto.state = MagicMock() + self.addCleanup(self.proto.factory.sessionhandler.disconnect_all) + + def tearDown(self): + super().tearDown() + + def test_data_in(self): + self.proto.sessionhandler.data_in = MagicMock() + self.proto.onOpen() + msg = json.dumps(["logged_in", (), {}]).encode() + self.proto.onMessage(msg, isBinary=False) + self.proto.sessionhandler.data_in.assert_called_with(self.proto, logged_in=[[], {}]) + sendStr = "You can get anything you want at Alice's Restaurant." + msg = json.dumps(["text", (sendStr,), {}]).encode() + self.proto.onMessage(msg, isBinary=False) + self.proto.sessionhandler.data_in.assert_called_with(self.proto, text=[[sendStr], {}]) + + def test_data_out(self): + self.proto.onOpen() + self.proto.sendLine = MagicMock() + msg = json.dumps(["logged_in", (), {}]) + self.proto.sessionhandler.data_out(self.proto, text=[["Excepting Alice"], {}]) + self.proto.sendLine.assert_called_with(json.dumps(['text', ['Excepting Alice'], {}])) From 064a690f46bd2194e981781c01df6da1ad6d3601 Mon Sep 17 00:00:00 2001 From: trhr Date: Sat, 9 May 2020 22:25:51 -0500 Subject: [PATCH 3/5] Cleanup --- evennia/server/portal/tests.py | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/evennia/server/portal/tests.py b/evennia/server/portal/tests.py index 696159155e..4e2bca26fe 100644 --- a/evennia/server/portal/tests.py +++ b/evennia/server/portal/tests.py @@ -17,8 +17,7 @@ import json from mock import Mock, MagicMock from evennia.server.portal import irc -from evennia.utils.test_resources import mockdelay, EvenniaTest, patch -from twisted import internet +from evennia.utils.test_resources import EvenniaTest from twisted.conch.telnet import IAC, WILL, DONT, SB, SE, NAWS, DO from twisted.test import proto_helpers @@ -37,7 +36,7 @@ from .telnet_oob import MSDP, MSDP_VAL, MSDP_VAR from .amp import AMPMultiConnectionProtocol, MsgServer2Portal, MsgPortal2Server, AMP_MAXLEN from .amp_server import AMPServerFactory -from autobahn.twisted.websocket import WebSocketServerFactory, WebSocketServerProtocol +from autobahn.twisted.websocket import WebSocketServerFactory from .webclient import WebSocketClient @@ -282,20 +281,6 @@ class TestTelnet(TwistedTestCase): class WebSocket(EvenniaTest): def setUp(self): super().setUp() - # from autobahn.websocket.protocol import WebSocketProtocol - # WebSocketServerProtocol.log = Mock() - # internet.base.DelayedCall.debug = True - # self.proto = WebSocketClient() - # self.proto.factory = WebSocketServerFactory() - # self.proto.factory.sessionhandler = PORTAL_SESSIONS - # self.proto.sessionhandler = PORTAL_SESSIONS - # self.proto.sessionhandler.portal = Mock() - # self.proto.data_in = MagicMock() - # self.proto.data_out = MagicMock() - # self.transport = WebSocketProtocol() - # self.transport.client = ["localhost"] - # self.transport.setTcpKeepAlive = Mock() - # self.proto.state = WebSocketProtocol.STATE_OPEN self.proto = WebSocketClient() self.proto.factory = WebSocketServerFactory() self.proto.factory.sessionhandler = PORTAL_SESSIONS From 4fb25e7ee7ef36867a14370cd3cea92743a8ebd9 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 16 May 2020 11:01:46 +0200 Subject: [PATCH 4/5] Test passing sys.argv directly into execute_from_command --- evennia/server/evennia_launcher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/server/evennia_launcher.py b/evennia/server/evennia_launcher.py index 90c40747c6..7a00f8e07d 100644 --- a/evennia/server/evennia_launcher.py +++ b/evennia/server/evennia_launcher.py @@ -2282,7 +2282,7 @@ def main(): # but keep 'evennia' as the name instead of django-admin. This is # an exit condition. sys.argv[0] = re.sub(r"(-script\.pyw?|\.exe)?$", "", sys.argv[0]) - sys.exit(execute_from_command_line()) + sys.exit(execute_from_command_line(sys.argv)) elif not args.tail_log: # no input; print evennia info (don't pring if we're tailing log) From 8ba59665b2b271b2bc41e05145021a0fc4c52f66 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 16 May 2020 17:04:55 +0200 Subject: [PATCH 5/5] Fix reactor-mock for unittest --- evennia/server/portal/tests.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/evennia/server/portal/tests.py b/evennia/server/portal/tests.py index 4e2bca26fe..8ba98732a3 100644 --- a/evennia/server/portal/tests.py +++ b/evennia/server/portal/tests.py @@ -22,6 +22,7 @@ from evennia.utils.test_resources import EvenniaTest from twisted.conch.telnet import IAC, WILL, DONT, SB, SE, NAWS, DO from twisted.test import proto_helpers from twisted.trial.unittest import TestCase as TwistedTestCase +from twisted.internet.base import DelayedCall from .telnet import TelnetServerFactory, TelnetProtocol from .portal import PORTAL_SESSIONS @@ -226,10 +227,12 @@ class TestTelnet(TwistedTestCase): self.transport = proto_helpers.StringTransport() self.addCleanup(factory.sessionhandler.disconnect_all) + @mock.patch("evennia.server.portal.portalsessionhandler.reactor", new=MagicMock()) def test_mudlet_ttype(self): self.transport.client = ["localhost"] self.transport.setTcpKeepAlive = Mock() d = self.proto.makeConnection(self.transport) + # test suppress_ga self.assertTrue(self.proto.protocol_flags["NOGOAHEAD"]) self.proto.dataReceived(IAC + DONT + SUPPRESS_GA) @@ -278,7 +281,7 @@ class TestTelnet(TwistedTestCase): return d -class WebSocket(EvenniaTest): +class TestWebSocket(EvenniaTest): def setUp(self): super().setUp() self.proto = WebSocketClient() @@ -292,10 +295,12 @@ class WebSocket(EvenniaTest): self.proto.transport.setTcpKeepAlive = Mock() self.proto.state = MagicMock() self.addCleanup(self.proto.factory.sessionhandler.disconnect_all) + DelayedCall.debug = True def tearDown(self): super().tearDown() + @mock.patch("evennia.server.portal.portalsessionhandler.reactor", new=MagicMock()) def test_data_in(self): self.proto.sessionhandler.data_in = MagicMock() self.proto.onOpen() @@ -307,6 +312,7 @@ class WebSocket(EvenniaTest): self.proto.onMessage(msg, isBinary=False) self.proto.sessionhandler.data_in.assert_called_with(self.proto, text=[[sendStr], {}]) + @mock.patch("evennia.server.portal.portalsessionhandler.reactor", new=MagicMock()) def test_data_out(self): self.proto.onOpen() self.proto.sendLine = MagicMock()