BATCH-1412: fix test ordering and concurrency bug

This commit is contained in:
Dave Syer
2013-02-05 16:19:01 +00:00
parent 557515df45
commit 607e98cd9b
3 changed files with 20 additions and 11 deletions

View File

@@ -39,8 +39,8 @@ public class JdbcJobInstanceDaoTests extends AbstractJobInstanceDaoTests {
@Override
protected JobInstanceDao getJobInstanceDao() {
JdbcTestUtils.deleteFromTables(jdbcTemplate, "BATCH_JOB_EXECUTION_CONTEXT",
"BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION",
"BATCH_JOB_EXECUTION", "BATCH_JOB_EXECUTION_PARAMS", "BATCH_JOB_INSTANCE");
"BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION_PARAMS",
"BATCH_JOB_EXECUTION", "BATCH_JOB_INSTANCE");
return jobInstanceDao;
}

View File

@@ -22,15 +22,16 @@ public class JdbcStepExecutionDaoTests extends AbstractStepExecutionDaoTests {
@Override
protected JobRepository getJobRepository() {
deleteFromTables("BATCH_JOB_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION", "BATCH_JOB_EXECUTION",
"BATCH_JOB_EXECUTION_PARAMS", "BATCH_JOB_INSTANCE");
deleteFromTables("BATCH_JOB_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION_CONTEXT", "BATCH_STEP_EXECUTION",
"BATCH_JOB_EXECUTION_PARAMS", "BATCH_JOB_EXECUTION", "BATCH_JOB_INSTANCE");
return (JobRepository) applicationContext.getBean("jobRepository");
}
/**
* Long exit descriptions are truncated on both save and update.
*/
@Transactional @Test
@Transactional
@Test
public void testTruncateExitDescription() {
StringBuffer sb = new StringBuffer();

View File

@@ -47,10 +47,13 @@ import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
/**
* @author Dave Syer
*
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/org/springframework/batch/core/repository/dao/sql-dao-test.xml")
@@ -126,16 +129,21 @@ public class AsyncChunkOrientedStepIntegrationTests {
}
}, chunkOperations));
JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), new JobParameters(Collections
.singletonMap("run.id", new JobParameter(getClass().getName() + ".1"))));
final JobExecution jobExecution = jobRepository.createJobExecution(job.getName(),
new JobParameters(Collections.singletonMap("run.id", new JobParameter(getClass().getName() + ".1"))));
StepExecution stepExecution = new StepExecution(step.getName(), jobExecution);
jobRepository.add(stepExecution);
step.execute(stepExecution);
assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus());
dataSource.setMaxActive(2);
StepExecution lastStepExecution = jobRepository.getLastStepExecution(jobExecution.getJobInstance(), step
.getName());
// Need a transaction so one connection is enough to get job execution and its parameters
StepExecution lastStepExecution = new TransactionTemplate(transactionManager)
.execute(new TransactionCallback<StepExecution>() {
@Override
public StepExecution doInTransaction(TransactionStatus status) {
return jobRepository.getLastStepExecution(jobExecution.getJobInstance(), step.getName());
}
});
assertEquals(lastStepExecution, stepExecution);
assertFalse(lastStepExecution == stepExecution);
}