From 3be4f860c7a0cfa8c978bc9552ea894c12dd4adf Mon Sep 17 00:00:00 2001 From: dsyer Date: Mon, 4 Jan 2010 09:32:06 +0000 Subject: [PATCH] BATCH-929: added test to core-tests for deferred constraints --- spring-batch-core-tests/pom.xml | 9 +- .../META-INF/batch/footballSkipJob.xml | 118 ++++++++++++++++++ .../resources/business-schema-postgresql.sql | 94 ++++++++++++++ .../FootballJobSkipIntegrationTests.java | 99 +++++++++++++++ .../test/resources/batch-postgres.properties | 16 +++ .../src/main/sql/destroy.sql.vpp | 1 + 6 files changed, 336 insertions(+), 1 deletion(-) create mode 100644 spring-batch-core-tests/src/main/resources/META-INF/batch/footballSkipJob.xml create mode 100644 spring-batch-core-tests/src/main/resources/business-schema-postgresql.sql create mode 100644 spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/football/FootballJobSkipIntegrationTests.java create mode 100644 spring-batch-core-tests/src/test/resources/batch-postgres.properties diff --git a/spring-batch-core-tests/pom.xml b/spring-batch-core-tests/pom.xml index 2e728a034..abf422b57 100644 --- a/spring-batch-core-tests/pom.xml +++ b/spring-batch-core-tests/pom.xml @@ -83,7 +83,7 @@ org.springframework.batch spring-batch-core - 2.1.0.CI-SNAPSHOT + ${project.version} commons-dbcp @@ -99,6 +99,13 @@ 5.1.6 runtime + + postgresql + postgresql + 8.3-603.jdbc3 + true + runtime + commons-io commons-io diff --git a/spring-batch-core-tests/src/main/resources/META-INF/batch/footballSkipJob.xml b/spring-batch-core-tests/src/main/resources/META-INF/batch/footballSkipJob.xml new file mode 100644 index 000000000..f66fda9e5 --- /dev/null +++ b/spring-batch-core-tests/src/main/resources/META-INF/batch/footballSkipJob.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT GAMES.player_id, GAMES.year_no, SUM(COMPLETES), + SUM(ATTEMPTS), SUM(PASSING_YARDS), SUM(PASSING_TD), + SUM(INTERCEPTIONS), SUM(RUSHES), SUM(RUSH_YARDS), + SUM(RECEPTIONS), SUM(RECEPTIONS_YARDS), SUM(TOTAL_TD) + from GAMES, + PLAYERS where PLAYERS.player_id = + GAMES.player_id group by GAMES.player_id, GAMES.year_no + + + + + + + + games.file.name=games-small.csv + player.file.name=player-small.csv + job.commit.interval=2 + + + + + + + + \ No newline at end of file diff --git a/spring-batch-core-tests/src/main/resources/business-schema-postgresql.sql b/spring-batch-core-tests/src/main/resources/business-schema-postgresql.sql new file mode 100644 index 000000000..c7a27de5d --- /dev/null +++ b/spring-batch-core-tests/src/main/resources/business-schema-postgresql.sql @@ -0,0 +1,94 @@ +-- Autogenerated: do not edit this file +DROP SEQUENCE BATCH_STAGING_SEQ ; +DROP SEQUENCE TRADE_SEQ ; +DROP SEQUENCE CUSTOMER_SEQ ; +DROP TABLE BATCH_STAGING ; +DROP TABLE TRADE ; +DROP TABLE CUSTOMER ; +DROP TABLE PLAYERS ; +DROP TABLE GAMES ; +DROP TABLE PLAYER_SUMMARY ; +DROP TABLE ERROR_LOG ; + +-- Autogenerated: do not edit this file + +CREATE SEQUENCE CUSTOMER_SEQ; +CREATE SEQUENCE BATCH_STAGING_SEQ; +CREATE SEQUENCE TRADE_SEQ; + +CREATE TABLE BATCH_STAGING ( + ID BIGINT NOT NULL PRIMARY KEY , + JOB_ID BIGINT NOT NULL, + VALUE BYTEA NOT NULL, + PROCESSED CHAR(1) NOT NULL +) ; + +CREATE TABLE TRADE ( + ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT , + ISIN VARCHAR(45) NOT NULL, + QUANTITY BIGINT , + PRICE DECIMAL(8,2) , + CUSTOMER VARCHAR(45) +) ; + +CREATE TABLE CUSTOMER ( + ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT , + NAME VARCHAR(45) , + CREDIT DECIMAL(10,2) +) ; + +INSERT INTO CUSTOMER (ID, VERSION, NAME, CREDIT) VALUES (1, 0, 'customer1', 100000); +INSERT INTO CUSTOMER (ID, VERSION, NAME, CREDIT) VALUES (2, 0, 'customer2', 100000); +INSERT INTO CUSTOMER (ID, VERSION, NAME, CREDIT) VALUES (3, 0, 'customer3', 100000); +INSERT INTO CUSTOMER (ID, VERSION, NAME, CREDIT) VALUES (4, 0, 'customer4', 100000); + +CREATE TABLE PLAYERS ( + PLAYER_ID CHAR(8) NOT NULL PRIMARY KEY, + LAST_NAME VARCHAR(35) NOT NULL, + FIRST_NAME VARCHAR(25) NOT NULL, + POS VARCHAR(10) , + YEAR_OF_BIRTH BIGINT NOT NULL, + YEAR_DRAFTED BIGINT NOT NULL +) ; + +CREATE TABLE GAMES ( + PLAYER_ID CHAR(8) NOT NULL, + YEAR_NO BIGINT NOT NULL, + TEAM CHAR(3) NOT NULL, + WEEK BIGINT NOT NULL, + OPPONENT CHAR(3) , + COMPLETES BIGINT , + ATTEMPTS BIGINT , + PASSING_YARDS BIGINT , + PASSING_TD BIGINT , + INTERCEPTIONS BIGINT , + RUSHES BIGINT , + RUSH_YARDS BIGINT , + RECEPTIONS BIGINT , + RECEPTIONS_YARDS BIGINT , + TOTAL_TD BIGINT +) ; + +CREATE TABLE PLAYER_SUMMARY ( + ID CHAR(8) NOT NULL, + YEAR_NO BIGINT NOT NULL, + COMPLETES BIGINT NOT NULL , + ATTEMPTS BIGINT NOT NULL , + PASSING_YARDS BIGINT NOT NULL , + PASSING_TD BIGINT NOT NULL , + INTERCEPTIONS BIGINT NOT NULL , + RUSHES BIGINT NOT NULL , + RUSH_YARDS BIGINT NOT NULL , + RECEPTIONS BIGINT NOT NULL , + RECEPTIONS_YARDS BIGINT NOT NULL , + TOTAL_TD BIGINT NOT NULL +) ; + +CREATE TABLE ERROR_LOG ( + JOB_NAME CHAR(20) , + STEP_NAME CHAR(20) , + MESSAGE VARCHAR(300) NOT NULL +); + diff --git a/spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/football/FootballJobSkipIntegrationTests.java b/spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/football/FootballJobSkipIntegrationTests.java new file mode 100644 index 000000000..f4c98a009 --- /dev/null +++ b/spring-batch-core-tests/src/test/java/org/springframework/batch/core/test/football/FootballJobSkipIntegrationTests.java @@ -0,0 +1,99 @@ +/* + * Copyright 2006-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.batch.core.test.football; + +import static org.junit.Assert.assertEquals; + +import javax.sql.DataSource; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Before; +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.StepExecution; +import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.support.DatabaseType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.jdbc.SimpleJdbcTestUtils; + +/** + * @author Dave Syer + * + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "/simple-job-launcher-context.xml", "/META-INF/batch/footballSkipJob.xml" }) +public class FootballJobSkipIntegrationTests { + + /** Logger */ + private final Log logger = LogFactory.getLog(getClass()); + + private SimpleJdbcTemplate simpleJdbcTemplate; + + @Autowired + private JobLauncher jobLauncher; + + @Autowired + private Job job; + + private DatabaseType databaseType; + + @Autowired + public void setDataSource(DataSource dataSource) throws Exception { + this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); + databaseType = DatabaseType.fromMetaData(dataSource); + } + + @Before + public void clear() { + SimpleJdbcTestUtils.deleteFromTables(simpleJdbcTemplate, "PLAYER_SUMMARY", "GAMES", "PLAYERS"); + } + + @Test + public void testLaunchJob() throws Exception { + try { + if (databaseType == DatabaseType.POSTGRES || databaseType == DatabaseType.ORACLE) { + // Extra special test for these platforms (would have failed + // the job with UNKNOWN status in Batch 2.0): + simpleJdbcTemplate.update("SET CONSTRAINTS ALL DEFERRED"); + } + } + catch (Exception e) { + // Ignore (wrong platform) + } + JobExecution execution = jobLauncher.run(job, new JobParametersBuilder().addLong("run.id", 1L) + .toJobParameters()); + assertEquals(BatchStatus.COMPLETED, execution.getStatus()); + for (StepExecution stepExecution : execution.getStepExecutions()) { + logger.info("Processed: " + stepExecution); + } + execution = jobLauncher.run(job, new JobParametersBuilder().addLong("run.id", 2L).toJobParameters()); + assertEquals(BatchStatus.COMPLETED, execution.getStatus()); + for (StepExecution stepExecution : execution.getStepExecutions()) { + logger.info("Processed: " + stepExecution); + } + + } + +} diff --git a/spring-batch-core-tests/src/test/resources/batch-postgres.properties b/spring-batch-core-tests/src/test/resources/batch-postgres.properties new file mode 100644 index 000000000..9e47c540f --- /dev/null +++ b/spring-batch-core-tests/src/test/resources/batch-postgres.properties @@ -0,0 +1,16 @@ +# Placeholders batch.* +# for Postgres: +batch.jdbc.driver=org.postgresql.Driver +batch.jdbc.url=jdbc:postgresql://localhost/test +batch.jdbc.user=test +batch.jdbc.password=test +batch.jdbc.testWhileIdle=false +batch.jdbc.validationQuery= +batch.schema.script=classpath:/org/springframework/batch/core/schema-postgresql.sql +batch.drop.script=classpath:/org/springframework/batch/core/schema-drop-postgresql.sql +batch.business.schema.script=classpath:/business-schema-postgresql.sql +batch.data.source.init=true +batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer +batch.database.incrementer.parent=sequenceIncrementerParent +batch.grid.size=2 +batch.verify.cursor.position=true diff --git a/spring-batch-samples/src/main/sql/destroy.sql.vpp b/spring-batch-samples/src/main/sql/destroy.sql.vpp index bfb6b2b7a..dc2e1fbdc 100644 --- a/spring-batch-samples/src/main/sql/destroy.sql.vpp +++ b/spring-batch-samples/src/main/sql/destroy.sql.vpp @@ -1,4 +1,5 @@ -- Autogenerated: do not edit this file +-- You might need to remove this section the first time you run against a clean database DROP ${SEQUENCE} $!{IFEXISTSBEFORE} BATCH_STAGING_SEQ $!{IFEXISTS}; DROP ${SEQUENCE} $!{IFEXISTSBEFORE} TRADE_SEQ $!{IFEXISTS}; DROP ${SEQUENCE} $!{IFEXISTSBEFORE} CUSTOMER_SEQ $!{IFEXISTS};