+package org.argeo.slc.unit;\r
+\r
+import java.io.InputStream;\r
+import java.sql.SQLException;\r
+\r
+import javax.sql.DataSource;\r
+\r
+import org.dbunit.DataSourceDatabaseTester;\r
+import org.dbunit.DatabaseUnitException;\r
+import org.dbunit.IDatabaseTester;\r
+import org.dbunit.database.IDatabaseConnection;\r
+import org.dbunit.dataset.IDataSet;\r
+import org.dbunit.dataset.xml.FlatXmlDataSet;\r
+import org.dbunit.operation.DatabaseOperation;\r
+import org.springframework.core.io.ClassPathResource;\r
+import org.springframework.core.io.Resource;\r
+\r
+import org.hibernate.tool.hbm2ddl.SchemaExport;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+\r
+public class IndependentDbTestCase extends SpringBasedTestCase {\r
+ private IDatabaseTester databaseTester;\r
+\r
+ @Override\r
+ protected void setUp() throws Exception {\r
+ super.setUp();\r
+\r
+ databaseTester = new DataSourceDatabaseTester(getDataSource());\r
+ databaseTester.setSetUpOperation(new DatabaseOperation() {\r
+\r
+ @Override\r
+ public void execute(IDatabaseConnection connection, IDataSet dataSet)\r
+ throws DatabaseUnitException, SQLException {\r
+ DbModel dbModel = getDbModel();\r
+ SchemaExport schemaExport = dbModel\r
+ .createSchemaExport(connection.getConnection());\r
+ schemaExport.create(true, true);\r
+\r
+ DatabaseOperation.INSERT.execute(connection, dataSet);\r
+ }\r
+\r
+ });\r
+ databaseTester.setDataSet(createDataSet());\r
+ databaseTester.onSetup();\r
+ }\r
+\r
+ @Override\r
+ protected void tearDown() throws Exception {\r
+ if (databaseTester != null) {\r
+ databaseTester.onTearDown();\r
+ }\r
+ super.tearDown();\r
+ }\r
+\r
+ protected DataSource getDataSource() {\r
+ return (DataSource) getApplicationContext().getBean(\r
+ getDataSourceBeanName());\r
+ }\r
+\r
+ protected String getDataSourceBeanName() {\r
+ return "dataSource";\r
+ }\r
+\r
+ protected IDataSet createDataSet() {\r
+ try {\r
+ InputStream in = getDataSetResource().getInputStream();\r
+ IDataSet dataSet = new FlatXmlDataSet(in);\r
+ in.close();\r
+ return dataSet;\r
+ } catch (Exception e) {\r
+ throw new SlcException("Cannot create data set", e);\r
+ }\r
+ }\r
+\r
+ protected Resource getDataSetResource() {\r
+ return new ClassPathResource(getDataSetResourceLocation());\r
+ }\r
+\r
+ protected String getDataSetResourceLocation() {\r
+ return inPackage("dataSet.xml");\r
+ }\r
+\r
+ protected DbModel getDbModel() {\r
+ return (DbModel) getApplicationContext().getBean(getDbModelBeanName());\r
+ }\r
+\r
+ protected String getDbModelBeanName() {\r
+ return "dbModel";\r
+ }\r
+}\r