From 605cbd804d558de5085f4c3889c70fc56c1953c8 Mon Sep 17 00:00:00 2001 From: Tharre Date: Sun, 13 May 2018 23:53:30 +0200 Subject: Extract dbunit JDBC modifications to JdbcTestCase --- .../assignment/groupphase/util/JdbcTestCase.java | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java new file mode 100644 index 0000000..5390841 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java @@ -0,0 +1,50 @@ +package at.ac.tuwien.sepm.assignment.groupphase.util; + +import java.sql.Types; +import org.dbunit.DBTestCase; +import org.dbunit.PropertiesBasedJdbcDatabaseTester; +import org.dbunit.database.DatabaseConfig; +import org.dbunit.dataset.datatype.DataType; +import org.dbunit.dataset.datatype.DataTypeException; +import org.dbunit.ext.postgresql.PostgresqlDataTypeFactory; + +public abstract class JdbcTestCase extends DBTestCase { + + private static final String JDBC_DRIVER = "org.h2.Driver"; + private static final String JDBC_URL = + "jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:sql/database.sql'"; + + protected final JDBCConnectionManager jdbcConnectionManager; + + protected JdbcTestCase() { + System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, JDBC_DRIVER); + System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, JDBC_URL); + + jdbcConnectionManager = new JDBCConnectionManager(JDBC_URL); + } + + @Override + protected void setUpDatabaseConfig(DatabaseConfig config) { + PostgresqlDataTypeFactory factory = + new PostgresqlDataTypeFactory() { + @Override + public boolean isEnumType(String sqlTypeName) { + if (sqlTypeName.equalsIgnoreCase("enum")) return true; + + return super.isEnumType(sqlTypeName); + } + + @Override + public DataType createDataType(int sqlType, String sqlTypeName) + throws DataTypeException { + if (isEnumType(sqlTypeName)) { + sqlType = Types.VARCHAR; + } + + return super.createDataType(sqlType, sqlTypeName); + } + }; + + config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, factory); + } +} -- cgit v1.2.3-70-g09d2 From 8e0abdfcbc798c8ed0f85af1f641d58d341fe83a Mon Sep 17 00:00:00 2001 From: Tharre Date: Mon, 21 May 2018 15:21:43 +0200 Subject: JdbcTestCase changed to work with Junit 4 --- .../employee/EmployeePersistenceTest.java | 2 +- .../assignment/groupphase/util/JdbcTestCase.java | 101 +++++++++++++++++++-- 2 files changed, 92 insertions(+), 11 deletions(-) (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java index d4f5646..71af3bd 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java @@ -19,7 +19,7 @@ public class EmployeePersistenceTest extends JdbcTestCase { private EmployeeDAO employeePersistence; public EmployeePersistenceTest() throws PersistenceException { - employeePersistence = new EmployeeDatabaseDao(jdbcConnectionManager); + employeePersistence = new EmployeeDatabaseDao(getJdbcConnectionManager()); } @Override diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java index 5390841..dae93ff 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java @@ -1,30 +1,87 @@ package at.ac.tuwien.sepm.assignment.groupphase.util; +import java.lang.invoke.MethodHandles; +import java.sql.SQLException; import java.sql.Types; -import org.dbunit.DBTestCase; -import org.dbunit.PropertiesBasedJdbcDatabaseTester; +import org.dbunit.DefaultDatabaseTester; +import org.dbunit.IDatabaseTester; +import org.dbunit.IOperationListener; import org.dbunit.database.DatabaseConfig; +import org.dbunit.database.DatabaseConnection; +import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.datatype.DataType; import org.dbunit.dataset.datatype.DataTypeException; import org.dbunit.ext.postgresql.PostgresqlDataTypeFactory; +import org.dbunit.operation.DatabaseOperation; +import org.junit.After; +import org.junit.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; -public abstract class JdbcTestCase extends DBTestCase { +@Component +public abstract class JdbcTestCase { - private static final String JDBC_DRIVER = "org.h2.Driver"; + private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); private static final String JDBC_URL = "jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:sql/database.sql'"; - protected final JDBCConnectionManager jdbcConnectionManager; + private IDatabaseTester dbTester; + private IDatabaseConnection connection; + private IOperationListener operationListener; + private JDBCConnectionManager jdbcConnectionManager; protected JdbcTestCase() { - System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, JDBC_DRIVER); - System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, JDBC_URL); - jdbcConnectionManager = new JDBCConnectionManager(JDBC_URL); } - @Override - protected void setUpDatabaseConfig(DatabaseConfig config) { + protected abstract IDataSet getDataSet() throws Exception; + + protected JDBCConnectionManager getJdbcConnectionManager() { + return jdbcConnectionManager; + } + + protected IDatabaseConnection getConnection() throws Exception { + if (connection == null) + connection = new DatabaseConnection(jdbcConnectionManager.getConnection(), null, true); + + return connection; + } + + private IOperationListener getOperationListener() { + if (operationListener == null) { + operationListener = + new IOperationListener() { + @Override + public void connectionRetrieved(IDatabaseConnection connection) { + setUpDatabaseConfig(connection.getConfig()); + } + + @Override + public void operationSetUpFinished(IDatabaseConnection connection) { + LOG.debug("operationSetUpFinished(connection={}) - start", connection); + } + + @Override + public void operationTearDownFinished(IDatabaseConnection connection) { + LOG.debug( + "operationTearDownFinished(connection={}) - start", connection); + try { + connection.close(); + } catch (SQLException e) { + LOG.error("Failed to close connection:" + e); + e.printStackTrace(); + } + } + }; + } + + return operationListener; + } + + // override DBUnit's enum handling + private void setUpDatabaseConfig(DatabaseConfig config) { PostgresqlDataTypeFactory factory = new PostgresqlDataTypeFactory() { @Override @@ -47,4 +104,28 @@ public abstract class JdbcTestCase extends DBTestCase { config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, factory); } + + @Before + public void setUp() throws Exception { + IDataSet dataSet = getDataSet(); + + dbTester = new DefaultDatabaseTester(getConnection()); + getOperationListener().connectionRetrieved(getConnection()); + + dbTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT); + dbTester.setTearDownOperation(DatabaseOperation.NONE); + dbTester.setDataSet(dataSet); + dbTester.setOperationListener(getOperationListener()); + dbTester.onSetup(); + } + + @After + public void tearDown() throws Exception { + try { + dbTester.onTearDown(); + getConnection().close(); + } finally { + dbTester = null; + } + } } -- cgit v1.2.3-70-g09d2 From e54b425cd20206cb38fccb20f3e37076423aad7f Mon Sep 17 00:00:00 2001 From: Tharre Date: Mon, 21 May 2018 20:54:38 +0200 Subject: Add convenience functions to JdbcTestCase #27059 --- .../assignment/groupphase/util/JdbcTestCase.java | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java index dae93ff..daf4ec4 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java @@ -1,5 +1,8 @@ package at.ac.tuwien.sepm.assignment.groupphase.util; +import static org.dbunit.Assertion.assertEquals; + +import java.io.InputStream; import java.lang.invoke.MethodHandles; import java.sql.SQLException; import java.sql.Types; @@ -9,9 +12,11 @@ import org.dbunit.IOperationListener; import org.dbunit.database.DatabaseConfig; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.datatype.DataType; import org.dbunit.dataset.datatype.DataTypeException; +import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; import org.dbunit.ext.postgresql.PostgresqlDataTypeFactory; import org.dbunit.operation.DatabaseOperation; import org.junit.After; @@ -38,6 +43,13 @@ public abstract class JdbcTestCase { protected abstract IDataSet getDataSet() throws Exception; + protected IDataSet getDataSet(String xmlname) throws DataSetException { + InputStream res = getClass().getClassLoader().getResourceAsStream(xmlname); + FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder(); + builder.setColumnSensing(true); + return builder.build(res); + } + protected JDBCConnectionManager getJdbcConnectionManager() { return jdbcConnectionManager; } @@ -105,6 +117,16 @@ public abstract class JdbcTestCase { config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, factory); } + protected void compareWith(String xmlname, String[] tables) throws Exception { + InputStream res = getClass().getClassLoader().getResourceAsStream(xmlname); + IDataSet actual = getConnection().createDataSet(); + IDataSet expected = new FlatXmlDataSetBuilder().build(res); + + for (String table : tables) { + assertEquals(actual.getTable(table), expected.getTable(table)); + } + } + @Before public void setUp() throws Exception { IDataSet dataSet = getDataSet(); @@ -113,7 +135,7 @@ public abstract class JdbcTestCase { getOperationListener().connectionRetrieved(getConnection()); dbTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT); - dbTester.setTearDownOperation(DatabaseOperation.NONE); + dbTester.setTearDownOperation(DatabaseOperation.REFRESH); dbTester.setDataSet(dataSet); dbTester.setOperationListener(getOperationListener()); dbTester.onSetup(); -- cgit v1.2.3-70-g09d2 From 5ec0ae4becd78932d7d1c520a8dda53223c65404 Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer Date: Mon, 21 May 2018 12:13:40 +0200 Subject: Add helper methods for DBUnit TestCases [#25949] --- .../sepm/assignment/groupphase/util/Helper.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java index b808206..618b06f 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java @@ -6,6 +6,12 @@ import java.util.List; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.Window; +import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.ITable; +import org.dbunit.dataset.filter.DefaultColumnFilter; +import org.dbunit.util.fileloader.FlatXmlDataFileLoader; import org.testfx.api.FxRobotContext; public class Helper { @@ -25,4 +31,39 @@ public class Helper { .findFirst() .orElse(null); } + + public static ITable getActualFilteredTableData( + IDatabaseConnection connection, String tableName, String[] excludedColumns) + throws Exception { + IDataSet actualDataSet = connection.createDataSet(); + ITable actualTable = actualDataSet.getTable(tableName); + return getFilteredTableData(actualTable, excludedColumns); + } + + public static ITable getExpectedFilteredTableData( + String tableName, String[] excludedColumns, String expectedXmlDataFileName) + throws Exception { + IDataSet dataSet = loadDataSet(expectedXmlDataFileName); + ITable table = dataSet.getTable(tableName); + return getFilteredTableData(table, excludedColumns); + } + + public static ITable getActualFilteredQueryTableData( + IDatabaseConnection connection, + String resultTableName, + String sql, + String[] excludedColumns) + throws Exception { + ITable queryData = connection.createQueryTable(resultTableName, sql); + return getFilteredTableData(queryData, excludedColumns); + } + + private static ITable getFilteredTableData(ITable tableData, String[] excludedColumns) + throws DataSetException { + return DefaultColumnFilter.excludedColumnsTable(tableData, excludedColumns); + } + + private static IDataSet loadDataSet(String fileName) { + return new FlatXmlDataFileLoader().load("/" + fileName); + } } -- cgit v1.2.3-70-g09d2 From c16fd1d735698f2fbab7ffaf2557058107e5997f Mon Sep 17 00:00:00 2001 From: Tharre Date: Thu, 24 May 2018 03:28:17 +0200 Subject: Fix DBUnit warnings --- .../at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java index daf4ec4..c509a1f 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java @@ -6,6 +6,8 @@ import java.io.InputStream; import java.lang.invoke.MethodHandles; import java.sql.SQLException; import java.sql.Types; +import java.util.Collection; +import java.util.Collections; import org.dbunit.DefaultDatabaseTester; import org.dbunit.IDatabaseTester; import org.dbunit.IOperationListener; @@ -112,6 +114,11 @@ public abstract class JdbcTestCase { return super.createDataType(sqlType, sqlTypeName); } + + @Override + public Collection getValidDbProducts() { + return Collections.singletonList("H2"); + } }; config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, factory); -- cgit v1.2.3-70-g09d2