def testTaskRuntimeExceeded(self): """Task task failing from timeout.""" task_inst = test_utils.new_mock_task(task_class=test_utils.FailTask) sample_values = [(i, test_utils.FailTask._get_delay_sec_for_retry(i)) for i in range(task_inst.max_retries)] payload = {'args': [], 'kwargs': {}, 'app_data': {}} for retry, delay_sec in sample_values: with mock.patch( 'kale.publisher.Publisher.publish') as publish_func: message = test_utils.MockMessage(task_inst, retry_num=retry) retried = test_utils.FailTask.handle_failure( message, exceptions.TaskException('Exception')) self.assertTrue(retried) publish_func.assert_called_once_with(test_utils.FailTask, message.task_id, payload, current_retry_num=(retry + 1), delay_sec=delay_sec) retry = retry + 1 with mock.patch( 'kale.task.Task._report_permanent_failure') as fail_func: exc = exceptions.TaskException('Exception') message = test_utils.MockMessage(task_inst, retry_num=retry) retried = test_utils.FailTask.handle_failure(message, exc) self.assertFalse(retried) fail_func.assert_called_once_with( message, exc, task.PERMANENT_FAILURE_RETRIES_EXCEEDED, False)
def testTaskRetryDelayWithFailure(self): """Task task retrying with delay with failure""" task_inst = test_utils.new_mock_task(task_class=test_utils.FailTask) sample_values = [(i, test_utils.FailTask._get_delay_sec_for_retry(i)) for i in range(task_inst.max_retries)] payload = {'args': [], 'kwargs': {}, 'app_data': {}} for failure, delay_sec in sample_values: with mock.patch( 'kale.publisher.Publisher.publish') as publish_func: message = test_utils.MockMessage(task_inst, failure_num=failure, retry_num=failure) retried = test_utils.FailTask.handle_failure( message, exceptions.TaskException('Exception'), increment_failure_num=True) self.assertTrue(retried) publish_func.assert_called_once_with( test_utils.FailTask, message.task_id, payload, current_failure_num=(failure + 1), current_retry_num=(failure + 1), delay_sec=delay_sec)
def testTaskUnrecoverableException(self): """Task task failing with unrecoverable exception.""" task_inst = test_utils.new_mock_task(task_class=test_utils.FailTask) message = test_utils.MockMessage(task_inst) with mock.patch( 'kale.task.Task._report_permanent_failure') as fail_func: exc = SyntaxError('Unrecoverable Error') retried = test_utils.FailTask.handle_failure(message, exc) self.assertFalse(retried) fail_func.assert_called_once_with( message, exc, task.PERMANENT_FAILURE_UNRECOVERABLE, True)
def testTaskRuntimeExceeded(self): """Task task failing from timeout.""" task_inst = test_utils.new_mock_task(task_class=test_utils.FailTask) with mock.patch( 'kale.task.Task._report_permanent_failure') as fail_func: exc = exceptions.TaskException('Exception') message = test_utils.MockMessage( task_inst, retry_num=0, failure_num=task_inst.max_retries + 1) retried = test_utils.FailTask.handle_failure(message, exc) self.assertFalse(retried) fail_func.assert_called_once_with( message, exc, task.PERMANENT_FAILURE_RETRIES_EXCEEDED, False)
def testTaskNoRetries(self): """Task task failing with retries disabled.""" task_inst = test_utils.new_mock_task( task_class=test_utils.FailTaskNoRetries) message = test_utils.MockMessage(task_inst) with mock.patch( 'kale.task.Task._report_permanent_failure') as fail_func: exc = exceptions.TaskException('Exception') retried = test_utils.FailTaskNoRetries.handle_failure(message, exc) self.assertFalse(retried) fail_func.assert_called_once_with( message, exc, task.PERMANENT_FAILURE_NO_RETRY, True)
def testDelayedPublish(self): task_inst = test_utils.new_mock_task(task_class=test_utils.MockTask) delay_sec = 60 random_arg = 99 random_kwarg = 100 payload = { 'args': (random_arg, ), 'kwargs': { 'random_kwarg': random_kwarg, 'delay_sec': delay_sec }, 'app_data': {} } with mock.patch('kale.publisher.Publisher.publish') as publish_func: task_inst.publish({}, random_arg, delay_sec=delay_sec, random_kwarg=random_kwarg) message = test_utils.MockMessage(task_inst) publish_func.assert_called_once_with(test_utils.MockTask, message.task_id, payload, delay_sec=delay_sec)