mirror of
https://github.com/evennia/evennia.git
synced 2026-03-27 10:16:32 +01:00
task handler remove_all method created. task handler server restart unit test created.
Added method remove_all to task handler. (intended for unit testing) Created a method to mimic a server restart for the purpose of task handler. test_delay unit test passes.
This commit is contained in:
parent
a61577b8f3
commit
58308adea6
2 changed files with 49 additions and 12 deletions
|
|
@ -341,6 +341,30 @@ class TaskHandler(object):
|
|||
del d
|
||||
return True
|
||||
|
||||
def remove_all(self, save=True, cancel=True):
|
||||
"""
|
||||
Remove all tasks.
|
||||
By default tasks are canceled and removed from the database also.
|
||||
|
||||
Arguments:
|
||||
save=True (bool): Should changes to persistent tasks be saved to database.
|
||||
cancel=True (bool): Cancel scheduled tasks before removing it from task handler.
|
||||
|
||||
Returns:
|
||||
True (bool): if the removal completed successfully.
|
||||
"""
|
||||
tasks_ids = tuple(self.tasks.keys())
|
||||
for task_id in tasks_ids:
|
||||
if cancel:
|
||||
self.cancel(task_id)
|
||||
del self.tasks[task_id]
|
||||
tasks_ids = tuple(self.to_save.keys())
|
||||
for task_id in tasks_ids:
|
||||
del self.to_save[task_id]
|
||||
if save:
|
||||
self.save()
|
||||
return True
|
||||
|
||||
def do_task(self, task_id):
|
||||
"""
|
||||
Execute the task (call its callback).
|
||||
|
|
|
|||
|
|
@ -417,32 +417,30 @@ class TestDelay(EvenniaTest):
|
|||
# test automated removal of stale tasks.
|
||||
t = utils.delay(timedelay, dummy_func, self.char1.dbref, persistent=True)
|
||||
t.cancel()
|
||||
task_id = t.get_id()
|
||||
self.assertFalse(t.active())
|
||||
_TASK_HANDLER.clock.advance(timedelay) # make time pass
|
||||
self.assertTrue(task_id in _TASK_HANDLER.to_save)
|
||||
self.assertTrue(task_id in _TASK_HANDLER.tasks)
|
||||
self.assertTrue(t.get_id() in _TASK_HANDLER.to_save)
|
||||
self.assertTrue(t.get_id() in _TASK_HANDLER.tasks)
|
||||
# add a task to test automatic removal
|
||||
_TASK_HANDLER._now = datetime.now() + timedelta(seconds=_TASK_HANDLER.stale_timeout + 6) # task handler time to 6 seconds after stale timeout
|
||||
t2 = utils.delay(timedelay, dummy_func, self.char1.dbref, persistent=True)
|
||||
self.assertFalse(task_id in _TASK_HANDLER.to_save)
|
||||
self.assertFalse(task_id in _TASK_HANDLER.tasks)
|
||||
self.assertFalse(t.get_id() in _TASK_HANDLER.to_save)
|
||||
self.assertFalse(t.get_id() in _TASK_HANDLER.tasks)
|
||||
self.assertEqual(self.char1.ndb.dummy_var, False)
|
||||
# test manual cleanup
|
||||
t2.cancel()
|
||||
_TASK_HANDLER.clock.advance(timedelay) # advance twisted reactor time past callback time
|
||||
_TASK_HANDLER._now = datetime.now() + timedelta(seconds=30) # set TaskHandler's time to 30 seconnds from now
|
||||
task_id = t2.get_id()
|
||||
# test before stale_timeout time
|
||||
_TASK_HANDLER.clean_stale_tasks() # cleanup of stale tasks in in the save method
|
||||
# still in the task handler because stale timeout has not been reached
|
||||
self.assertTrue(task_id in _TASK_HANDLER.to_save)
|
||||
self.assertTrue(task_id in _TASK_HANDLER.tasks)
|
||||
self.assertTrue(t2.get_id() in _TASK_HANDLER.to_save)
|
||||
self.assertTrue(t2.get_id() in _TASK_HANDLER.tasks)
|
||||
# advance past stale timeout
|
||||
_TASK_HANDLER._now = datetime.now() + timedelta(seconds=_TASK_HANDLER.stale_timeout + 6) # task handler time to 6 seconds after stale timeout
|
||||
_TASK_HANDLER.clean_stale_tasks() # cleanup of stale tasks in in the save method
|
||||
self.assertFalse(task_id in _TASK_HANDLER.to_save)
|
||||
self.assertFalse(task_id in _TASK_HANDLER.tasks)
|
||||
self.assertFalse(t2.get_id() in _TASK_HANDLER.to_save)
|
||||
self.assertFalse(t2.get_id() in _TASK_HANDLER.tasks)
|
||||
self.char1.ndb.dummy_var = False
|
||||
_TASK_HANDLER._now = False
|
||||
# if _TASK_HANDLER.stale_timeout is 0 or less, automatic cleanup should not run
|
||||
|
|
@ -459,8 +457,23 @@ class TestDelay(EvenniaTest):
|
|||
self.assertTrue(t.get_id() in _TASK_HANDLER.to_save)
|
||||
self.assertTrue(t.get_id() in _TASK_HANDLER.tasks)
|
||||
self.assertEqual(self.char1.ndb.dummy_var, False)
|
||||
t.remove()
|
||||
t2.remove()
|
||||
_TASK_HANDLER.remove_all()
|
||||
self.char1.ndb.dummy_var = False
|
||||
_TASK_HANDLER._now = False
|
||||
# replicate a restart
|
||||
_TASK_HANDLER.remove_all()
|
||||
_TASK_HANDLER.save()
|
||||
self.assertFalse(_TASK_HANDLER.tasks)
|
||||
self.assertFalse(_TASK_HANDLER.to_save)
|
||||
# create a persistent task.
|
||||
t = utils.delay(timedelay, dummy_func, self.char1.dbref, persistent=True)
|
||||
_TASK_HANDLER.save()
|
||||
_TASK_HANDLER.remove_all(False) # remove all tasks, do not save this change.
|
||||
_TASK_HANDLER.clock.advance(timedelay) # advance twisted reactor time past callback time
|
||||
self.assertEqual(self.char1.ndb.dummy_var, False) # task has not run
|
||||
_TASK_HANDLER.load()
|
||||
_TASK_HANDLER.create_delays()
|
||||
_TASK_HANDLER.clock.advance(timedelay) # Clock must advance to trigger, even if past timedelay
|
||||
self.assertEqual(self.char1.ndb.dummy_var, 'dummy_func ran')
|
||||
_TASK_HANDLER.remove_all()
|
||||
self.char1.ndb.dummy_var = False
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue