@Test public void testResourceNotExists() throws Exception { JobExecution jobExecution = launcher.run(job2, new JobParameters()); Assert.isTrue(jobExecution.getExitStatus().getExitCode().equals("FAILED"), "The job exit status is not FAILED."); Assert.isTrue(jobExecution.getAllFailureExceptions().get(0).getMessage().contains("Failed to initialize the reader"), "The job failed for the wrong reason."); }
@Test public void testResourceNotExists() throws Exception { JobExecution jobExecution = jobLauncher.run(job2, new JobParameters()); Assert.isTrue(jobExecution.getExitStatus().getExitCode().equals("FAILED"), "The job exit status is not FAILED."); Assert.isTrue(jobExecution.getAllFailureExceptions().get(0).getMessage().contains("Failed to initialize the reader"), "The job failed for the wrong reason."); }
@Test @SuppressWarnings("resource") public void testReadRetryExhausted() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("org/springframework/batch/core/jsr/configuration/xml/RetryReadListenerExhausted.xml"); JobLauncher jobLauncher = context.getBean(JobLauncher.class); JobExecution jobExecution = jobLauncher.run(context.getBean(Job.class), new JobParameters()); List<Throwable> failureExceptions = jobExecution.getAllFailureExceptions(); assertTrue("Expected 1 failure exceptions", failureExceptions.size() == 1); assertTrue("Failure exception must be of type RetryException", (failureExceptions.get(0) instanceof RetryException)); assertTrue("Exception cause must be of type IllegalArgumentException", (failureExceptions.get(0).getCause() instanceof IllegalArgumentException)); assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); }
@Test @SuppressWarnings("resource") public void testReadRetryExceptionInListener() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("org/springframework/batch/core/jsr/configuration/xml/RetryReadListenerListenerException.xml"); JobLauncher jobLauncher = context.getBean(JobLauncher.class); JobExecution jobExecution = jobLauncher.run(context.getBean(Job.class), new JobParameters()); List<Throwable> failureExceptions = jobExecution.getAllFailureExceptions(); assertTrue("Failure exceptions must equal one", failureExceptions.size() == 1); assertTrue("Failure exception must be of type RetryException", (failureExceptions.get(0) instanceof RetryException)); assertTrue("Exception cause must be of type BatchRuntimeException", (failureExceptions.get(0).getCause() instanceof BatchRuntimeException)); assertEquals(ExitStatus.FAILED, jobExecution.getExitStatus()); }
@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 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 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 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 testBasicFlow() throws Throwable { SimpleFlow flow = new JsrFlow("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 testInterruptJob() throws Exception { step1 = new StubStep("interruptStep", jobRepository) { @Override public void execute(StepExecution stepExecution) throws JobInterruptedException, UnexpectedJobExecutionException { stepExecution.getJobExecution().stop(); super.execute(stepExecution); } }; job.setSteps(Arrays.asList(new Step[] { step1, step2 })); job.execute(jobExecution); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(1, jobExecution.getAllFailureExceptions().size()); Throwable expected = jobExecution.getAllFailureExceptions().get(0); assertTrue("Wrong exception " + expected, expected instanceof JobInterruptedException); assertEquals("JobExecution interrupted.", expected.getMessage()); assertNull("Second step was not supposed to be executed", step2.passedInStepContext); }
public void testFailureExceptions() { RuntimeException exception = new RuntimeException(); assertEquals(0, execution.getFailureExceptions().size()); execution.addFailureException(exception); assertEquals(1, execution.getFailureExceptions().size()); assertEquals(exception, execution.getFailureExceptions().get(0)); StepExecution stepExecution1 = execution.createStepExecution("execution1"); RuntimeException stepException1 = new RuntimeException(); stepExecution1.addFailureException(stepException1); execution.createStepExecution("execution2"); List<Throwable> allExceptions = execution.getAllFailureExceptions(); assertEquals(2, allExceptions.size()); assertEquals(1, execution.getFailureExceptions().size()); assertTrue(allExceptions.contains(exception)); assertTrue(allExceptions.contains(stepException1)); } }
@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 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 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()); }
@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 testInterrupted() throws Exception { SimpleFlow flow = new JsrFlow("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 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 testRestartWithNullParameter() throws Exception { JobParameters jobParameters = new JobParametersBuilder().addString("foo", null).toJobParameters(); jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters); jobInstance = jobExecution.getJobInstance(); 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 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()); }