aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2019-07-26 11:19:42 +0200
committerSonarTech <sonartech@sonarsource.com>2019-08-09 20:21:24 +0200
commitb83c58503a60c532379a7797c3a5f630be77a1ff (patch)
treee020c7082424361c1a042cacd80ad5bcfc9d5205 /server/sonar-db-dao
parente8985121ed131098be84a1a28bc2584052c4d911 (diff)
downloadsonarqube-b83c58503a60c532379a7797c3a5f630be77a1ff.tar.gz
sonarqube-b83c58503a60c532379a7797c3a5f630be77a1ff.zip
SONAR-8520 remove H2 specific way of creating database in Unit tests
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/MyBatisTest.java4
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/SQDatabase.java (renamed from server/sonar-db-dao/src/test/java/org/sonar/db/H2Database.java)91
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/SQDatabaseForH2Test.java (renamed from server/sonar-db-dao/src/test/java/org/sonar/db/H2DatabaseTest.java)4
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/TestDbImpl.java4
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java4
5 files changed, 78 insertions, 29 deletions
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/MyBatisTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/MyBatisTest.java
index 62e0e7dffce..e5a4f94946c 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/MyBatisTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/MyBatisTest.java
@@ -31,11 +31,11 @@ import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
public class MyBatisTest {
- private static H2Database database;
+ private static SQDatabase database;
@BeforeClass
public static void start() {
- database = new H2Database("sonar2", true);
+ database = SQDatabase.newH2Database("sonar2", true);
database.start();
}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/H2Database.java b/server/sonar-db-dao/src/test/java/org/sonar/db/SQDatabase.java
index c102ff0b0f6..4a4fd2eae79 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/H2Database.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/SQDatabase.java
@@ -19,13 +19,19 @@
*/
package org.sonar.db;
+import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.apache.commons.dbutils.DbUtils;
+import org.apache.commons.io.output.NullWriter;
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.jdbc.ScriptRunner;
import org.sonar.api.SonarEdition;
import org.sonar.api.SonarQubeSide;
+import org.sonar.api.config.Settings;
+import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.internal.SonarRuntimeImpl;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.Version;
@@ -34,7 +40,7 @@ import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.util.UuidFactoryFast;
import org.sonar.core.util.logs.Profiler;
import org.sonar.db.dialect.Dialect;
-import org.sonar.db.dialect.H2;
+import org.sonar.process.logging.LogbackHelper;
import org.sonar.server.platform.db.migration.MigrationConfigurationModule;
import org.sonar.server.platform.db.migration.engine.MigrationContainer;
import org.sonar.server.platform.db.migration.engine.MigrationContainerImpl;
@@ -50,20 +56,28 @@ import org.sonar.server.platform.db.migration.version.DbVersion;
import static com.google.common.base.Preconditions.checkState;
-/**
- * H2 in-memory database, used for unit tests against an empty DB, a specific script or against SQ schema.
- */
-public class H2Database extends CoreH2Database {
+public class SQDatabase extends DefaultDatabase {
private final boolean createSchema;
- /**
- * IMPORTANT: change DB name in order to not conflict with {@link DefaultDatabaseTest}
- */
- public H2Database(String name, boolean createSchema) {
- super(name);
+ private SQDatabase(Settings settings, boolean createSchema) {
+ super(new LogbackHelper(), settings);
this.createSchema = createSchema;
}
+ public static SQDatabase newDatabase(Settings settings, boolean createSchema) {
+ return new SQDatabase(settings, createSchema);
+ }
+
+ public static SQDatabase newH2Database(String name, boolean createSchema) {
+ MapSettings settings = new MapSettings()
+ .setProperty("sonar.jdbc.dialect", "h2")
+ .setProperty("sonar.jdbc.driverClassName", "org.h2.Driver")
+ .setProperty("sonar.jdbc.url", "jdbc:h2:mem:" + name)
+ .setProperty("sonar.jdbc.username", "sonar")
+ .setProperty("sonar.jdbc.password", "sonar");
+ return new SQDatabase(settings, createSchema);
+ }
+
@Override
public void start() {
super.start();
@@ -76,10 +90,10 @@ public class H2Database extends CoreH2Database {
Connection connection = null;
try {
connection = getDataSource().getConnection();
- NoopH2Database noopH2Database = new NoopH2Database();
+ NoopDatabase noopDatabase = new NoopDatabase(getDialect(), getDataSource());
// create and populate schema
- createMigrationHistoryTable(noopH2Database);
- executeDbMigrations(noopH2Database);
+ createMigrationHistoryTable(noopDatabase);
+ executeDbMigrations(noopDatabase);
} catch (SQLException e) {
throw new IllegalStateException("Fail to create schema", e);
} finally {
@@ -116,7 +130,7 @@ public class H2Database extends CoreH2Database {
}
private void execute(RegisteredMigrationStep step, MigrationStep migrationStep) {
- Profiler stepProfiler = Profiler.create(Loggers.get(H2Database.class));
+ Profiler stepProfiler = Profiler.create(Loggers.get(SQDatabase.class));
stepProfiler.startInfo(STEP_START_PATTERN, step);
boolean done = false;
try {
@@ -134,9 +148,9 @@ public class H2Database extends CoreH2Database {
}
}
- private void executeDbMigrations(NoopH2Database noopH2Database) {
+ private void executeDbMigrations(NoopDatabase noopDatabase) {
ComponentContainer parentContainer = new ComponentContainer();
- parentContainer.add(noopH2Database);
+ parentContainer.add(noopDatabase);
parentContainer.add(H2MigrationContainerPopulator.class);
MigrationConfigurationModule migrationConfigurationModule = new MigrationConfigurationModule();
migrationConfigurationModule.configure(parentContainer);
@@ -154,19 +168,27 @@ public class H2Database extends CoreH2Database {
.execute(migrationSteps.readAll());
}
- private void createMigrationHistoryTable(NoopH2Database noopH2Database) {
- new MigrationHistoryTableImpl(noopH2Database).start();
+ private void createMigrationHistoryTable(NoopDatabase noopDatabase) {
+ new MigrationHistoryTableImpl(noopDatabase).start();
}
- private class NoopH2Database implements Database {
+ private class NoopDatabase implements Database {
+ private final Dialect dialect;
+ private final DataSource dataSource;
+
+ private NoopDatabase(Dialect dialect, DataSource dataSource) {
+ this.dialect = dialect;
+ this.dataSource = dataSource;
+ }
+
@Override
public DataSource getDataSource() {
- return H2Database.this.getDataSource();
+ return dataSource;
}
@Override
public Dialect getDialect() {
- return new H2();
+ return dialect;
}
@Override
@@ -184,4 +206,31 @@ public class H2Database extends CoreH2Database {
// do nothing
}
}
+
+ public void executeScript(String classloaderPath) {
+ try (Connection connection = getDataSource().getConnection()) {
+ executeScript(connection, classloaderPath);
+ } catch (SQLException e) {
+ throw new IllegalStateException("Fail to execute script: " + classloaderPath, e);
+ }
+ }
+
+ private static void executeScript(Connection connection, String path) {
+ ScriptRunner scriptRunner = newScriptRunner(connection);
+ try {
+ scriptRunner.runScript(Resources.getResourceAsReader(path));
+ connection.commit();
+
+ } catch (Exception e) {
+ throw new IllegalStateException("Fail to restore: " + path, e);
+ }
+ }
+
+ private static ScriptRunner newScriptRunner(Connection connection) {
+ ScriptRunner scriptRunner = new ScriptRunner(connection);
+ scriptRunner.setDelimiter(";");
+ scriptRunner.setStopOnError(true);
+ scriptRunner.setLogWriter(new PrintWriter(new NullWriter()));
+ return scriptRunner;
+ }
}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/H2DatabaseTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/SQDatabaseForH2Test.java
index 98a64beb4f7..0c339676dff 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/H2DatabaseTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/SQDatabaseForH2Test.java
@@ -28,8 +28,8 @@ import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
-public class H2DatabaseTest {
- H2Database db = new H2Database("sonar2", true);
+public class SQDatabaseForH2Test {
+ SQDatabase db = SQDatabase.newH2Database("sonar2", true);
@Before
public void startDb() {
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/TestDbImpl.java b/server/sonar-db-dao/src/test/java/org/sonar/db/TestDbImpl.java
index d3a80308f91..b54eafd45a9 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/TestDbImpl.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/TestDbImpl.java
@@ -58,7 +58,7 @@ class TestDbImpl extends CoreTestDb {
if (dialect != null && !"h2".equals(dialect)) {
return new DefaultDatabase(new LogbackHelper(), settings);
}
- return new H2Database("h2Tests" + DigestUtils.md5Hex(StringUtils.defaultString(schemaPath)), schemaPath == null);
+ return SQDatabase.newH2Database("h2Tests" + DigestUtils.md5Hex(StringUtils.defaultString(schemaPath)), schemaPath == null);
};
Consumer<Database> schemaPathExecutor = database -> {
if (schemaPath == null) {
@@ -70,7 +70,7 @@ class TestDbImpl extends CoreTestDb {
database.stop();
throw new AssumptionViolatedException("This test is intended to be run on H2 only");
}
- ((H2Database) database).executeScript(schemaPath);
+ ((SQDatabase) database).executeScript(schemaPath);
};
BiConsumer<Database, Boolean> createMyBatis = (db, created) -> myBatis = newMyBatis(db, confExtensions);
init(databaseCreator, schemaPathExecutor, createMyBatis);
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java b/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java
index 3dca3902210..601fa7ed490 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java
@@ -26,7 +26,7 @@ import java.sql.Statement;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
-import org.sonar.db.H2Database;
+import org.sonar.db.SQDatabase;
import static com.google.common.base.Preconditions.checkState;
@@ -55,7 +55,7 @@ class SQSchemaDumper {
}).thenComparing(String.CASE_INSENSITIVE_ORDER);
String dumpToText() throws SQLException {
- H2Database database = new H2Database("SQSchemaDumper", true);
+ SQDatabase database = SQDatabase.newH2Database("SQSchemaDumper", true);
database.start();
try (Connection connection = database.getDataSource().getConnection();