From d504e45a1f230a44d26309d226f94c846d119c3c Mon Sep 17 00:00:00 2001 From: jpraet Date: Thu, 7 Mar 2013 21:14:11 +0100 Subject: [PATCH] Add unit test for BATCH-1980 --- .../core/test/timeout/LoggingItemWriter.java | 18 ++++++ .../test/timeout/SleepingItemProcessor.java | 19 +++++++ .../core/test/timeout/SleepingTasklet.java | 23 ++++++++ .../resources/META-INF/batch/timeoutJob.xml | 55 +++++++++++++++++++ .../timeout/TimeoutJobIntegrationTests.java | 51 +++++++++++++++++ 5 files changed, 166 insertions(+) create mode 100644 spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/LoggingItemWriter.java create mode 100644 spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingItemProcessor.java create mode 100644 spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingTasklet.java create mode 100644 spring-batch-core-tests/src/main/resources/META-INF/batch/timeoutJob.xml create mode 100644 spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/timeout/TimeoutJobIntegrationTests.java diff --git a/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/LoggingItemWriter.java b/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/LoggingItemWriter.java new file mode 100644 index 000000000..beb53ecfd --- /dev/null +++ b/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/LoggingItemWriter.java @@ -0,0 +1,18 @@ +package org.springframework.batch.core.test.timeout; + +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.batch.item.ItemWriter; + +public class LoggingItemWriter implements ItemWriter { + + protected Log logger = LogFactory.getLog(LoggingItemWriter.class); + + @Override + public void write(List items) throws Exception { + logger.info(items); + } + +} diff --git a/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingItemProcessor.java b/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingItemProcessor.java new file mode 100644 index 000000000..3592086bc --- /dev/null +++ b/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingItemProcessor.java @@ -0,0 +1,19 @@ +package org.springframework.batch.core.test.timeout; + +import org.springframework.batch.item.ItemProcessor; + +public class SleepingItemProcessor implements ItemProcessor { + + private long millisToSleep; + + @Override + public I process(I item) throws Exception { + Thread.sleep(millisToSleep); + return item; + } + + public void setMillisToSleep(long millisToSleep) { + this.millisToSleep = millisToSleep; + } + +} diff --git a/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingTasklet.java b/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingTasklet.java new file mode 100644 index 000000000..5a09056c6 --- /dev/null +++ b/spring-batch-core-tests/src/main/java/org/springframework/batch/core/test/timeout/SleepingTasklet.java @@ -0,0 +1,23 @@ +package org.springframework.batch.core.test.timeout; + +import org.springframework.batch.core.StepContribution; +import org.springframework.batch.core.scope.context.ChunkContext; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; + +public class SleepingTasklet implements Tasklet { + + private long millisToSleep; + + @Override + public RepeatStatus execute(StepContribution contribution, + ChunkContext chunkContext) throws Exception { + Thread.sleep(millisToSleep); + return RepeatStatus.FINISHED; + } + + public void setMillisToSleep(long millisToSleep) { + this.millisToSleep = millisToSleep; + } + +} diff --git a/spring-batch-core-tests/src/main/resources/META-INF/batch/timeoutJob.xml b/spring-batch-core-tests/src/main/resources/META-INF/batch/timeoutJob.xml new file mode 100644 index 000000000..b831d2d95 --- /dev/null +++ b/spring-batch-core-tests/src/main/resources/META-INF/batch/timeoutJob.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/timeout/TimeoutJobIntegrationTests.java b/spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/timeout/TimeoutJobIntegrationTests.java new file mode 100644 index 000000000..93c3c34d9 --- /dev/null +++ b/spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/timeout/TimeoutJobIntegrationTests.java @@ -0,0 +1,51 @@ +package org.springframework.batch.core.test.timeout; + +import static org.junit.Assert.assertEquals; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.batch.core.BatchStatus; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobParametersBuilder; +import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "/simple-job-launcher-context.xml", "/META-INF/batch/timeoutJob.xml" }) +public class TimeoutJobIntegrationTests { + + /** Logger */ + private final Log logger = LogFactory.getLog(getClass()); + + @Autowired + private JobLauncher jobLauncher; + + @Autowired + @Qualifier("chunkTimeoutJob") + private Job chunkTimeoutJob; + + @Autowired + @Qualifier("taskletTimeoutJob") + private Job taskletTimeoutJob; + + @Test + public void testChunkTimeoutShouldFail() throws Exception { + JobExecution execution = jobLauncher.run(chunkTimeoutJob, new JobParametersBuilder().addLong("id", System.currentTimeMillis()) + .toJobParameters()); + assertEquals(BatchStatus.FAILED, execution.getStatus()); + } + + @Test + public void testTaskletTimeoutShouldFail() throws Exception { + JobExecution execution = jobLauncher.run(taskletTimeoutJob, new JobParametersBuilder().addLong("id", System.currentTimeMillis()) + .toJobParameters()); + assertEquals(BatchStatus.FAILED, execution.getStatus()); + } + +}