Skip to content

Commit 3777bb4

Browse files
committed
Add test case for step failure
1 parent e9f3b38 commit 3777bb4

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

src/test/java/org/springframework/batch/experimental/core/step/item/ChunkOrientedStepIntegrationTests.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.batch.core.JobParameters;
2727
import org.springframework.batch.core.JobParametersBuilder;
2828
import org.springframework.batch.core.Step;
29+
import org.springframework.batch.core.StepExecution;
2930
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
3031
import org.springframework.batch.core.configuration.annotation.StepScope;
3132
import org.springframework.batch.core.job.builder.JobBuilder;
@@ -70,10 +71,44 @@ void testChunkOrientedStep() throws Exception {
7071

7172
// then
7273
Assertions.assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
74+
StepExecution stepExecution = jobExecution.getStepExecutions().iterator().next();
75+
Assertions.assertEquals(ExitStatus.COMPLETED, stepExecution.getExitStatus());
76+
Assertions.assertEquals(2, stepExecution.getReadCount());
77+
Assertions.assertEquals(2, stepExecution.getWriteCount());
78+
Assertions.assertEquals(2, stepExecution.getCommitCount());
79+
Assertions.assertEquals(0, stepExecution.getRollbackCount());
7380
JdbcTemplate jdbcTemplate = new JdbcTemplate(context.getBean(DataSource.class));
7481
Assertions.assertEquals(2, JdbcTestUtils.countRowsInTable(jdbcTemplate, "person_target"));
7582
}
7683

84+
@Test
85+
void testChunkOrientedStepFailure() throws Exception {
86+
// given
87+
System.setProperty("fail", "true");
88+
ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);
89+
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
90+
Job job = context.getBean(Job.class);
91+
92+
// when
93+
JobParameters jobParameters = new JobParametersBuilder()
94+
.addString("file", "persons1.csv")
95+
.toJobParameters();
96+
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
97+
98+
// then
99+
Assertions.assertEquals(ExitStatus.FAILED.getExitCode(), jobExecution.getExitStatus().getExitCode());
100+
StepExecution stepExecution = jobExecution.getStepExecutions().iterator().next();
101+
ExitStatus stepExecutionExitStatus = stepExecution.getExitStatus();
102+
Assertions.assertEquals(ExitStatus.FAILED.getExitCode(), stepExecutionExitStatus.getExitCode());
103+
Assertions.assertTrue(stepExecutionExitStatus.getExitDescription().contains("Unable to process item Person[id=1, name=foo1]"));
104+
Assertions.assertEquals(0, stepExecution.getReadCount());
105+
Assertions.assertEquals(0, stepExecution.getWriteCount());
106+
Assertions.assertEquals(0, stepExecution.getCommitCount());
107+
Assertions.assertEquals(1, stepExecution.getRollbackCount());
108+
JdbcTemplate jdbcTemplate = new JdbcTemplate(context.getBean(DataSource.class));
109+
Assertions.assertEquals(0, JdbcTestUtils.countRowsInTable(jdbcTemplate, "person_target"));
110+
}
111+
77112
@Configuration
78113
@EnableBatchProcessing
79114
static class TestConfiguration {
@@ -95,7 +130,12 @@ public FlatFileItemReader<Person> itemReader(@Value("#{jobParameters['file']}")
95130

96131
@Bean
97132
public ItemProcessor<Person, Person> itemProcessor() {
98-
return item -> new Person(item.id(), item.name().toUpperCase());
133+
return item -> {
134+
if (System.getProperty("fail") != null) {
135+
throw new Exception("Unable to process item " + item);
136+
}
137+
return new Person(item.id(), item.name().toUpperCase());
138+
};
99139
}
100140

101141
@Bean

0 commit comments

Comments
 (0)