diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapExecutionContextDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapExecutionContextDao.java index 00ee30d74..9a136a098 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapExecutionContextDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/MapExecutionContextDao.java @@ -148,12 +148,13 @@ public class MapExecutionContextDao implements ExecutionContextDao { updateExecutionContext(stepExecution); } - + @Override public void saveExecutionContexts(Collection stepExecutions) { Assert.notNull(stepExecutions,"Attempt to save a nulk collection of step executions"); for (StepExecution stepExecution: stepExecutions) { saveExecutionContext(stepExecution); + saveExecutionContext(stepExecution.getJobExecution()); } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractExecutionContextDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractExecutionContextDaoTests.java index 38c7ff56e..5f5ce9ab6 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractExecutionContextDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractExecutionContextDaoTests.java @@ -2,10 +2,14 @@ package org.springframework.batch.core.repository.dao; import static org.junit.Assert.assertEquals; +import java.util.ArrayList; import java.util.Collections; +import java.util.Date; +import java.util.List; import org.junit.Before; import org.junit.Test; +import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobParameters; @@ -82,6 +86,49 @@ public abstract class AbstractExecutionContextDaoTests extends AbstractTransacti assertEquals(ctx, retrieved); } + @Transactional + @Test + public void testSaveAndFindExecutionContexts() { + + List stepExecutions = new ArrayList(); + for (int i = 0; i < 3; i++) { + JobInstance ji = jobInstanceDao.createJobInstance("testJob" + i, new JobParameters()); + JobExecution je = new JobExecution(ji, new JobParameters()); + jobExecutionDao.saveJobExecution(je); + StepExecution se = new StepExecution("step" + i, je); + se.setStatus(BatchStatus.STARTED); + se.setReadSkipCount(i); + se.setProcessSkipCount(i); + se.setWriteSkipCount(i); + se.setProcessSkipCount(i); + se.setRollbackCount(i); + se.setLastUpdated(new Date(System.currentTimeMillis())); + se.setReadCount(i); + se.setFilterCount(i); + se.setWriteCount(i); + stepExecutions.add(se); + } + stepExecutionDao.saveStepExecutions(stepExecutions); + contextDao.saveExecutionContexts(stepExecutions); + + for (int i = 0; i < 3; i++) { + ExecutionContext retrieved = contextDao.getExecutionContext(stepExecutions.get(i).getJobExecution()); + assertEquals(stepExecutions.get(i).getExecutionContext(), retrieved); + } + } + + @Transactional + @Test(expected = IllegalArgumentException.class) + public void testSaveNullExecutionContexts() { + contextDao.saveExecutionContexts(null); + } + + @Transactional + @Test + public void testSaveEmptyExecutionContexts() { + contextDao.saveExecutionContexts(new ArrayList()); + } + @Transactional @Test public void testSaveAndFindEmptyJobContext() { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java index a3044acc7..5c4f8389e 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java @@ -21,8 +21,10 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.List; import org.junit.Before; import org.junit.Test; @@ -115,6 +117,53 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona } + @Transactional + @Test + public void testSaveAndGetExecutions() { + + List stepExecutions = new ArrayList(); + for (int i = 0; i < 3; i++) { + StepExecution se = new StepExecution("step" + i, jobExecution); + se.setStatus(BatchStatus.STARTED); + se.setReadSkipCount(i); + se.setProcessSkipCount(i); + se.setWriteSkipCount(i); + se.setProcessSkipCount(i); + se.setRollbackCount(i); + se.setLastUpdated(new Date(System.currentTimeMillis())); + se.setReadCount(i); + se.setFilterCount(i); + se.setWriteCount(i); + stepExecutions.add(se); + } + + dao.saveStepExecutions(stepExecutions); + + for (int i = 0; i < 3; i++) { + + StepExecution retrieved = dao.getStepExecution(jobExecution, stepExecutions.get(i).getId()); + + assertStepExecutionsAreEqual(stepExecutions.get(i), retrieved); + assertNotNull(retrieved.getVersion()); + assertNotNull(retrieved.getJobExecution()); + assertNotNull(retrieved.getJobExecution().getId()); + assertNotNull(retrieved.getJobExecution().getJobId()); + assertNotNull(retrieved.getJobExecution().getJobInstance()); + } + } + + @Transactional + @Test(expected = IllegalArgumentException.class) + public void testSaveNullCollectionThrowsException() { + dao.saveStepExecutions(null); + } + + @Transactional + @Test + public void testSaveEmptyCollection() { + dao.saveStepExecutions(new ArrayList()); + } + @Transactional @Test public void testSaveAndGetNonExistentExecution() { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java index c790f00d1..d7ff292b6 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java @@ -16,15 +16,17 @@ package org.springframework.batch.core.repository.support; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.junit.Assert.*; - import java.util.ArrayList; import java.util.List; - import org.junit.Before; import org.junit.Test; import org.springframework.batch.core.BatchStatus; @@ -172,6 +174,24 @@ public class SimpleJobRepositoryTests { assertTrue(lastUpdated > (before - 1000)); } + @Test + public void testSaveStepExecutions() { + List stepExecutions = new ArrayList(); + for (int i = 0; i < 3; i++) { + StepExecution stepExecution = new StepExecution("stepName" + i, jobExecution); + stepExecutions.add(stepExecution); + } + + jobRepository.addAll(stepExecutions); + verify(stepExecutionDao).saveStepExecutions(stepExecutions); + verify(ecDao).saveExecutionContexts(stepExecutions); + } + + @Test(expected = IllegalArgumentException.class) + public void testSaveNullStepExecutions() { + jobRepository.addAll(null); + } + @Test public void testUpdateStepExecutionSetsLastUpdated(){