BATCH-1567: catch setTerminateOnly() in FlowJob

This commit is contained in:
dsyer
2010-05-14 07:59:07 +00:00
parent 2396c0e103
commit ee79629415
3 changed files with 37 additions and 4 deletions

View File

@@ -46,16 +46,18 @@ public class SimpleJobFailureTests {
@Test
public void testStepStatusUnknown() throws Exception {
job.setSteps(Arrays.<Step> asList(new StepSupport("step") {
job.setSteps(Arrays.<Step> asList(new StepSupport("step1") {
@Override
public void execute(StepExecution stepExecution) throws JobInterruptedException,
UnexpectedJobExecutionException {
// This is what happens if the repository meta-data cannot be updated
stepExecution.setStatus(BatchStatus.UNKNOWN);
stepExecution.setTerminateOnly();
}
}));
}, new StepSupport("step2")));
job.execute(execution);
assertEquals(BatchStatus.UNKNOWN, execution.getStatus());
assertEquals(1, execution.getStepExecutions().size());
}
}

View File

@@ -208,6 +208,31 @@ public class FlowJobTests {
assertEquals(JobInterruptedException.class, jobExecution.getFailureExceptions().get(0).getClass());
}
@Test
public void testUnknownStatusStopsJob() throws Exception {
SimpleFlow flow = new SimpleFlow("job");
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1") {
@Override
public void execute(StepExecution stepExecution) throws JobInterruptedException {
stepExecution.setStatus(BatchStatus.UNKNOWN);
stepExecution.setTerminateOnly();
jobRepository.update(stepExecution);
}
}), "step2"));
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end0"));
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
flow.setStateTransitions(transitions);
flow.afterPropertiesSet();
job.setFlow(flow);
job.afterPropertiesSet();
job.execute(jobExecution);
assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());
checkRepository(BatchStatus.STOPPED, ExitStatus.STOPPED);
assertEquals(1, jobExecution.getAllFailureExceptions().size());
assertEquals(JobInterruptedException.class, jobExecution.getFailureExceptions().get(0).getClass());
}
@Test
public void testInterruptedSplit() throws Exception {
SimpleFlow flow = new SimpleFlow("job");