@Test public void testBasicFlow() throws Throwable { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step")), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.execute(jobExecution); if (!jobExecution.getAllFailureExceptions().isEmpty()) { throw jobExecution.getAllFailureExceptions().get(0); } assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); }
@Test public void testInterrupted() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1") { @Override public void execute(StepExecution stepExecution) throws JobInterruptedException { stepExecution.setStatus(BatchStatus.STOPPING); jobRepository.update(stepExecution); } }), "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 testStepFailure() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); StepState step = new StepState(new StepSupport("step")); transitions.add(StateTransition.createStateTransition(step, ExitStatus.FAILED.getExitCode(), "end0")); transitions.add(StateTransition.createStateTransition(step, ExitStatus.COMPLETED.getExitCode(), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.FAILED, "end0"))); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); job.execute(execution); assertEquals(BatchStatus.FAILED, execution.getStatus()); }
@Test public void testInterruptedException() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1") { @Override public void execute(StepExecution stepExecution) throws JobInterruptedException { throw new JobInterruptedException("Stopped"); } }), "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()); }
job.execute(jobExecution); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); checkRepository(BatchStatus.STOPPED, ExitStatus.STOPPED);
@Test public void testStepStatusUnknown() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); StepState step = new StepState(new StepSupport("step") { @Override public void execute(StepExecution stepExecution) throws JobInterruptedException, UnexpectedJobExecutionException { // This is what happens if the repository meta-data cannot be // updated stepExecution.setExitStatus(ExitStatus.UNKNOWN); stepExecution.setStatus(BatchStatus.UNKNOWN); } }); transitions.add(StateTransition.createStateTransition(step, ExitStatus.FAILED.getExitCode(), "end0")); transitions.add(StateTransition.createStateTransition(step, "*", "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.FAILED, "end0"))); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); job.execute(execution); assertEquals(BatchStatus.UNKNOWN, execution.getStatus()); }
@Test public void testEndStateStoppedWithRestart() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end")); transitions.add(StateTransition .createStateTransition(new EndState(FlowExecutionStatus.STOPPED, "end"), "step2")); StepState step2 = new StepState(new StubStep("step2")); transitions.add(StateTransition.createStateTransition(step2, ExitStatus.COMPLETED.getExitCode(), "end0")); transitions.add(StateTransition.createStateTransition(step2, ExitStatus.FAILED.getExitCode(), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0"))); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.FAILED, "end1"))); flow.setStateTransitions(transitions); job.setFlow(flow); job.afterPropertiesSet(); // To test a restart we have to use the AbstractJob.execute()... job.execute(jobExecution); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(1, jobExecution.getStepExecutions().size()); jobExecution = jobRepository.createJobExecution("job", new JobParameters()); job.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(1, jobExecution.getStepExecutions().size()); }
@Test public void testUnknownStatusStopsJob() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); 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.UNKNOWN, jobExecution.getStatus()); checkRepository(BatchStatus.UNKNOWN, ExitStatus.STOPPED); assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(JobInterruptedException.class, jobExecution.getFailureExceptions().get(0).getClass()); }
job.afterPropertiesSet(); fail = true; job.execute(jobExecution); assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); assertEquals(2, jobExecution.getStepExecutions().size()); jobExecution = jobRepository.createJobExecution("job", new JobParameters()); fail = false; job.execute(jobExecution); assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); assertEquals(1, jobExecution.getStepExecutions().size());
job.execute(jobExecution);
job.execute(jobExecution); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); checkRepository(BatchStatus.STOPPED, ExitStatus.STOPPED);
@Test public void testTaskletInline() throws Exception { assertNotNull(job2); JobExecution jobExecution = jobRepository.createJobExecution(job2.getName(), new JobParameters()); job2.execute(jobExecution); Step step = job2.getStep("step2"); tasklet = (TestTasklet) ReflectionTestUtils.getField(step, "tasklet"); assertEquals("foo", tasklet.getName()); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); }
@Test public void testGetPartitionedStep() throws Exception { SimpleFlow flow = new SimpleFlow("job"); List<StateTransition> transitions = new ArrayList<>(); PartitionStep step = new PartitionStep(); step.setName("step1"); JsrPartitionHandler partitionHandler = new JsrPartitionHandler(); partitionHandler.setPropertyContext(new BatchPropertyContext()); partitionHandler.setPartitions(3); partitionHandler.setJobRepository(jobRepository); partitionHandler.setStep(new StubStep("subStep")); partitionHandler.afterPropertiesSet(); step.setPartitionHandler(partitionHandler); step.setStepExecutionSplitter(new JsrStepExecutionSplitter(jobRepository, false, "step1", true)); step.setJobRepository(jobRepository); step.afterPropertiesSet(); transitions.add(StateTransition.createStateTransition(new StepState("job.step", step), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0"))); flow.setStateTransitions(transitions); flow.afterPropertiesSet(); job.setFlow(flow); job.afterPropertiesSet(); job.execute(jobRepository.createJobExecution("partitionJob", new JobParameters())); assertEquals(3, step.getStepNames().size()); Step subStep = job.getStep("step1:partition0"); assertNotNull(subStep); assertEquals("subStep", subStep.getName()); assertNull(job.getStep("step that does not exist")); }