From fddfc3a5b0dd9b023bdebaff6223131e482d4230 Mon Sep 17 00:00:00 2001 From: robokaso Date: Fri, 17 Oct 2008 09:22:51 +0000 Subject: [PATCH] RESOLVED - BATCH-853: broken transactional item processing added re-processing testcase on step level --- .../FaultTolerantStepFactoryBeanTests.java | 29 +++++++++++++++++++ 1 file changed, 29 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 d9cc252e7..0d8ccbded 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 @@ -54,6 +54,8 @@ public class FaultTolerantStepFactoryBeanTests { private SkipWriterStub writer = new SkipWriterStub(); private JobExecution jobExecution; + + private List processed = new ArrayList(); protected int count; @@ -497,6 +499,33 @@ public class FaultTolerantStepFactoryBeanTests { assertEquals(2, stepExecution.getSkipCount()); assertEquals(2, stepExecution.getRollbackCount()); } + + @Test + public void testReprocessingAfterWriterRollback() throws Exception { + factory.setItemProcessor(new ItemProcessor() { + public String process(String item) throws Exception { + processed.add(item); + return item; + } + }); + final Collection NO_FAILURES = Collections.emptyList(); + factory.setItemReader(new SkipReaderStub(new String[] { "1", "2", "3", "4" }, NO_FAILURES)); + + Step step = (Step) factory.getObject(); + StepExecution stepExecution = new StepExecution(step.getName(), jobExecution); + step.execute(stepExecution); + //1,2,3,4,3,4,3,4 - two re-processing attempts until the item is identified and skipped + assertEquals(8, processed.size()); + assertEquals("1", processed.get(0)); + assertEquals("2", processed.get(1)); + assertEquals("3", processed.get(2)); + assertEquals("4", processed.get(3)); + assertEquals("3", processed.get(4)); + assertEquals("4", processed.get(5)); + assertEquals("3", processed.get(6)); + assertEquals("4", processed.get(7)); + + } private static class SkipProcessorStub implements ItemProcessor {