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
fea077d555
commit
0b7cae600a
2 changed files with 49 additions and 12 deletions
|
|
@ -341,6 +341,30 @@ class TaskHandler(object):
|
||||||
del d
|
del d
|
||||||
return True
|
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):
|
def do_task(self, task_id):
|
||||||
"""
|
"""
|
||||||
Execute the task (call its callback).
|
Execute the task (call its callback).
|
||||||
|
|
|
||||||
|
|
@ -417,32 +417,30 @@ class TestDelay(EvenniaTest):
|
||||||
# test automated removal of stale tasks.
|
# test automated removal of stale tasks.
|
||||||
t = utils.delay(timedelay, dummy_func, self.char1.dbref, persistent=True)
|
t = utils.delay(timedelay, dummy_func, self.char1.dbref, persistent=True)
|
||||||
t.cancel()
|
t.cancel()
|
||||||
task_id = t.get_id()
|
|
||||||
self.assertFalse(t.active())
|
self.assertFalse(t.active())
|
||||||
_TASK_HANDLER.clock.advance(timedelay) # make time pass
|
_TASK_HANDLER.clock.advance(timedelay) # make time pass
|
||||||
self.assertTrue(task_id in _TASK_HANDLER.to_save)
|
self.assertTrue(t.get_id() in _TASK_HANDLER.to_save)
|
||||||
self.assertTrue(task_id in _TASK_HANDLER.tasks)
|
self.assertTrue(t.get_id() in _TASK_HANDLER.tasks)
|
||||||
# add a task to test automatic removal
|
# 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
|
_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)
|
t2 = utils.delay(timedelay, dummy_func, self.char1.dbref, persistent=True)
|
||||||
self.assertFalse(task_id in _TASK_HANDLER.to_save)
|
self.assertFalse(t.get_id() in _TASK_HANDLER.to_save)
|
||||||
self.assertFalse(task_id in _TASK_HANDLER.tasks)
|
self.assertFalse(t.get_id() in _TASK_HANDLER.tasks)
|
||||||
self.assertEqual(self.char1.ndb.dummy_var, False)
|
self.assertEqual(self.char1.ndb.dummy_var, False)
|
||||||
# test manual cleanup
|
# test manual cleanup
|
||||||
t2.cancel()
|
t2.cancel()
|
||||||
_TASK_HANDLER.clock.advance(timedelay) # advance twisted reactor time past callback time
|
_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_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
|
# test before stale_timeout time
|
||||||
_TASK_HANDLER.clean_stale_tasks() # cleanup of stale tasks in in the save method
|
_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
|
# still in the task handler because stale timeout has not been reached
|
||||||
self.assertTrue(task_id in _TASK_HANDLER.to_save)
|
self.assertTrue(t2.get_id() in _TASK_HANDLER.to_save)
|
||||||
self.assertTrue(task_id in _TASK_HANDLER.tasks)
|
self.assertTrue(t2.get_id() in _TASK_HANDLER.tasks)
|
||||||
# advance past stale timeout
|
# 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._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
|
_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(t2.get_id() in _TASK_HANDLER.to_save)
|
||||||
self.assertFalse(task_id in _TASK_HANDLER.tasks)
|
self.assertFalse(t2.get_id() in _TASK_HANDLER.tasks)
|
||||||
self.char1.ndb.dummy_var = False
|
self.char1.ndb.dummy_var = False
|
||||||
_TASK_HANDLER._now = False
|
_TASK_HANDLER._now = False
|
||||||
# if _TASK_HANDLER.stale_timeout is 0 or less, automatic cleanup should not run
|
# 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.to_save)
|
||||||
self.assertTrue(t.get_id() in _TASK_HANDLER.tasks)
|
self.assertTrue(t.get_id() in _TASK_HANDLER.tasks)
|
||||||
self.assertEqual(self.char1.ndb.dummy_var, False)
|
self.assertEqual(self.char1.ndb.dummy_var, False)
|
||||||
t.remove()
|
_TASK_HANDLER.remove_all()
|
||||||
t2.remove()
|
|
||||||
self.char1.ndb.dummy_var = False
|
self.char1.ndb.dummy_var = False
|
||||||
_TASK_HANDLER._now = False
|
_TASK_HANDLER._now = False
|
||||||
# replicate a restart
|
# 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