]> source.dussan.org Git - sonarqube.git/commitdiff
Reuse database for faster unit tests
authorDavid Gageot <david@gageot.net>
Thu, 12 Jul 2012 06:40:17 +0000 (08:40 +0200)
committerDavid Gageot <david@gageot.net>
Thu, 12 Jul 2012 15:21:01 +0000 (17:21 +0200)
sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java
sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java
sonar-core/src/test/java/org/sonar/core/persistence/DatabaseCommands.java
sonar-core/src/test/java/org/sonar/jpa/test/AbstractDbUnitTestCase.java
sonar-server/src/main/java/org/sonar/server/configuration/PropertiesBackup.java
sonar-server/src/test/java/org/sonar/server/configuration/PropertiesBackupTest.java

index 5a0d83260503fcfcbf82d82471658afb41012ae6..8c318a265d5d3c256935d290ec965d4b33ed41e2 100644 (file)
@@ -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");
   }
 
index 0c64f2ef41948547bc32ea689c199dd481d23070..131af2e70c758482238139a8dec4fd7af7831d18 100644 (file)
@@ -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;
   }
index 2c1b44fd0d52f590a07c85b12d752d9bb4393d6e..1b787aa1bae353400d68831c39a2baf2fd6fa810 100644 (file)
@@ -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
index 5aefd12e30b087a4732918ab06571f24a0a8b1ce..01e0b25b6380eab740e17171618c500bb1057fd7 100644 (file)
@@ -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;
   }
index da419f65b2624e8846a52000538a86002d3f774a..d0fb42a07777024b92f6d02503b319ea5ec75418 100644 (file)
@@ -67,6 +67,7 @@ public class PropertiesBackup implements Backupable {
         }
       }
     }
+    databaseSession.commit();
   }
 
   private void clearProperties() {
index d8f207ac8339ba597424fadff132e867e78ddfce..078a39dc41a91822feef9bd3ad8220fbcf3f2587 100644 (file)
@@ -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"));