From: David Gageot Date: Thu, 12 Jul 2012 06:40:17 +0000 (+0200) Subject: Reuse database for faster unit tests X-Git-Tag: 3.2~101 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8b1a57036400e89b695a2a70626b43d94ec20ac4;p=sonarqube.git Reuse database for faster unit tests --- diff --git a/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java b/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java index 5a0d8326050..8c318a265d5 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java @@ -33,12 +33,12 @@ import static org.mockito.Mockito.mock; public class UpdateStatusJobTest extends AbstractDbUnitTestCase { @Test - public void shouldUnflagPenultimateLastSnapshot() throws Exception { + public void shouldUnflagPenultimateLastSnapshot() { assertAnalysis(11, "shouldUnflagPenultimateLastSnapshot"); } @Test - public void doNotFailIfNoPenultimateLast() throws Exception { + public void doNotFailIfNoPenultimateLast() { assertAnalysis(5, "doNotFailIfNoPenultimateLast"); } @@ -49,11 +49,11 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase { private void assertAnalysis(int snapshotId, String fixture) { setupData("sharedFixture", fixture); + DatabaseSession session = getSession(); UpdateStatusJob sensor = new UpdateStatusJob(mock(ServerMetadata.class), session, new DefaultResourcePersister(session), loadSnapshot(snapshotId)); sensor.execute(); - getSession().stop(); checkTables(fixture, "snapshots"); } 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 0c64f2ef419..131af2e70c7 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 @@ -35,10 +35,8 @@ import org.dbunit.dataset.ITable; import org.dbunit.dataset.ReplacementDataSet; import org.dbunit.dataset.filter.DefaultColumnFilter; import org.dbunit.dataset.xml.FlatXmlDataSet; -import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; -import org.junit.BeforeClass; import org.sonar.api.config.Settings; import org.sonar.core.config.Logback; @@ -54,37 +52,29 @@ public abstract class AbstractDaoTestCase { private static IDatabaseTester databaseTester; private static MyBatis myBatis; - @BeforeClass - public static void startDatabase() { - Settings settings = new Settings().setProperties(Maps.fromProperties(System.getProperties())); - - boolean hasDialect = settings.hasKey("sonar.jdbc.dialect"); - if (hasDialect) { - database = new DefaultDatabase(settings); - } else { - database = new H2Database("sonarMyBatis"); - } - database.start(); + @Before + public void startDatabase() throws SQLException { + if (database == null) { + Settings settings = new Settings().setProperties(Maps.fromProperties(System.getProperties())); + + boolean hasDialect = settings.hasKey("sonar.jdbc.dialect"); + if (hasDialect) { + database = new DefaultDatabase(settings); + } else { + database = new H2Database("sonarMyBatis"); + } + database.start(); - databaseCommands = DatabaseCommands.forDialect(database.getDialect()); - databaseTester = new DataSourceDatabaseTester(database.getDataSource()); + databaseCommands = DatabaseCommands.forDialect(database.getDialect()); + databaseTester = new DataSourceDatabaseTester(database.getDataSource()); - myBatis = new MyBatis(database, settings, new Logback()); - myBatis.start(); - } + myBatis = new MyBatis(database, settings, new Logback()); + myBatis.start(); + } - @Before - public void setupDbUnit() throws SQLException { databaseCommands.truncateDatabase(database.getDataSource().getConnection()); } - @AfterClass - public static void stopDatabase() { - if (database != null) { - database.stop(); - } - } - protected MyBatis getMyBatis() { return myBatis; } diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/DatabaseCommands.java b/sonar-core/src/test/java/org/sonar/core/persistence/DatabaseCommands.java index 2c1b44fd0d5..1b787aa1bae 100644 --- a/sonar-core/src/test/java/org/sonar/core/persistence/DatabaseCommands.java +++ b/sonar-core/src/test/java/org/sonar/core/persistence/DatabaseCommands.java @@ -166,6 +166,8 @@ public abstract class DatabaseCommands { } public void truncateDatabase(Connection connection) throws SQLException { + connection.setAutoCommit(false); + Statement statement = connection.createStatement(); for (String table : DatabaseUtils.TABLE_NAMES) { // 1. truncate 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 5aefd12e30b..01e0b25b638 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 @@ -33,9 +33,7 @@ import org.dbunit.dataset.ReplacementDataSet; import org.dbunit.dataset.filter.DefaultColumnFilter; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.sonar.api.database.DatabaseSession; import org.sonar.core.persistence.Database; import org.sonar.core.persistence.DatabaseCommands; @@ -55,28 +53,25 @@ import static org.junit.Assert.fail; */ public abstract class AbstractDbUnitTestCase { private static Database database; - private static DefaultDatabaseConnector dbConnector; private static DatabaseCommands databaseCommands; private static IDatabaseTester databaseTester; private static JpaDatabaseSession session; - @BeforeClass - public static void startDatabase() { - database = new H2Database("sonarHibernate"); - database.start(); - - dbConnector = new MemoryDatabaseConnector(database); - dbConnector.start(); - - databaseCommands = DatabaseCommands.forDialect(database.getDialect()); - databaseTester = new DataSourceDatabaseTester(database.getDataSource()); - - session = new JpaDatabaseSession(dbConnector); - session.start(); - } - @Before - public void setupDbUnit() throws SQLException { + public void startDatabase() throws SQLException { + if (database == null) { + database = new H2Database("sonarHibernate"); + database.start(); + + databaseCommands = DatabaseCommands.forDialect(database.getDialect()); + databaseTester = new DataSourceDatabaseTester(database.getDataSource()); + + DefaultDatabaseConnector dbConnector = new MemoryDatabaseConnector(database); + dbConnector.start(); + session = new JpaDatabaseSession(dbConnector); + session.start(); + } + databaseCommands.truncateDatabase(database.getDataSource().getConnection()); } @@ -87,13 +82,6 @@ public abstract class AbstractDbUnitTestCase { } } - @AfterClass - public static void stopDatabase() { - if (database != null) { - database.stop(); - } - } - protected DatabaseSession getSession() { return session; } diff --git a/sonar-server/src/main/java/org/sonar/server/configuration/PropertiesBackup.java b/sonar-server/src/main/java/org/sonar/server/configuration/PropertiesBackup.java index da419f65b26..d0fb42a0777 100644 --- a/sonar-server/src/main/java/org/sonar/server/configuration/PropertiesBackup.java +++ b/sonar-server/src/main/java/org/sonar/server/configuration/PropertiesBackup.java @@ -67,6 +67,7 @@ public class PropertiesBackup implements Backupable { } } } + databaseSession.commit(); } private void clearProperties() { diff --git a/sonar-server/src/test/java/org/sonar/server/configuration/PropertiesBackupTest.java b/sonar-server/src/test/java/org/sonar/server/configuration/PropertiesBackupTest.java index d8f207ac833..078a39dc41a 100644 --- a/sonar-server/src/test/java/org/sonar/server/configuration/PropertiesBackupTest.java +++ b/sonar-server/src/test/java/org/sonar/server/configuration/PropertiesBackupTest.java @@ -112,8 +112,6 @@ public class PropertiesBackupTest extends AbstractDbUnitTestCase { FileUtils.readFileToString( TestUtils.getResource(getClass(), "backup-with-multiline-property.xml"), CharEncoding.UTF_8)); - getSession().commit(); - Property property = getSession().getSingleResult(Property.class, "key", "sonar.multiline.secured"); assertThat(property.getValue(), startsWith("ONQwdcwcwwdadalkdmaiQGMqMVnhtAbhxwjjoVkHbWgx")); assertThat(property.getValue(), endsWith("mmmm"));