def test_revoking_periodic(self): global state def loop_periodic(ts): self.scheduler(ts, True) for i in range(len(self.huey)): task = test_huey.dequeue() self.worker(task, ts) dt = datetime.datetime(2011, 1, 1, 0, 2) # revoke the command once hourly_task.revoke(revoke_once=True) self.assertTrue(hourly_task.is_revoked()) # it will be skipped the first go-round loop_periodic(dt) # it has not been run self.assertEqual(state, {}) # the next go-round it will be enqueued loop_periodic(dt) # our command was run self.assertEqual(state, {'p': 'y'}) # reset state state = {} # revoke the command hourly_task.revoke() self.assertTrue(hourly_task.is_revoked()) # it will no longer be enqueued loop_periodic(dt) loop_periodic(dt) self.assertEqual(state, {}) # restore hourly_task.restore() self.assertFalse(hourly_task.is_revoked()) # it will now be enqueued loop_periodic(dt) self.assertEqual(state, {'p': 'y'}) # reset state = {} # revoke for an hour td = datetime.timedelta(seconds=3600) hourly_task.revoke(revoke_until=dt + td) loop_periodic(dt) self.assertEqual(state, {}) self.assertEqual(test_huey.result_count(), 1) # after an hour it is back loop_periodic(dt + td) self.assertEqual(state, {'p': 'y'}) # our data store should reflect the delay self.assertEqual(test_huey.result_count(), 0)
def test_revoking_periodic(self): global state def loop_periodic(ts): self.scheduler(ts, True) for i in range(len(self.huey)): task = test_huey.dequeue() self.worker(task, ts) dt = datetime.datetime(2011, 1, 1, 0, 2) # revoke the command once hourly_task.revoke(revoke_once=True) self.assertTrue(hourly_task.is_revoked()) # it will be skipped the first go-round loop_periodic(dt) # it has not been run self.assertEqual(state, {}) # the next go-round it will be enqueued loop_periodic(dt) # our command was run self.assertEqual(state, {'p': 'y'}) # reset state state = {} # revoke the command hourly_task.revoke() self.assertTrue(hourly_task.is_revoked()) # it will no longer be enqueued loop_periodic(dt) loop_periodic(dt) self.assertEqual(state, {}) # restore hourly_task.restore() self.assertFalse(hourly_task.is_revoked()) # it will now be enqueued loop_periodic(dt) self.assertEqual(state, {'p': 'y'}) # reset state = {} # revoke for an hour td = datetime.timedelta(seconds=3600) hourly_task.revoke(revoke_until=dt + td) loop_periodic(dt) self.assertEqual(state, {}) # after an hour it is back loop_periodic(dt + td) self.assertEqual(state, {'p': 'y'}) # our data store should reflect the delay task_obj = hourly_task.task_class() self.assertEqual(test_huey.result_count(), 1) self.assertTrue(test_huey.storage.has_data_for_key(task_obj.revoke_id))