Changed unittest suite to use dummy sessions.
This commit is contained in:
parent
4659ddbfc3
commit
bbba695380
6 changed files with 66 additions and 37 deletions
|
|
@ -214,7 +214,6 @@ def format_script_list(scripts):
|
||||||
table.align = 'r'
|
table.align = 'r'
|
||||||
for script in scripts:
|
for script in scripts:
|
||||||
nextrep = script.time_until_next_repeat()
|
nextrep = script.time_until_next_repeat()
|
||||||
print type(script),
|
|
||||||
table.add_row([script.id,
|
table.add_row([script.id,
|
||||||
script.obj.key if (hasattr(script, 'obj') and script.obj) else "<Global>",
|
script.obj.key if (hasattr(script, 'obj') and script.obj) else "<Global>",
|
||||||
script.key,
|
script.key,
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,11 @@ main test suite started with
|
||||||
import re
|
import re
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.unittest import TestCase
|
from django.utils.unittest import TestCase
|
||||||
|
from src.server.serversession import ServerSession
|
||||||
|
from src.objects.objects import Object, Character
|
||||||
from src.players.player import Player
|
from src.players.player import Player
|
||||||
from src.utils import create, utils, ansi
|
from src.utils import create, utils, ansi
|
||||||
|
from src.server.sessionhandler import SESSIONS
|
||||||
|
|
||||||
from django.db.models.signals import pre_save
|
from django.db.models.signals import pre_save
|
||||||
from src.server.caches import field_pre_save
|
from src.server.caches import field_pre_save
|
||||||
|
|
@ -30,6 +33,19 @@ _RE = re.compile(r"^\+|-+\+|\+-+|--*|\|", re.MULTILINE)
|
||||||
# Command testing
|
# Command testing
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
|
def dummy_data_out(self, text=None, **kwargs):
|
||||||
|
pass
|
||||||
|
SESSIONS.data_out = dummy_data_out
|
||||||
|
|
||||||
|
class TestObjectClass(Object):
|
||||||
|
def msg(self, text="", **kwargs):
|
||||||
|
"test message"
|
||||||
|
pass
|
||||||
|
class TestCharacterClass(Character):
|
||||||
|
def msg(self, text="", **kwargs):
|
||||||
|
"test message"
|
||||||
|
if self.player:
|
||||||
|
self.player.msg(text=text, **kwargs)
|
||||||
class TestPlayerClass(Player):
|
class TestPlayerClass(Player):
|
||||||
def msg(self, text="", **kwargs):
|
def msg(self, text="", **kwargs):
|
||||||
"test message"
|
"test message"
|
||||||
|
|
@ -48,22 +64,30 @@ class CommandTest(TestCase):
|
||||||
CID = 0 # we must set a different CID in every test to avoid unique-name collisions creating the objects
|
CID = 0 # we must set a different CID in every test to avoid unique-name collisions creating the objects
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
"sets up testing environment"
|
"sets up testing environment"
|
||||||
|
self.player = create.create_player("TestPlayer%i" % self.CID, "test@test.com", "testpassword", typeclass=TestPlayerClass)
|
||||||
|
self.player2 = create.create_player("TestPlayer%ib" % self.CID, "test@test.com", "testpassword", typeclass=TestPlayerClass)
|
||||||
self.room1 = create.create_object("src.objects.objects.Room", key="Room%i"%self.CID)
|
self.room1 = create.create_object("src.objects.objects.Room", key="Room%i"%self.CID)
|
||||||
self.room1.db.desc = "room_desc"
|
self.room1.db.desc = "room_desc"
|
||||||
self.room2 = create.create_object("src.objects.objects.Room", key="Room%ib" % self.CID)
|
self.room2 = create.create_object("src.objects.objects.Room", key="Room%ib" % self.CID)
|
||||||
self.obj1 = create.create_object("src.objects.objects.Object", key="Obj%i" % self.CID, location=self.room1, home=self.room1)
|
self.obj1 = create.create_object(TestObjectClass, key="Obj%i" % self.CID, location=self.room1, home=self.room1)
|
||||||
self.obj2 = create.create_object("src.objects.objects.Object", key="Obj%ib" % self.CID, location=self.room1, home=self.room1)
|
self.obj2 = create.create_object(TestObjectClass, key="Obj%ib" % self.CID, location=self.room1, home=self.room1)
|
||||||
self.char1 = create.create_object("src.objects.objects.Character", key="Char%i" % self.CID, location=self.room1, home=self.room1)
|
self.char1 = create.create_object(TestCharacterClass, key="Char%i" % self.CID, location=self.room1, home=self.room1)
|
||||||
self.char2 = create.create_object("src.objects.objects.Character", key="Char%ib" % self.CID, location=self.room1, home=self.room1)
|
self.char2 = create.create_object(TestCharacterClass, key="Char%ib" % self.CID, location=self.room1, home=self.room1)
|
||||||
self.script = create.create_script("src.scripts.scripts.Script", key="Script%i" % self.CID)
|
|
||||||
self.player = create.create_player("TestPlayer%i" % self.CID, "test@test.com", "testpassword", typeclass=TestPlayerClass)
|
|
||||||
self.player2 = create.create_player("TestPlayer%ib" % self.CID, "test@test.com", "testpassword", typeclass=TestPlayerClass)
|
|
||||||
|
|
||||||
self.player.permissions.add("Immortals")
|
|
||||||
self.char1.player = self.player
|
self.char1.player = self.player
|
||||||
self.char1.sessid = 1
|
self.char2.player = self.player2
|
||||||
|
self.script = create.create_script("src.scripts.scripts.Script", key="Script%i" % self.CID)
|
||||||
|
self.player.permissions.add("Immortals")
|
||||||
|
|
||||||
def call(self, cmdobj, args, msg=None, cmdset=None, noansi=True):
|
# set up a fake session
|
||||||
|
|
||||||
|
global SESSIONS
|
||||||
|
session = ServerSession()
|
||||||
|
session.init_session("telnet", ("localhost", "testmode"), SESSIONS)
|
||||||
|
session.sessid = self.CID
|
||||||
|
SESSIONS.portal_connect(session.get_sync_data())
|
||||||
|
SESSIONS.login(SESSIONS.session_from_sessid(self.CID), self.player, testmode=True)
|
||||||
|
|
||||||
|
def call(self, cmdobj, args, msg=None, cmdset=None, noansi=True, caller=None):
|
||||||
"""
|
"""
|
||||||
Test a command by assigning all the needed
|
Test a command by assigning all the needed
|
||||||
properties to cmdobj and running
|
properties to cmdobj and running
|
||||||
|
|
@ -74,15 +98,17 @@ class CommandTest(TestCase):
|
||||||
The msgreturn value is compared to eventual
|
The msgreturn value is compared to eventual
|
||||||
output sent to caller.msg in the game
|
output sent to caller.msg in the game
|
||||||
"""
|
"""
|
||||||
cmdobj.caller = self.char1
|
cmdobj.caller = caller if caller else self.char1
|
||||||
|
#print "call:", cmdobj.key, cmdobj.caller, caller if caller else cmdobj.caller.player
|
||||||
|
#print "perms:", cmdobj.caller.permissions.all()
|
||||||
cmdobj.cmdstring = cmdobj.key
|
cmdobj.cmdstring = cmdobj.key
|
||||||
cmdobj.args = args
|
cmdobj.args = args
|
||||||
cmdobj.cmdset = cmdset
|
cmdobj.cmdset = cmdset
|
||||||
cmdobj.sessid = 1
|
cmdobj.sessid = self.CID
|
||||||
cmdobj.session = None
|
cmdobj.session = SESSIONS.session_from_sessid(self.CID)
|
||||||
cmdobj.player = self.player
|
cmdobj.player = self.player
|
||||||
cmdobj.raw_string = cmdobj.key + " " + args
|
cmdobj.raw_string = cmdobj.key + " " + args
|
||||||
cmdobj.obj = self.char1
|
cmdobj.obj = caller if caller else self.char1
|
||||||
# test
|
# test
|
||||||
self.char1.player.ndb.stored_msg = []
|
self.char1.player.ndb.stored_msg = []
|
||||||
cmdobj.at_pre_cmd()
|
cmdobj.at_pre_cmd()
|
||||||
|
|
@ -160,19 +186,19 @@ class TestAdmin(CommandTest):
|
||||||
|
|
||||||
from src.commands.default import player
|
from src.commands.default import player
|
||||||
class TestPlayer(CommandTest):
|
class TestPlayer(CommandTest):
|
||||||
CID = 5
|
CID = 5
|
||||||
def test_cmds(self):
|
def test_cmds(self):
|
||||||
self.call(player.CmdOOCLook(), "", "Account TestPlayer5 (you are OutofCharacter)")
|
self.call(player.CmdOOCLook(), "", "Account TestPlayer5 (you are OutofCharacter)", caller=self.player)
|
||||||
self.call(player.CmdIC(), "Char5","Char5 is now acted from another")
|
self.call(player.CmdPassword(), "testpassword = testpassword", "Password changed.", caller=self.player)
|
||||||
self.call(player.CmdOOC(), "", "You are already")
|
self.call(player.CmdEncoding(), "", "Default encoding:", caller=self.player)
|
||||||
self.call(player.CmdPassword(), "testpassword = testpassword", "Password changed.")
|
self.call(player.CmdWho(), "", "Players:", caller=self.player)
|
||||||
self.call(player.CmdEncoding(), "", "Default encoding:")
|
self.call(player.CmdQuit(), "", "Quitting. Hope to see you soon again.", caller=self.player)
|
||||||
self.call(player.CmdWho(), "", "Players:")
|
self.call(player.CmdSessions(), "", "Your current session(s):", caller=self.player)
|
||||||
self.call(player.CmdQuit(), "", "Quitting. Hope to see you soon again.")
|
self.call(player.CmdColorTest(), "ansi", "ANSI colors:", caller=self.player)
|
||||||
self.call(player.CmdSessions(), "", "Your current session(s):")
|
self.call(player.CmdCharCreate(), "Test1=Test char","Created new character Test1. Use @ic Test1 to enter the game", caller=self.player)
|
||||||
self.call(player.CmdColorTest(), "ansi", "ANSI colors:")
|
self.call(player.CmdQuell(), "", "Quelling Player permissions (immortals). Use @unquell to get them back.", caller=self.player)
|
||||||
self.call(player.CmdCharCreate(), "Test1=Test char","Created new character Test1. Use @ic Test1 to enter the game")
|
self.call(player.CmdIC(), "Char5","Char5 is now acted from another", caller=self.player)
|
||||||
self.call(player.CmdQuell(), "", "Quelling Player permissions (Immortals). Use @unquell to get them back.")
|
self.call(player.CmdOOC(), "", "You are already", caller=self.player)
|
||||||
|
|
||||||
from src.commands.default import building
|
from src.commands.default import building
|
||||||
class TestBuilding(CommandTest):
|
class TestBuilding(CommandTest):
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ from src.commands.cmdsethandler import CmdSetHandler
|
||||||
from src.commands import cmdhandler
|
from src.commands import cmdhandler
|
||||||
from src.scripts.scripthandler import ScriptHandler
|
from src.scripts.scripthandler import ScriptHandler
|
||||||
from src.utils import logger
|
from src.utils import logger
|
||||||
from src.utils.utils import make_iter, to_unicode, variable_from_module, inherits_from
|
from src.utils.utils import make_iter, to_str, to_unicode, variable_from_module, inherits_from
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
|
|
@ -675,7 +675,7 @@ class ObjectDB(TypedObject):
|
||||||
if not _SESSIONS:
|
if not _SESSIONS:
|
||||||
from src.server.sessionhandler import SESSIONS as _SESSIONS
|
from src.server.sessionhandler import SESSIONS as _SESSIONS
|
||||||
|
|
||||||
text = utils.to_str(text, force_string=True) if text else ""
|
text = to_str(text, force_string=True) if text else ""
|
||||||
|
|
||||||
if "data" in kwargs:
|
if "data" in kwargs:
|
||||||
# deprecation warning
|
# deprecation warning
|
||||||
|
|
@ -705,8 +705,7 @@ class ObjectDB(TypedObject):
|
||||||
contents = _GA(self, "contents")
|
contents = _GA(self, "contents")
|
||||||
if exclude:
|
if exclude:
|
||||||
exclude = make_iter(exclude)
|
exclude = make_iter(exclude)
|
||||||
contents = [obj for obj in contents
|
contents = [obj for obj in contents if obj not in exclude]
|
||||||
if (obj not in exclude and obj not in exclude)]
|
|
||||||
for obj in contents:
|
for obj in contents:
|
||||||
obj.msg(message, from_obj=from_obj, **kwargs)
|
obj.msg(message, from_obj=from_obj, **kwargs)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ from src.typeclasses.models import TypedObject, TagHandler, NickHandler, AliasHa
|
||||||
from src.commands.cmdsethandler import CmdSetHandler
|
from src.commands.cmdsethandler import CmdSetHandler
|
||||||
from src.commands import cmdhandler
|
from src.commands import cmdhandler
|
||||||
from src.utils import utils
|
from src.utils import utils
|
||||||
|
from src.utils.utils import to_str
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
|
|
@ -271,7 +272,7 @@ class PlayerDB(TypedObject, AbstractUser):
|
||||||
if isinstance(data, dict):
|
if isinstance(data, dict):
|
||||||
kwargs.update(data)
|
kwargs.update(data)
|
||||||
|
|
||||||
text = utils.to_str(text, force_string=True) if text else ""
|
text = to_str(text, force_string=True) if text else ""
|
||||||
if from_obj:
|
if from_obj:
|
||||||
# call hook
|
# call hook
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -204,11 +204,14 @@ class ServerSessionHandler(SessionHandler):
|
||||||
data="")
|
data="")
|
||||||
# server-side access methods
|
# server-side access methods
|
||||||
|
|
||||||
def login(self, session, player):
|
def login(self, session, player, testmode=False):
|
||||||
"""
|
"""
|
||||||
Log in the previously unloggedin session and the player we by
|
Log in the previously unloggedin session and the player we by
|
||||||
now should know is connected to it. After this point we
|
now should know is connected to it. After this point we
|
||||||
assume the session to be logged in one way or another.
|
assume the session to be logged in one way or another.
|
||||||
|
|
||||||
|
testmode - this is used by unittesting for faking login without
|
||||||
|
any AMP being actually active
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# we have to check this first before uid has been assigned
|
# we have to check this first before uid has been assigned
|
||||||
|
|
@ -241,7 +244,8 @@ class ServerSessionHandler(SessionHandler):
|
||||||
session.logged_in = True
|
session.logged_in = True
|
||||||
# sync the portal to the session
|
# sync the portal to the session
|
||||||
sessdata = session.get_sync_data()
|
sessdata = session.get_sync_data()
|
||||||
self.server.amp_protocol.call_remote_PortalAdmin(session.sessid,
|
if not testmode:
|
||||||
|
self.server.amp_protocol.call_remote_PortalAdmin(session.sessid,
|
||||||
operation=SLOGIN,
|
operation=SLOGIN,
|
||||||
data=sessdata)
|
data=sessdata)
|
||||||
player.at_post_login(sessid=session.sessid)
|
player.at_post_login(sessid=session.sessid)
|
||||||
|
|
|
||||||
|
|
@ -552,7 +552,7 @@ class TagHandler(object):
|
||||||
|
|
||||||
def all(self):
|
def all(self):
|
||||||
"Get all tags in this handler"
|
"Get all tags in this handler"
|
||||||
return [p[0] for p in _GA(self.obj, self._m2m_fieldname).all().values_list("db_key")]
|
return [to_str(p[0]) for p in _GA(self.obj, self._m2m_fieldname).all().values_list("db_key")]
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return ",".join(self.all())
|
return ",".join(self.all())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue