Finally: tracked build failure to odd number of items in customer table (after skip sample)

This commit is contained in:
dsyer
2010-03-28 12:03:41 +00:00
parent d39b950eca
commit 5f80ced21f
8 changed files with 72 additions and 44 deletions

View File

@@ -25,7 +25,9 @@ import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.batch.sample.common.SkipCheckingListener;
import org.springframework.batch.sample.domain.trade.internal.TradeWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.jdbc.SimpleJdbcTestUtils;
@@ -49,6 +51,10 @@ public class SkipSampleFunctionalTests {
@Autowired
private JobOperator jobOperator;
@Autowired
@Qualifier("customerIncrementer")
private DataFieldMaxValueIncrementer incrementer;
@Autowired
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
@@ -59,7 +65,7 @@ public class SkipSampleFunctionalTests {
simpleJdbcTemplate.update("DELETE from TRADE");
simpleJdbcTemplate.update("DELETE from CUSTOMER");
for (int i = 1; i < 10; i++) {
simpleJdbcTemplate.update("INSERT INTO CUSTOMER VALUES (" + i + ", 0, 'customer" + i + "', 100000)");
simpleJdbcTemplate.update("INSERT INTO CUSTOMER (ID, VERSION, NAME, CREDIT) VALUES (" + incrementer.nextIntValue() + ", 0, 'customer" + i + "', 100000)");
}
simpleJdbcTemplate.update("DELETE from ERROR_LOG");
}

View File

@@ -27,6 +27,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.batch.sample.domain.trade.Trade;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer;
@@ -51,7 +52,7 @@ public class JdbcTradeWriterTests {
}
@Autowired
public void setIncrementer(AbstractDataFieldMaxValueIncrementer incrementer) {
public void setIncrementer(@Qualifier("incrementerParent") AbstractDataFieldMaxValueIncrementer incrementer) {
incrementer.setIncrementerName("TRADE_SEQ");
this.writer.setIncrementer(incrementer);
}

View File

@@ -19,6 +19,9 @@ package org.springframework.batch.sample.iosample;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.junit.Test;
@@ -51,8 +54,9 @@ public class JdbcPagingRestartIntegrationTests {
@Autowired
private ItemReader<CustomerCredit> reader;
private SimpleJdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new SimpleJdbcTemplate(dataSource);
@@ -65,21 +69,36 @@ public class JdbcPagingRestartIntegrationTests {
@Test
public void testReader() throws Exception {
int total = SimpleJdbcTestUtils.countRowsInTable(jdbcTemplate, "CUSTOMER");
int pageSize = 2; // same as configured in reader
int count = (total / pageSize) * pageSize;
if (count >= pageSize) {
count -= pageSize;
}
ExecutionContext executionContext = new ExecutionContext();
int count = SimpleJdbcTestUtils.countRowsInTable(jdbcTemplate, "CUSTOMER")-2;
executionContext.putInt("JdbcPagingItemReader.read.count", count);
// Assume the primary keys are in order
executionContext.putInt("JdbcPagingItemReader.start.after", count);
((ItemStream)reader).open(executionContext);
List<Map<String, Object>> ids = jdbcTemplate
.queryForList("SELECT ID, CREDIT FROM CUSTOMER WHERE CREDIT > 10000 ORDER BY ID ASC");
// System.err.println(ids);
int startAfterValue = ((Long) ids.get(count - 1).get("ID")).intValue();
// System.err.println("Start after: " + startAfterValue);
executionContext.putInt("JdbcPagingItemReader.start.after", startAfterValue);
((ItemStream) reader).open(executionContext);
for (int i = count; i < total; i++) {
CustomerCredit item = reader.read();
// System.err.println("Item: " + item);
assertNotNull(item);
}
CustomerCredit item = reader.read();
// System.err.println(item);
assertNotNull(item);
item = reader.read();
// System.err.println(item);
assertNotNull(item);
item = reader.read();
// System.err.println(item);
// System.err.println("Item: " + item);
assertNull(item);
}
}