use of com.netflix.conductor.common.metadata.tasks.Task in project conductor by Netflix.
the class WorkflowTaskCoordinatorTests method testNoOpWhenAckFailed.
@Test
public void testNoOpWhenAckFailed() {
Worker worker = mock(Worker.class);
when(worker.getPollingInterval()).thenReturn(1000);
when(worker.getPollCount()).thenReturn(1);
when(worker.getTaskDefName()).thenReturn("test");
when(worker.preAck(any())).thenReturn(true);
TaskClient client = Mockito.mock(TaskClient.class);
WorkflowTaskCoordinator coordinator = new WorkflowTaskCoordinator.Builder().withWorkers(worker).withThreadCount(1).withWorkerQueueSize(1).withSleepWhenRetry(100000).withUpdateRetryCount(1).withTaskClient(client).withWorkerNamePrefix("test-worker-").build();
Task testTask = new Task();
testTask.setStatus(Task.Status.IN_PROGRESS);
when(client.batchPollTasksInDomain(any(), any(), any(), anyInt(), anyInt())).thenReturn(ImmutableList.of(testTask));
when(client.ack(any(), any())).thenReturn(false);
coordinator.init();
Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS);
verify(client, atLeastOnce()).ack(any(), any());
// then worker.execute must not be called and task must be updated with IN_PROGRESS status
verify(worker, never()).execute(any());
verify(client, never()).updateTask(any());
}
use of com.netflix.conductor.common.metadata.tasks.Task in project conductor by Netflix.
the class WorkflowTaskCoordinatorTests method testNoOpWhenAckThrowsException.
@Test
public void testNoOpWhenAckThrowsException() {
Worker worker = mock(Worker.class);
when(worker.getPollingInterval()).thenReturn(1000);
when(worker.getPollCount()).thenReturn(1);
when(worker.getTaskDefName()).thenReturn("test");
when(worker.preAck(any())).thenReturn(true);
TaskClient client = Mockito.mock(TaskClient.class);
WorkflowTaskCoordinator coordinator = new WorkflowTaskCoordinator.Builder().withWorkers(worker).withThreadCount(1).withWorkerQueueSize(1).withSleepWhenRetry(100000).withUpdateRetryCount(1).withTaskClient(client).withWorkerNamePrefix("test-worker-").build();
Task testTask = new Task();
testTask.setStatus(Task.Status.IN_PROGRESS);
when(client.batchPollTasksInDomain(any(), any(), any(), anyInt(), anyInt())).thenReturn(ImmutableList.of(testTask));
when(client.ack(any(), any())).thenThrow(new RuntimeException("Ack failed"));
coordinator.init();
Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS);
verify(client).ack(any(), any());
// then worker.execute must not be called and task must be updated with IN_PROGRESS status
verify(worker, never()).execute(any());
verify(client, never()).updateTask(any());
}
use of com.netflix.conductor.common.metadata.tasks.Task in project conductor by Netflix.
the class WorkflowTaskCoordinatorTests method testTaskException.
@Test
public void testTaskException() {
Worker worker = Worker.create("test", task -> {
throw new NoSuchMethodError();
});
TaskClient client = Mockito.mock(TaskClient.class);
WorkflowTaskCoordinator coordinator = new WorkflowTaskCoordinator.Builder().withWorkers(worker).withThreadCount(1).withWorkerQueueSize(1).withSleepWhenRetry(100000).withUpdateRetryCount(1).withTaskClient(client).withWorkerNamePrefix("test-worker-").build();
when(client.batchPollTasksInDomain(anyString(), isNull(), anyString(), anyInt(), anyInt())).thenReturn(ImmutableList.of(new Task()));
when(client.ack(any(), any())).thenReturn(true);
CountDownLatch latch = new CountDownLatch(1);
doAnswer(invocation -> {
assertEquals("test-worker-0", Thread.currentThread().getName());
Object[] args = invocation.getArguments();
TaskResult result = (TaskResult) args[0];
assertEquals(TaskResult.Status.FAILED, result.getStatus());
latch.countDown();
return null;
}).when(client).updateTask(any());
coordinator.init();
Uninterruptibles.awaitUninterruptibly(latch);
Mockito.verify(client).updateTask(any());
}
use of com.netflix.conductor.common.metadata.tasks.Task in project conductor by Netflix.
the class SubWorkflowTaskMapperTest method getMappedTasks.
@SuppressWarnings("unchecked")
@Test
public void getMappedTasks() {
// Given
WorkflowDef workflowDef = new WorkflowDef();
Workflow workflowInstance = new Workflow();
workflowInstance.setWorkflowDefinition(workflowDef);
WorkflowTask taskToSchedule = new WorkflowTask();
SubWorkflowParams subWorkflowParams = new SubWorkflowParams();
subWorkflowParams.setName("Foo");
subWorkflowParams.setVersion(2);
taskToSchedule.setSubWorkflowParam(subWorkflowParams);
Map<String, Object> taskInput = new HashMap<>();
Map<String, String> taskToDomain = new HashMap<String, String>() {
{
put("*", "unittest");
}
};
Map<String, Object> subWorkflowParamMap = new HashMap<>();
subWorkflowParamMap.put("name", "FooWorkFlow");
subWorkflowParamMap.put("version", 2);
subWorkflowParamMap.put("taskToDomain", taskToDomain);
when(parametersUtils.getTaskInputV2(anyMap(), any(Workflow.class), any(), any())).thenReturn(subWorkflowParamMap);
// When
TaskMapperContext taskMapperContext = TaskMapperContext.newBuilder().withWorkflowDefinition(workflowDef).withWorkflowInstance(workflowInstance).withTaskToSchedule(taskToSchedule).withTaskInput(taskInput).withRetryCount(0).withTaskId(IDGenerator.generate()).withDeciderService(deciderService).build();
List<Task> mappedTasks = subWorkflowTaskMapper.getMappedTasks(taskMapperContext);
// Then
assertTrue(!mappedTasks.isEmpty());
assertEquals(1, mappedTasks.size());
Task subWorkFlowTask = mappedTasks.get(0);
assertEquals(Task.Status.SCHEDULED, subWorkFlowTask.getStatus());
assertEquals(SubWorkflow.NAME, subWorkFlowTask.getTaskType());
assertEquals(taskToDomain, subWorkFlowTask.getInputData().get("subWorkflowTaskToDomain"));
}
use of com.netflix.conductor.common.metadata.tasks.Task in project conductor by Netflix.
the class TerminateTaskMapperTest method getMappedTasks.
@Test
public void getMappedTasks() throws Exception {
WorkflowTask taskToSchedule = new WorkflowTask();
taskToSchedule.setType(TaskType.TASK_TYPE_TERMINATE);
String taskId = IDGenerator.generate();
WorkflowDef workflowDef = new WorkflowDef();
Workflow workflow = new Workflow();
workflow.setWorkflowDefinition(workflowDef);
TaskMapperContext taskMapperContext = TaskMapperContext.newBuilder().withWorkflowDefinition(workflowDef).withWorkflowInstance(workflow).withTaskDefinition(new TaskDef()).withTaskToSchedule(taskToSchedule).withRetryCount(0).withTaskId(taskId).build();
List<Task> mappedTasks = new TerminateTaskMapper(parametersUtils).getMappedTasks(taskMapperContext);
Assert.assertNotNull(mappedTasks);
Assert.assertEquals(1, mappedTasks.size());
Assert.assertEquals(TaskType.TASK_TYPE_TERMINATE, mappedTasks.get(0).getTaskType());
}
Aggregations