evennia/evennia/server/tests/test_launcher.py
2019-02-23 21:45:38 +01:00

118 lines
4 KiB
Python

"""
Test the evennia launcher.
"""
import os
import pickle
from anything import Something
from mock import patch, MagicMock
from twisted.internet import reactor
from twisted.trial.unittest import TestCase as TwistedTestCase
from evennia.server import evennia_launcher
from evennia.server.portal import amp
from twisted.internet.base import DelayedCall
DelayedCall.debug = True
@patch("evennia.server.evennia_launcher.Popen", new=MagicMock())
class TestLauncher(TwistedTestCase):
def test_is_windows(self):
self.assertEqual(evennia_launcher._is_windows(), os.name == 'nt')
def test_file_compact(self):
self.assertEqual(evennia_launcher._file_names_compact(
"foo/bar/test1", "foo/bar/test2"),
"foo/bar/test1 and test2")
self.assertEqual(evennia_launcher._file_names_compact(
"foo/test1", "foo/bar/test2"),
"foo/test1 and foo/bar/test2")
@patch("evennia.server.evennia_launcher.print")
def test_print_info(self, mockprint):
portal_dict = {
"servername": "testserver",
"version": "1",
"telnet": 1234,
"telnet_ssl": [1234, 2345],
"ssh": 1234,
"webserver_proxy": 1234,
"webclient": 1234,
"webserver_internal": 1234,
"amp": 1234
}
server_dict = {
"servername": "testserver",
"version": "1",
"webserver": [1234, 1234],
"amp": 1234,
"irc_rss": "irc.test",
"info": "testing mode",
"errors": ""
}
evennia_launcher._print_info(portal_dict, server_dict)
mockprint.assert_called()
def test_parse_status(self):
response = {"status": pickle.dumps(("teststring",))}
result = evennia_launcher._parse_status(response)
self.assertEqual(result, ("teststring",))
@patch("evennia.server.evennia_launcher.os.name", new="posix")
def test_get_twisted_cmdline(self):
pcmd, scmd = evennia_launcher._get_twistd_cmdline(False, False)
self.assertTrue("portal.py" in pcmd[1])
self.assertTrue("--pidfile" in pcmd[2])
self.assertTrue("server.py" in scmd[1])
self.assertTrue("--pidfile" in scmd[2])
pcmd, scmd = evennia_launcher._get_twistd_cmdline(True, True)
self.assertTrue("portal.py" in pcmd[1])
self.assertTrue("--pidfile" in pcmd[2])
self.assertTrue("--profiler=cprofile" in pcmd[4], "actual: {}".format(pcmd))
self.assertTrue("--profile=" in pcmd[5])
self.assertTrue("server.py" in scmd[1])
self.assertTrue("--pidfile" in scmd[2])
self.assertTrue("--pidfile" in scmd[2])
self.assertTrue("--profiler=cprofile" in scmd[4], "actual: {}".format(scmd))
self.assertTrue("--profile=" in scmd[5])
@patch("evennia.server.evennia_launcher.os.name", new="nt")
def test_get_twisted_cmdline_nt(self):
pcmd, scmd = evennia_launcher._get_twistd_cmdline(False, False)
self.assertTrue(len(pcmd) == 2, "actual: {}".format(pcmd))
self.assertTrue(len(scmd) == 2, "actual: {}".format(scmd))
@patch("evennia.server.evennia_launcher.reactor.stop")
def test_reactor_stop(self, mockstop):
evennia_launcher._reactor_stop()
mockstop.assert_called()
def _catch_wire_read(self, mocktransport):
"Parse what was supposed to be sent over the wire"
arg_list = mocktransport.write.call_args_list
all_sent = []
for i, cll in enumerate(arg_list):
args, kwargs = cll
raw_inp = args[0]
all_sent.append(raw_inp)
return all_sent
# @patch("evennia.server.portal.amp.amp.BinaryBoxProtocol.transport")
# def test_send_instruction_pstatus(self, mocktransport):
# deferred = evennia_launcher.send_instruction(
# evennia_launcher.PSTATUS,
# (),
# callback=MagicMock(),
# errback=MagicMock())
# on_wire = self._catch_wire_read(mocktransport)
# self.assertEqual(on_wire, "")
# return deferred