private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }
@Test public void testBasicHandling() throws Exception { Collection<Flow> flows = new ArrayList<>(); Flow flow1 = mock(Flow.class); Flow flow2 = mock(Flow.class); flows.add(flow1); flows.add(flow2); SplitState state = new SplitState(flows, "foo"); when(flow1.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); when(flow2.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); FlowExecutionStatus result = state.handle(executor); assertEquals(FlowExecutionStatus.COMPLETED, result); }
@Test public void testConcurrentHandling() throws Exception { Flow flow1 = mock(Flow.class); Flow flow2 = mock(Flow.class); SplitState state = new SplitState(Arrays.asList(flow1, flow2), "foo"); state.setTaskExecutor(new SimpleAsyncTaskExecutor()); when(flow1.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); when(flow2.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); FlowExecutionStatus result = state.handle(executor); assertEquals(FlowExecutionStatus.COMPLETED, result); }
@Test public void testGetStepSplitFlow() throws Exception { SimpleFlow flow = new JsrFlow("job"); SimpleFlow flow1 = new JsrFlow("flow1"); SimpleFlow flow2 = new JsrFlow("flow2"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0"))); flow1.setStateTransitions(new ArrayList<>(transitions)); flow1.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end1"))); flow2.setStateTransitions(new ArrayList<>(transitions)); flow2.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end2")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end2"))); flow.setStateTransitions(transitions); flow.afterPropertiesSet(); job.setFlow(flow); job.afterPropertiesSet(); List<String> names = new ArrayList<>(job.getStepNames()); Collections.sort(names); assertEquals("[step1, step2]", names.toString()); }
@Test public void testGetStepSplitFlow() throws Exception { SimpleFlow flow = new SimpleFlow("job"); SimpleFlow flow1 = new SimpleFlow("flow1"); SimpleFlow flow2 = new SimpleFlow("flow2"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0"))); flow1.setStateTransitions(new ArrayList<>(transitions)); flow1.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end1"))); flow2.setStateTransitions(new ArrayList<>(transitions)); flow2.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end2")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end2"))); flow.setStateTransitions(transitions); flow.afterPropertiesSet(); job.setFlow(flow); job.afterPropertiesSet(); List<String> names = new ArrayList<>(job.getStepNames()); Collections.sort(names); assertEquals("[step1, step2]", names.toString()); }
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }
private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }
private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }