예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
    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)