From f0bba9c1c5aa905fd086997fdbb88e388e49ace1 Mon Sep 17 00:00:00 2001 From: dhgarrette Date: Thu, 2 Apr 2009 03:48:18 +0000 Subject: [PATCH] BATCH-1189: Added some unit tests --- .../FaultTolerantStepFactoryBeanTests.java | 95 +++++++++++++++++++ 1 file changed, 95 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 5cdc73f02..8e2621502 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 @@ -29,18 +29,24 @@ import org.springframework.batch.core.StepListener; import org.springframework.batch.core.listener.SkipListenerSupport; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; +import org.springframework.batch.core.step.skip.SkipPolicy; import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.item.ItemProcessor; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemStreamException; import org.springframework.batch.item.ItemStreamReader; import org.springframework.batch.item.ItemWriter; +import org.springframework.batch.item.ItemWriterException; import org.springframework.batch.item.ParseException; import org.springframework.batch.item.UnexpectedInputException; +import org.springframework.batch.item.WriteFailedException; +import org.springframework.batch.item.WriterNotOpenException; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.batch.support.transaction.TransactionAwareProxyFactory; +import org.springframework.beans.factory.FactoryBean; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.StringUtils; /** @@ -791,4 +797,93 @@ public class FaultTolerantStepFactoryBeanTests { assertEquals(expected.getExitStatus(), actual.getExitStatus()); assertEquals(expected.getJobExecutionId(), actual.getJobExecutionId()); } + + /** + * condition: skippable < fatal; exception is unclassified + * + * expected: false; default classification + */ + @Test + public void testSkippableSubset_unclassified() throws Exception { + assertFalse(getSkippableSubsetSkipPolicy().shouldSkip(new RuntimeException(), 0)); + } + + /** + * condition: skippable < fatal; exception is skippable + * + * expected: false; fatal overrides skippable + */ + @Test + public void testSkippableSubset_skippable() throws Exception { + assertFalse(getSkippableSubsetSkipPolicy().shouldSkip(new WriteFailedException(""), 0)); + } + + /** + * condition: skippable < fatal; exception is fatal + * + * expected: false + */ + @Test + public void testSkippableSubset_fatal() throws Exception { + assertFalse(getSkippableSubsetSkipPolicy().shouldSkip(new WriterNotOpenException(""), 0)); + } + + + /** + * condition: fatal < skippable; exception is unclassified + * + * expected: false; default classification + */ + @Test + public void testFatalSubset_unclassified() throws Exception { + assertFalse(getFatalSubsetSkipPolicy().shouldSkip(new RuntimeException(), 0)); + } + + /** + * condition: fatal < skippable; exception is skippable + * + * expected: true + */ + @Test + public void testFatalSubset_skippable() throws Exception { + assertTrue(getFatalSubsetSkipPolicy().shouldSkip(new WriterNotOpenException(""), 0)); + } + + /** + * condition: fatal < skippable; exception is fatal + * + * expected: false + */ + @Test + public void testFatalSubset_fatal() throws Exception { + assertFalse(getFatalSubsetSkipPolicy().shouldSkip(new WriteFailedException(""), 0)); + } + + private SkipPolicy getSkippableSubsetSkipPolicy() throws Exception { + List> skippableExceptions = new ArrayList>(); + skippableExceptions.add(WriteFailedException.class); + List> fatalExceptions = new ArrayList>(); + fatalExceptions.add(ItemWriterException.class); + factory.setSkippableExceptionClasses(skippableExceptions); + factory.setFatalExceptionClasses(fatalExceptions); + return getSkipPolicy(factory); + } + + private SkipPolicy getFatalSubsetSkipPolicy() throws Exception { + List> skippableExceptions = new ArrayList>(); + skippableExceptions.add(ItemWriterException.class); + List> fatalExceptions = new ArrayList>(); + fatalExceptions.add(WriteFailedException.class); + factory.setSkippableExceptionClasses(skippableExceptions); + factory.setFatalExceptionClasses(fatalExceptions); + return getSkipPolicy(factory); + } + + private SkipPolicy getSkipPolicy(FactoryBean stepFactoryBean) throws Exception { + Object step = factory.getObject(); + Object tasklet = ReflectionTestUtils.getField(step, "tasklet"); + Object chunkProvider = ReflectionTestUtils.getField(tasklet, "chunkProvider"); + return (SkipPolicy)ReflectionTestUtils.getField(chunkProvider, "skipPolicy"); + } + }