@Test public void testStepShouldNotStart() throws Exception { // Start policy will return false, keeping the step from being started. step1.setStartLimit(0); job.execute(jobExecution); assertEquals(1, jobExecution.getFailureExceptions().size()); Throwable ex = jobExecution.getFailureExceptions().get(0); assertTrue("Wrong message in exception: " + ex.getMessage(), ex.getMessage().indexOf("start limit exceeded") >= 0); }
@Test public void testRunNormallyWithListener() throws Exception { job.setJobExecutionListeners(new JobExecutionListenerSupport[] { new JobExecutionListenerSupport() { @Override public void beforeJob(JobExecution jobExecution) { list.add("before"); } @Override public void afterJob(JobExecution jobExecution) { list.add("after"); } } }); job.execute(jobExecution); assertEquals(4, list.size()); }
/** * Test method for {@link SimpleJob#setSteps(java.util.List)}. */ @Test public void testSetSteps() { job.setSteps(Collections.singletonList((Step) new StepSupport("step"))); job.execute(jobExecution); assertEquals(1, jobExecution.getStepExecutions().size()); }
@Test public void testNoSteps() throws Exception { job.setSteps(new ArrayList<>()); job.execute(jobExecution); ExitStatus exitStatus = jobExecution.getExitStatus(); assertTrue("Wrong message in execution: " + exitStatus, exitStatus.getExitDescription().indexOf( "no steps configured") >= 0); }
/** * Test method for * {@link SimpleJob#addStep(org.springframework.batch.core.Step)}. */ @Test public void testAddStep() { job.setSteps(Collections.<Step> emptyList()); job.addStep(new StepSupport("step")); job.execute(jobExecution); assertEquals(1, jobExecution.getStepExecutions().size()); }
@Test public void testStepFailure() throws Exception { job.setSteps(Arrays.<Step> asList(new StepSupport("step"))); job.execute(execution); assertEquals(BatchStatus.FAILED, execution.getStatus()); }
@Test public void testFailedWithError() throws Exception { step1.setStartLimit(5); step2.setStartLimit(5); final Error exception = new Error("Foo!"); step1.setProcessException(exception); job.execute(jobExecution); assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getAllFailureExceptions().get(0)); assertEquals(0, list.size()); checkRepository(BatchStatus.FAILED, ExitStatus.FAILED); }
@Test public void testInterruptedAfterUnknownStatus() throws Exception { step1.setStartLimit(5); step2.setStartLimit(5); final JobInterruptedException exception = new JobInterruptedException("Interrupt!", BatchStatus.UNKNOWN); step1.setProcessException(exception); job.execute(jobExecution); assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getStepExecutions().iterator().next().getFailureExceptions().get(0)); assertEquals(0, list.size()); checkRepository(BatchStatus.UNKNOWN, ExitStatus.STOPPED); }
@Test public void testInterrupted() throws Exception { step1.setStartLimit(5); step2.setStartLimit(5); final JobInterruptedException exception = new JobInterruptedException("Interrupt!"); step1.setProcessException(exception); job.execute(jobExecution); assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getStepExecutions().iterator().next().getFailureExceptions().get(0)); assertEquals(0, list.size()); checkRepository(BatchStatus.STOPPED, ExitStatus.STOPPED); }
@Test public void testRunWithSimpleStepExecutor() throws Exception { job.setJobRepository(jobRepository); // do not set StepExecutorFactory... step1.setStartLimit(5); step2.setStartLimit(5); job.execute(jobExecution); assertEquals(2, list.size()); checkRepository(BatchStatus.COMPLETED, ExitStatus.COMPLETED); }
@Test public void testFailedWithListener() throws Exception { job.setJobExecutionListeners(new JobExecutionListenerSupport[] { new JobExecutionListenerSupport() { @Override public void afterJob(JobExecution jobExecution) { list.add("afterJob"); } } }); final RuntimeException exception = new RuntimeException("Foo!"); step1.setProcessException(exception); job.execute(jobExecution); assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getAllFailureExceptions().get(0)); assertEquals(1, list.size()); checkRepository(BatchStatus.FAILED, ExitStatus.FAILED); }
@Test public void testStepStatusUnknown() throws Exception { 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()); }
@Test public void testRestart() throws Exception { step1.setAllowStartIfComplete(true); final RuntimeException exception = new RuntimeException("Foo!"); step2.setProcessException(exception); job.execute(jobExecution); Throwable e = jobExecution.getAllFailureExceptions().get(0); assertSame(exception, e); jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters); job.execute(jobExecution); e = jobExecution.getAllFailureExceptions().get(0); assertSame(exception, e); assertTrue(step1.passedInStepContext.isEmpty()); assertFalse(step2.passedInStepContext.isEmpty()); }
@Test public void testFailed() throws Exception { step1.setStartLimit(5); step2.setStartLimit(5); final RuntimeException exception = new RuntimeException("Foo!"); step1.setProcessException(exception); job.execute(jobExecution); assertEquals(1, jobExecution.getAllFailureExceptions().size()); assertEquals(exception, jobExecution.getAllFailureExceptions().get(0)); assertEquals(0, list.size()); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); checkRepository(BatchStatus.FAILED, ExitStatus.FAILED); }
@Test public void testStepAlreadyComplete() throws Exception { stepExecution1.setStatus(BatchStatus.COMPLETED); jobRepository.add(stepExecution1); jobExecution.setEndTime(new Date()); jobRepository.update(jobExecution); jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters); job.execute(jobExecution); assertEquals(0, jobExecution.getFailureExceptions().size()); assertEquals(1, jobExecution.getStepExecutions().size()); assertEquals(stepExecution2.getStepName(), jobExecution.getStepExecutions().iterator().next().getStepName()); }
@Test public void testNotExecutedIfAlreadyStopped() throws Exception { jobExecution.stop(); job.execute(jobExecution); assertEquals(0, list.size()); checkRepository(BatchStatus.STOPPED, ExitStatus.NOOP); ExitStatus exitStatus = jobExecution.getExitStatus(); assertEquals(ExitStatus.NOOP.getExitCode(), exitStatus.getExitCode()); }
@Test public void testInterruptWithListener() throws Exception { step1.setProcessException(new JobInterruptedException("job interrupted!")); JobExecutionListener listener = mock(JobExecutionListener.class); listener.beforeJob(jobExecution); listener.afterJob(jobExecution); job.setJobExecutionListeners(new JobExecutionListener[] { listener }); job.execute(jobExecution); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); }
@Test public void testExceptionTerminates() throws Exception { SimpleStepFactoryBean<String, String> factory = getStepFactory(new String[] { "foo", "bar", "spam" }); factory.setBeanName("exceptionStep"); factory.setItemWriter(new ItemWriter<String>() { @Override public void write(List<? extends String> data) throws Exception { throw new RuntimeException("Foo"); } }); AbstractStep step = (AbstractStep) factory.getObject(); job.setSteps(Collections.singletonList((Step) step)); JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); assertEquals("Foo", jobExecution.getAllFailureExceptions().get(0).getMessage()); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); }
@Test public void testSimpleJob() throws Exception { job.setSteps(new ArrayList<>()); AbstractStep step = (AbstractStep) getStepFactory("foo", "bar").getObject(); step.setName("step1"); job.addStep(step); step = (AbstractStep) getStepFactory("spam").getObject(); step.setName("step2"); job.addStep(step); JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(3, written.size()); assertTrue(written.contains("foo")); }
@Test public void testRunNormally() throws Exception { step1.setStartLimit(5); step2.setStartLimit(5); job.execute(jobExecution); assertEquals(2, list.size()); checkRepository(BatchStatus.COMPLETED); assertNotNull(jobExecution.getEndTime()); assertNotNull(jobExecution.getStartTime()); assertTrue(step1.passedInJobContext.isEmpty()); assertFalse(step2.passedInJobContext.isEmpty()); }