def test_task_bpmn_error(self): task = ExternalTask({"id": "1", "topicName": "my_topic"}) expected_task_result = TaskResult.bpmn_error(task, error_code="bpmn_err_code_1", error_message="bpmn error") external_task_client = ExternalTaskClient(worker_id=1) responses.add(responses.POST, external_task_client.get_task_bpmn_error_url(task.get_task_id()), status=HTTPStatus.NO_CONTENT) executor = ExternalTaskExecutor(worker_id=1, external_task_client=external_task_client) actual_task_result = executor.execute_task(task, self.task_bpmn_error_action) self.assertEqual(str(expected_task_result), str(actual_task_result))
def test_task_complete(self): task = ExternalTask({"id": "1", "topicName": "my_topic"}) output_vars = {"var1": 1, "var2": "value", "var3": True} expected_task_result = TaskResult.success(task, output_vars) external_task_client = ExternalTaskClient(worker_id=1) responses.add(responses.POST, external_task_client.get_task_complete_url(task.get_task_id()), status=HTTPStatus.NO_CONTENT) executor = ExternalTaskExecutor(worker_id=1, external_task_client=external_task_client) actual_task_result = executor.execute_task(task, self.task_success_action) self.assertEqual(str(expected_task_result), str(actual_task_result))
def test_task_failure(self): task = ExternalTask({"id": "1", "topicName": "my_topic"}) expected_task_result = TaskResult.failure(task, error_message="unknown task failure", error_details="unknown error", retries=3, retry_timeout=30000) external_task_client = ExternalTaskClient(worker_id=1) responses.add(responses.POST, external_task_client.get_task_failure_url(task.get_task_id()), status=HTTPStatus.NO_CONTENT) executor = ExternalTaskExecutor(worker_id=1, external_task_client=external_task_client) actual_task_result = executor.execute_task(task, self.task_failure_action) self.assertEqual(str(expected_task_result), str(actual_task_result))
def task_result_not_complete_failure_bpmnerror(self, task): return TaskResult.empty_task_result(task)
def task_bpmn_error_action(self, task): return TaskResult.bpmn_error(task, error_code="bpmn_err_code_1", error_message="bpmn error")
def task_failure_action(self, task): return TaskResult.failure(task, error_message="unknown task failure", error_details="unknown error", retries=3, retry_timeout=30000)
def task_success_action(self, task): output_vars = {"var1": 1, "var2": "value", "var3": True} return TaskResult.success(task, output_vars)
def test_fetch_and_execute_calls_task_action_for_each_task_fetched( self, mock_client): external_task_client = ExternalTaskClient(worker_id=0) resp_payload = [{ "activityId": "anActivityId", "activityInstanceId": "anActivityInstanceId", "errorMessage": "anErrorMessage", "errorDetails": "anErrorDetails", "executionId": "anExecutionId", "id": "anExternalTaskId", "lockExpirationTime": "2015-10-06T16:34:42", "processDefinitionId": "aProcessDefinitionId", "processDefinitionKey": "aProcessDefinitionKey", "processInstanceId": "aProcessInstanceId", "tenantId": None, "retries": 3, "workerId": "aWorkerId", "priority": 4, "topicName": "createOrder", "variables": { "orderId": { "type": "String", "value": "1234", "valueInfo": {} } } }, { "activityId": "anActivityId", "activityInstanceId": "anActivityInstanceId", "errorMessage": "anErrorMessage", "errorDetails": "anotherErrorDetails", "executionId": "anExecutionId", "id": "anExternalTaskId", "lockExpirationTime": "2015-10-06T16:34:42", "processDefinitionId": "aProcessDefinitionId", "processDefinitionKey": "aProcessDefinitionKey", "processInstanceId": "aProcessInstanceId", "tenantId": None, "retries": 3, "workerId": "aWorkerId", "priority": 0, "topicName": "createOrder", "variables": { "orderId": { "type": "String", "value": "3456", "valueInfo": {} } } }] responses.add(responses.POST, external_task_client.get_fetch_and_lock_url(), status=HTTPStatus.OK, json=resp_payload) worker = ExternalTaskWorker(worker_id=0) mock_action = mock.Mock() task = ExternalTask({ "id": "anExternalTaskId", "workerId": "aWorkerId", "topicName": "createOrder" }) mock_action.return_value = TaskResult.success(task=task, global_variables={}) worker.fetch_and_execute("my_topic", mock_action) self.assertEqual(2, mock_action.call_count)