From: Simon Brandhof Date: Mon, 19 Nov 2012 13:53:30 +0000 (+0100) Subject: Support SonarSource integration tests in sonar-core X-Git-Tag: 3.4~328^2~3 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=929fd9533eda332db4689cd8f28290b886cc28dc;p=sonarqube.git Support SonarSource integration tests in sonar-core --- diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java b/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java index 0cf49601983..cff06153078 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java @@ -240,4 +240,9 @@ public class DefaultDatabase implements Database { props.setProperty(key, defaultValue); } } + + @Override + public String toString() { + return "Database[" + properties.getProperty("sonar.jdbc.url") + "]"; + } } 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 560cc8d8ea6..71a53963353 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 @@ -28,40 +28,55 @@ import org.dbunit.DatabaseUnitException; import org.dbunit.IDatabaseTester; import org.dbunit.database.DatabaseConfig; import org.dbunit.database.IDatabaseConnection; -import org.dbunit.dataset.*; +import org.dbunit.dataset.CompositeDataSet; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.ITable; +import org.dbunit.dataset.ReplacementDataSet; import org.dbunit.dataset.filter.DefaultColumnFilter; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.ext.mssql.InsertIdentityOperation; import org.dbunit.operation.DatabaseOperation; import org.junit.Assert; import org.junit.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.sonar.api.config.Settings; import org.sonar.core.config.Logback; +import java.io.IOException; import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URISyntaxException; import java.sql.Connection; import java.sql.SQLException; +import java.util.Properties; import static org.junit.Assert.fail; public abstract class AbstractDaoTestCase { + private static Logger LOG = LoggerFactory.getLogger(AbstractDaoTestCase.class); private static Database database; private static DatabaseCommands databaseCommands; private static IDatabaseTester databaseTester; private static MyBatis myBatis; @Before - public void startDatabase() throws SQLException { + public void startDatabase() throws Exception { if (database == null) { Settings settings = new Settings().setProperties(Maps.fromProperties(System.getProperties())); - + if (settings.hasKey("orchestrator.configUrl")) { + loadOrchestratorSettings(settings); + } boolean hasDialect = settings.hasKey("sonar.jdbc.dialect"); if (hasDialect) { database = new DefaultDatabase(settings); } else { - database = new H2Database("sonarMyBatis"); + database = new H2Database("h2Tests"); } database.start(); + LOG.info("Test Database: " + database); databaseCommands = DatabaseCommands.forDialect(database.getDialect()); databaseTester = new DataSourceDatabaseTester(database.getDataSource()); @@ -73,6 +88,24 @@ public abstract class AbstractDaoTestCase { databaseCommands.truncateDatabase(database.getDataSource()); } + private void loadOrchestratorSettings(Settings settings) throws URISyntaxException, IOException { + URI uri = new URI(settings.getString("orchestrator.configUrl")); + HttpURLConnection connection = (HttpURLConnection) uri.toURL().openConnection(); + int responseCode = connection.getResponseCode(); + if (responseCode >= 400) { + throw new IllegalStateException("Fail to request: " + uri + ". Status code=" + responseCode); + } + + InputStream input = connection.getInputStream(); + try { + Properties props = new Properties(); + props.load(input); + settings.addProperties(props); + } finally { + IOUtils.closeQuietly(input); + } + } + protected MyBatis getMyBatis() { return myBatis; } diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/DefaultDatabaseTest.java b/sonar-core/src/test/java/org/sonar/core/persistence/DefaultDatabaseTest.java index 64945262ef2..e2bc586cd88 100644 --- a/sonar-core/src/test/java/org/sonar/core/persistence/DefaultDatabaseTest.java +++ b/sonar-core/src/test/java/org/sonar/core/persistence/DefaultDatabaseTest.java @@ -20,7 +20,6 @@ package org.sonar.core.persistence; import org.apache.commons.dbcp.BasicDataSource; -import org.hamcrest.core.Is; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.core.persistence.dialect.Oracle; @@ -28,8 +27,8 @@ import org.sonar.core.persistence.dialect.PostgreSql; import java.util.Properties; -import static org.hamcrest.Matchers.nullValue; -import static org.junit.Assert.assertThat; +import static org.fest.assertions.Assertions.assertThat; + public class DefaultDatabaseTest { @@ -39,10 +38,11 @@ public class DefaultDatabaseTest { db.initSettings(); Properties props = db.getProperties(); - assertThat(props.getProperty("sonar.jdbc.username"), Is.is("sonar")); - assertThat(props.getProperty("sonar.jdbc.password"), Is.is("sonar")); - assertThat(props.getProperty("sonar.jdbc.url"), Is.is("jdbc:h2:tcp://localhost/sonar")); - assertThat(props.getProperty("sonar.jdbc.driverClassName"), Is.is("org.h2.Driver")); + assertThat(props.getProperty("sonar.jdbc.username")).isEqualTo("sonar"); + assertThat(props.getProperty("sonar.jdbc.password")).isEqualTo("sonar"); + assertThat(props.getProperty("sonar.jdbc.url")).isEqualTo("jdbc:h2:tcp://localhost/sonar"); + assertThat(props.getProperty("sonar.jdbc.driverClassName")).isEqualTo("org.h2.Driver"); + assertThat(db.toString()).isEqualTo("Database[jdbc:h2:tcp://localhost/sonar]"); } @Test @@ -55,8 +55,8 @@ public class DefaultDatabaseTest { db.initSettings(); Properties props = db.getProperties(); - assertThat(props.getProperty("sonar.jdbc.username"), Is.is("me")); - assertThat(props.getProperty("sonar.jdbc.driverClassName"), Is.is("my.Driver")); + assertThat(props.getProperty("sonar.jdbc.username")).isEqualTo("me"); + assertThat(props.getProperty("sonar.jdbc.driverClassName")).isEqualTo("my.Driver"); } @Test @@ -68,9 +68,9 @@ public class DefaultDatabaseTest { Properties commonsDbcpProps = DefaultDatabase.extractCommonsDbcpProperties(props); - assertThat(commonsDbcpProps.getProperty("username"), Is.is("me")); - assertThat(commonsDbcpProps.getProperty("driverClassName"), Is.is("my.Driver")); - assertThat(commonsDbcpProps.getProperty("maxActive"), Is.is("5")); + assertThat(commonsDbcpProps.getProperty("username")).isEqualTo("me"); + assertThat(commonsDbcpProps.getProperty("driverClassName")).isEqualTo("my.Driver"); + assertThat(commonsDbcpProps.getProperty("maxActive")).isEqualTo("5"); } @Test @@ -87,7 +87,7 @@ public class DefaultDatabaseTest { Properties props = db.getProperties(); - assertThat(props.getProperty("sonar.jdbc.maxActive"), Is.is("2")); + assertThat(props.getProperty("sonar.jdbc.maxActive")).isEqualTo("2"); } @Test @@ -103,8 +103,8 @@ public class DefaultDatabaseTest { db.start(); db.stop(); - assertThat(db.getDialect().getId(), Is.is("h2")); - assertThat(((BasicDataSource) db.getDataSource()).getMaxActive(), Is.is(1)); + assertThat(db.getDialect().getId()).isEqualTo("h2"); + assertThat(((BasicDataSource) db.getDataSource()).getMaxActive()).isEqualTo(1); } @Test @@ -115,7 +115,7 @@ public class DefaultDatabaseTest { DefaultDatabase database = new DefaultDatabase(settings); database.initSettings(); - assertThat(database.getSchema(), Is.is("my_schema")); + assertThat(database.getSchema()).isEqualTo("my_schema"); } @Test @@ -127,7 +127,7 @@ public class DefaultDatabaseTest { DefaultDatabase database = new DefaultDatabase(settings); database.initSettings(); - assertThat(database.getSchema(), Is.is("my_schema")); + assertThat(database.getSchema()).isEqualTo("my_schema"); } @Test @@ -138,7 +138,7 @@ public class DefaultDatabaseTest { DefaultDatabase database = new DefaultDatabase(settings); database.initSettings(); - assertThat(database.getSchema(), nullValue()); + assertThat(database.getSchema()).isNull(); } @Test @@ -150,7 +150,7 @@ public class DefaultDatabaseTest { DefaultDatabase database = new DefaultDatabase(settings); database.initSettings(); - assertThat(database.getSchema(), Is.is("my_schema")); + assertThat(database.getSchema()).isEqualTo("my_schema"); } @Test @@ -161,7 +161,7 @@ public class DefaultDatabaseTest { DefaultDatabase database = new DefaultDatabase(settings); database.initSettings(); - assertThat(database.getSchema(), nullValue()); + assertThat(database.getSchema()).isNull(); } @Test @@ -172,7 +172,7 @@ public class DefaultDatabaseTest { DefaultDatabase database = new DefaultDatabase(settings); database.initSettings(); - assertThat(database.getDialect().getId(), Is.is(PostgreSql.ID)); + assertThat(database.getDialect().getId()).isEqualTo(PostgreSql.ID); } @Test @@ -183,6 +183,20 @@ public class DefaultDatabaseTest { DefaultDatabase database = new DefaultDatabase(settings); database.initSettings(); - assertThat(database.getProperties().getProperty("sonar.jdbc.driverClassName"), Is.is("org.postgresql.Driver")); + assertThat(database.getProperties().getProperty("sonar.jdbc.driverClassName")).isEqualTo("org.postgresql.Driver"); + } + + @Test + public void shouldSetHibernateProperties() { + Settings settings = new Settings(); + settings.setProperty("sonar.jdbc.url", "jdbc:postgresql://localhost/sonar"); + settings.setProperty("sonar.hibernate.default_schema", "foo"); + DefaultDatabase database = new DefaultDatabase(settings); + database.initSettings(); + + Properties hibernateProps = database.getHibernateProperties(); + + assertThat(hibernateProps.getProperty("hibernate.hbm2ddl.auto")).isEqualTo("validate"); + assertThat(hibernateProps.getProperty("hibernate.default_schema")).isEqualTo("foo"); } } diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java b/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java index 8b2431dc67c..b05cba2266b 100644 --- a/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java +++ b/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java @@ -104,4 +104,9 @@ public class H2Database implements Database { properties.put(Environment.CONNECTION_PROVIDER, CustomHibernateConnectionProvider.class.getName()); return properties; } + + @Override + public String toString() { + return "H2 Database[" + name + "]"; + } }