diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java | 2 | ||||
| -rw-r--r-- | src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java | 101 | 
2 files changed, 92 insertions, 11 deletions
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; +        } +    }  }  | 
