diff --git a/evennia/server/tests/test_server.py b/evennia/server/tests/test_server.py index 516ef8f48a..fdb67f2318 100644 --- a/evennia/server/tests/test_server.py +++ b/evennia/server/tests/test_server.py @@ -5,6 +5,7 @@ Test the main server component from unittest import TestCase from mock import MagicMock, patch, DEFAULT, call +from django.test import override_settings from evennia.utils.test_resources import unload_module @@ -19,6 +20,22 @@ class TestServer(TestCase): from evennia.server import server self.server = server + def test__server_maintenance_reset(self): + with patch.multiple("evennia.server.server", + LoopingCall=DEFAULT, + Evennia=DEFAULT, + _FLUSH_CACHE=DEFAULT, + connection=DEFAULT, + _IDMAPPER_CACHE_MAXSIZE=1000, + _MAINTENANCE_COUNT=0, + ServerConfig=DEFAULT) as mocks: + mocks['connection'].close = MagicMock() + mocks['ServerConfig'].objects.conf = MagicMock(return_value=100) + + # flush cache + self.server._server_maintenance() + mock['ServerConfig'].objects.conf.assert_called_with('runtime', default=0.0) + def test__server_maintenance_flush(self): with patch.multiple("evennia.server.server", LoopingCall=DEFAULT, @@ -126,9 +143,39 @@ class TestServer(TestCase): evennia = self.server.Evennia(MagicMock()) self.assertEqual(evennia.start_time, 1000) - def test_update_defaults(self): - evennia = self.server.Evennia(MagicMock()) - evennia.update_defaults() + @patch("evennia.objects.models.ObjectDB") + @patch("evennia.server.server.AccountDB") + @patch("evennia.server.server.ScriptDB") + @patch("evennia.comms.models.ChannelDB") + def test_update_defaults(self, mockchan, mockscript, mockacct, mockobj): + with patch.multiple("evennia.server.server", + ServerConfig=DEFAULT) as mocks: + + mockchan.objects.filter = MagicMock() + mockscript.objects.filter = MagicMock() + mockacct.objects.filter = MagicMock() + mockobj.objects.filter = MagicMock() + + # fake mismatches + settings_names = ("CMDSET_CHARACTER", "CMDSET_ACCOUNT", + "BASE_ACCOUNT_TYPECLASS", "BASE_OBJECT_TYPECLASS", + "BASE_CHARACTER_TYPECLASS", "BASE_ROOM_TYPECLASS", + "BASE_EXIT_TYPECLASS", "BASE_SCRIPT_TYPECLASS", + "BASE_CHANNEL_TYPECLASS") + fakes = {name: "Dummy.path" for name in settings_names} + + def _mock_conf(key, *args): + return fakes[key] + + mocks['ServerConfig'].objects.conf = _mock_conf + + evennia = self.server.Evennia(MagicMock()) + evennia.update_defaults() + + mockchan.objects.filter.assert_called() + mockscript.objects.filter.assert_called() + mockacct.objects.filter.assert_called() + mockobj.objects.filter.assert_called() def test_initial_setup(self): from evennia.utils.create import create_account @@ -142,3 +189,49 @@ class TestServer(TestCase): mocks['AccountDB'].objects.get = MagicMock(return_value=acct) evennia = self.server.Evennia(MagicMock()) evennia.run_initial_setup() + + def test_initial_setup_retry(self): + from evennia.utils.create import create_account + + acct = create_account("TestSuperuser", "test@test.com", "testpassword", + is_superuser=True) + + with patch.multiple("evennia.server.initial_setup", + ServerConfig=DEFAULT, + reset_server=DEFAULT, + AccountDB=DEFAULT) as mocks: + mocks['AccountDB'].objects.get = MagicMock(return_value=acct) + # a last_initial_setup_step > 0 + mocks['ServerConfig'].objects.conf = MagicMock(return_value=4) + evennia = self.server.Evennia(MagicMock()) + evennia.run_initial_setup() + acct.delete() + + @override_settings(DEFAULT_HOME="#1") + def test_run_init_hooks(self): + from evennia.utils import create + obj1 = create.object(key="HookTestObj1") + obj2 = create.object(key="HookTestObj2") + acct1 = create.account("HookAcct1", "hooktest1@test.com", "testpasswd") + acct2 = create.account("HookAcct2", "hooktest2@test.com", "testpasswd") + + with patch("evennia.objects.models.ObjectDB") as mockobj: + with patch("evennia.server.server.AccountDB") as mockacct: + + mockacct.get_all_cached_instances = MagicMock(return_value=[acct1, acct2]) + mockobj.get_all_cached_instances = MagicMock(return_value=[obj1, obj2]) + mockobj.objects.clear_all_sessids = MagicMock() + + evennia = self.server.Evennia(MagicMock()) + evennia.run_init_hooks('reload') + evennia.run_init_hooks('reset') + evennia.run_init_hooks('shutdown') + + mockacct.get_all_cached_instances.assert_called() + mockobj.get_all_cached_instances.assert_called() + mockobj.objects.clear_all_sessids.assert_called_with() + + @patch('evennia.server.server.INFO_DICT', {"test": "foo"}) + def test_get_info_dict(self): + evennia = self.server.Evennia(MagicMock()) + self.assertEqual(evennia.get_info_dict(), {"test": "foo"})