From 658332d39512cad367e5a107afb134aa2bad82f8 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Wed, 5 Nov 2014 14:24:12 +0100 Subject: [PATCH] Fix management of dbunit connections on oracle and mssql --- .../core/persistence/AbstractDaoTestCase.java | 56 +++++++------------ .../jpa/test/AbstractDbUnitTestCase.java | 34 ++++++----- 2 files changed, 38 insertions(+), 52 deletions(-) diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java b/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java index cd94144c676..e24f6d8ffe7 100644 --- a/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java +++ b/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java @@ -41,16 +41,14 @@ import org.dbunit.ext.mysql.MySqlMetadataHandler; import org.dbunit.operation.DatabaseOperation; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.api.config.Settings; import org.sonar.core.cluster.NullQueue; -import org.sonar.core.cluster.WorkQueue; import org.sonar.core.config.Logback; import org.sonar.core.persistence.dialect.MySql; -import javax.sql.DataSource; - import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -66,31 +64,15 @@ import static org.junit.Assert.fail; public abstract class AbstractDaoTestCase { - public static class MyDBTester extends DataSourceDatabaseTester { - - public MyDBTester(DataSource dataSource) { - super(dataSource); - } - - public MyDBTester(DataSource dataSource, String schema) { - super(dataSource, schema); - } - - @Override - public void closeConnection(IDatabaseConnection connection) throws Exception { - - } - } - private static final Logger LOG = LoggerFactory.getLogger(AbstractDaoTestCase.class); private static Database database; private static DatabaseCommands databaseCommands; - private static IDatabaseTester databaseTester; - private static MyBatis myBatis; - private WorkQueue queue = new NullQueue(); + private MyBatis myBatis; - @Before - public void startDatabase() throws Exception { + private IDatabaseTester databaseTester; + + @BeforeClass + public static void startDatabase() throws Exception { if (database == null) { Settings settings = new Settings().setProperties(Maps.fromProperties(System.getProperties())); if (settings.hasKey("orchestrator.configUrl")) { @@ -103,27 +85,25 @@ public abstract class AbstractDaoTestCase { if (hasDialect) { database = new DefaultDatabase(settings); } else { - database = new H2Database("h2Tests", true); + database = new H2Database("test", true); } database.start(); LOG.info("Test Database: " + database); - databaseCommands = DatabaseCommands.forDialect(database.getDialect()); - - boolean hasSchema = settings.hasKey("sonar.jdbc.schema"); - if (hasSchema) { - databaseTester = new MyDBTester(database.getDataSource(), settings.getString("sonar.jdbc.schema")); - } else { - databaseTester = new MyDBTester(database.getDataSource()); - } - myBatis = new MyBatis(database, new Logback(), queue); - myBatis.start(); } + } - databaseCommands.truncateDatabase(database.getDataSource()); + @Before + public void startDbUnit() throws Exception { + databaseTester = new DataSourceDatabaseTester(database.getDataSource()); + myBatis = new MyBatis(database, new Logback(), new NullQueue()); + myBatis.start(); } - private void loadOrchestratorSettings(Settings settings) throws URISyntaxException, IOException { + /** + * Orchestrator is the name of a SonarSource close-source library for database and integration testing. + */ + private static void loadOrchestratorSettings(Settings settings) throws URISyntaxException, IOException { String url = settings.getString("orchestrator.configUrl"); URI uri = new URI(url); InputStream input = null; @@ -164,6 +144,7 @@ public abstract class AbstractDaoTestCase { protected void setupData(String... testNames) { InputStream[] streams = new InputStream[testNames.length]; try { + databaseCommands.truncateDatabase(database.getDataSource()); for (int i = 0; i < testNames.length; i++) { String className = getClass().getName(); className = String.format("/%s/%s.xml", className.replace(".", "/"), testNames[i]); @@ -186,6 +167,7 @@ public abstract class AbstractDaoTestCase { private void setupData(InputStream... dataSetStream) { try { + databaseCommands.truncateDatabase(database.getDataSource()); IDataSet[] dataSets = new IDataSet[dataSetStream.length]; for (int i = 0; i < dataSetStream.length; i++) { dataSets[i] = getData(dataSetStream[i]); diff --git a/sonar-core/src/test/java/org/sonar/jpa/test/AbstractDbUnitTestCase.java b/sonar-core/src/test/java/org/sonar/jpa/test/AbstractDbUnitTestCase.java index 53419e42a12..dcb57f191b2 100644 --- a/sonar-core/src/test/java/org/sonar/jpa/test/AbstractDbUnitTestCase.java +++ b/sonar-core/src/test/java/org/sonar/jpa/test/AbstractDbUnitTestCase.java @@ -36,16 +36,15 @@ import org.dbunit.ext.mssql.InsertIdentityOperation; import org.dbunit.operation.DatabaseOperation; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.sonar.api.database.DatabaseSession; import org.sonar.core.cluster.NullQueue; -import org.sonar.core.cluster.WorkQueue; import org.sonar.core.config.Logback; import org.sonar.core.persistence.Database; import org.sonar.core.persistence.DatabaseCommands; import org.sonar.core.persistence.H2Database; import org.sonar.core.persistence.MyBatis; import org.sonar.jpa.session.DatabaseSessionFactory; -import org.sonar.jpa.session.DefaultDatabaseConnector; import org.sonar.jpa.session.JpaDatabaseSession; import org.sonar.jpa.session.MemoryDatabaseConnector; @@ -61,33 +60,35 @@ public abstract class AbstractDbUnitTestCase { private static Database database; private static MyBatis myBatis; private static DatabaseCommands databaseCommands; - private static IDatabaseTester databaseTester; - private static JpaDatabaseSession session; - private WorkQueue queue = new NullQueue(); + private static MemoryDatabaseConnector dbConnector; + private IDatabaseTester databaseTester; + private JpaDatabaseSession session; - @Before - public void startDatabase() throws SQLException { + @BeforeClass + public static void startDatabase() throws SQLException { if (database == null) { database = new H2Database("sonarHibernate", true); database.start(); databaseCommands = DatabaseCommands.forDialect(database.getDialect()); - databaseTester = new DataSourceDatabaseTester(database.getDataSource()); - DefaultDatabaseConnector dbConnector = new MemoryDatabaseConnector(database); + dbConnector = new MemoryDatabaseConnector(database); dbConnector.start(); - session = new JpaDatabaseSession(dbConnector); - session.start(); - myBatis = new MyBatis(database, new Logback(), queue); + myBatis = new MyBatis(database, new Logback(), new NullQueue()); myBatis.start(); } + } - databaseCommands.truncateDatabase(database.getDataSource()); + @Before + public void startDbUnit() throws Exception { + databaseTester = new DataSourceDatabaseTester(database.getDataSource()); + session = new JpaDatabaseSession(dbConnector); + session.start(); } @After - public void stopConnection() throws Exception { + public void stopDbUnit() throws Exception { if (session != null) { session.rollback(); } @@ -119,6 +120,7 @@ public abstract class AbstractDbUnitTestCase { protected void setupData(String... testNames) { InputStream[] streams = new InputStream[testNames.length]; try { + databaseCommands.truncateDatabase(database.getDataSource()); for (int i = 0; i < testNames.length; i++) { String className = getClass().getName(); className = String.format("/%s/%s.xml", className.replace(".", "/"), testNames[i]); @@ -142,6 +144,7 @@ public abstract class AbstractDbUnitTestCase { private void setupData(InputStream... dataSetStream) { IDatabaseConnection connection = null; try { + databaseCommands.truncateDatabase(database.getDataSource()); IDataSet[] dataSets = new IDataSet[dataSetStream.length]; for (int i = 0; i < dataSetStream.length; i++) { dataSets[i] = getData(dataSetStream[i]); @@ -163,7 +166,8 @@ public abstract class AbstractDbUnitTestCase { if (connection != null) { connection.close(); } - } catch (SQLException e) { + } catch (SQLException ignored) { + } } -- 2.39.5