From ca2cd24df07e53aaffee9cbdbc20fc6479a373b5 Mon Sep 17 00:00:00 2001 From: lucasward Date: Sun, 20 Sep 2009 19:59:40 +0000 Subject: [PATCH] BATCH-915: Added tests to ensure that ItemStreamException can be skipped when thrown from read. --- .../FaultTolerantStepFactoryBeanTests.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java index 58367c81a..5ac40a2d9 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanTests.java @@ -189,6 +189,40 @@ public class FaultTolerantStepFactoryBeanTests { assertStepExecutionsAreEqual(stepExecution, repository.getLastStepExecution(jobExecution.getJobInstance(), step .getName())); } + + /** + * Check to make sure that ItemStreamException can be skipped. (see BATCH-915) + */ + @Test + public void testReadSkipItemStreamException() throws Exception { + reader.setFailures("2"); + reader.setExceptionType(ItemStreamException.class); + + Map, Boolean> map = new HashMap, Boolean>(); + map.put(ItemStreamException.class, true); + factory.setSkippableExceptionClasses(map); + + Step step = (Step) factory.getObject(); + + step.execute(stepExecution); + + assertEquals(1, stepExecution.getSkipCount()); + assertEquals(1, stepExecution.getReadSkipCount()); + assertEquals(4, stepExecution.getReadCount()); + assertEquals(0, stepExecution.getWriteSkipCount()); + assertEquals(0, stepExecution.getRollbackCount()); + + // writer did not skip "2" as it never made it to writer, only "4" did + assertTrue(reader.getRead().contains("4")); + assertFalse(reader.getRead().contains("2")); + + List expectedOutput = Arrays.asList(StringUtils.commaDelimitedListToStringArray("1,3,4,5")); + assertEquals(expectedOutput, writer.getWritten()); + + assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus()); + assertStepExecutionsAreEqual(stepExecution, repository.getLastStepExecution(jobExecution.getJobInstance(), step + .getName())); + } /** * Check items causing errors are skipped as expected.