package org.unitils.dbunit.multidatabase; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; import javax.sql.DataSource; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.unitils.UnitilsJUnit4TestClassRunner; import org.unitils.core.Unitils; import org.unitils.database.DatabaseModule; import org.unitils.database.SQLUnitils; import org.unitils.database.annotations.TestDataSource; import org.unitils.database.sqlassert.SqlAssert; import org.unitils.dbunit.DbUnitModule; import org.unitils.dbunit.annotation.DataSet; import org.unitils.dbunit.annotation.DataSets; import org.unitils.dbunit.annotation.ExpectedDataSet; import org.unitils.dbunit.annotation.ExpectedDataSets; /** * Test Multiple Databases with DBUnit. * * @author Willemijn Wouters * * @since 3.4.1 * */ @RunWith(UnitilsJUnit4TestClassRunner.class) public class MultiDatabaseIntTest { @TestDataSource("database1") private DataSource dataSourceDatabase1; @TestDataSource("database2") private DataSource dataSourceDatabase2; @BeforeClass public static void beforeClass() throws FileNotFoundException, IOException { Properties config = getCorrectProperties(); DatabaseModule databaseModule = Unitils.getInstance().getModulesRepository().getModuleOfType(DatabaseModule.class); databaseModule.init(config); databaseModule.afterInit(); DbUnitModule dbunitModule = Unitils.getInstance().getModulesRepository().getModuleOfType(DbUnitModule.class); dbunitModule.init(config); dbunitModule.afterInit(); } /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { } @Test @DataSet(value = "MultiDatabaseIntTest.testOneDataSetDatabase1.xml", databaseName="database1") public void testOneDataSetDatabase1() { SqlAssert.assertCountSqlResult("select count(*) from person", 1L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Willemijn'", 1L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Myrthe'", 0L, "database1"); } @Test @DataSet(value = "MultiDatabaseIntTest.testOneDataSetDatabase2.xml", databaseName="database2") public void testOneDataSetDatabase2() { SqlAssert.assertCountSqlResult("select count(*) from person", 1L, "database2"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Willemijn'", 0L, "database2"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Myrthe'", 1L, "database2"); } @Test @DataSets(value= {@DataSet(value = "MultiDatabaseIntTest.testMultipleDataSetsDatabase1_1.xml", databaseName="database1"), @DataSet(value = "MultiDatabaseIntTest.testMultipleDataSetsDatabase1_2.xml", databaseName="database1")}) public void testMultipleDataSetsDatabase1() { SqlAssert.assertCountSqlResult("select count(*) from person", 2L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Willemijn'", 1L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Myrthe'", 0L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Maurits'", 1L, "database1"); } @Test @DataSets(value= {@DataSet(value = "MultiDatabaseIntTest.testMultipleDataSetsDatabase1_1.xml", databaseName="database1"), @DataSet(value = "MultiDatabaseIntTest.testMultipleDataSetsDatabase1_2.xml", databaseName="database2")}) public void testMultipleDataSetsMultipleDatabases() throws Exception { SqlAssert.assertCountSqlResult("select count(*) from person", 1L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person", 1L, "database2"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Willemijn'", 1L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Myrthe'", 0L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Maurits'", 0L, "database1"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Maurits'", 1L, "database2"); SqlAssert.assertCountSqlResult("select count(*) from person where personname='Willemijn'", 0L, "database2"); } @Test @ExpectedDataSets({@ExpectedDataSet(databaseName="database1", value = "MultiDatabaseIntTest.testMultipleExpectedDataSetsOnMultipleDatabases_1.xml"), @ExpectedDataSet(databaseName="database2", value= "MultiDatabaseIntTest.testMultipleExpectedDataSetsOnMultipleDatabases_2.xml")}) public void testMultipleExpectedDataSetsOnMultipleDatabases() { SQLUnitils.executeUpdate("INSERT INTO person (personid, personname) values ('5', 'Andre');", dataSourceDatabase1); SQLUnitils.executeUpdate("INSERT INTO person (personid, personname) values ('6', 'Charles');", dataSourceDatabase1); SQLUnitils.executeUpdate("INSERT INTO person (personid, personname) values ('8', 'Luc');", dataSourceDatabase2); SQLUnitils.executeUpdate("INSERT INTO person (personid, personname) values ('9', 'Jean-Michel');", dataSourceDatabase2); } private static Properties getCorrectProperties() { Properties config = (Properties) Unitils.getInstance().getConfiguration().clone(); config.setProperty("database.names", "database1, database2"); config.setProperty("database.userName", "sa"); config.setProperty("database.password", ""); config.setProperty("database.schemaNames", "public"); config.setProperty("database.driverClassName.database1", "org.hsqldb.jdbcDriver"); config.setProperty("database.driverClassName.database2", "org.h2.Driver"); config.setProperty("database.url.database1", "jdbc:hsqldb:mem:unitils1"); config.setProperty("database.url.database2", "jdbc:h2:~/test"); config.setProperty("database.dialect.database1", "hsqldb"); config.setProperty("database.dialect.database2", "h2"); config.setProperty("database.dbMaintain.enabled", "true"); config.setProperty("dbMaintainer.autoCreateExecutedScriptsTable", "true"); config.setProperty("dbMaintainer.autoCreateDbMaintainScriptsTable", "false"); config.setProperty("updateDataBaseSchema.enabled", "true"); config.setProperty("dbMaintainer.updateSequences.enabled", "true"); config.setProperty("dbMaintainer.keepRetryingAfterError.enabled","true"); config.setProperty("org.unitils.dbmaintainer.script.ScriptSource.implClassName", "org.unitils.dbmaintainer.script.impl.DefaultScriptSource"); config.setProperty("unitils.module.hibernate.enabled", "false"); config.setProperty("unitils.module.jpa.enabled", "false"); config.setProperty("unitils.module.spring.enabled", "false"); config.setProperty("dbMaintainer.script.locations", "src/test/resources/dbscripts"); config.setProperty("dbMaintainer.fromScratch.enabled", "false"); return config; } }