]> source.dussan.org Git - sonarqube.git/commitdiff
Support SonarSource integration tests in sonar-core
authorSimon Brandhof <simon.brandhof@gmail.com>
Mon, 19 Nov 2012 13:53:30 +0000 (14:53 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Mon, 19 Nov 2012 13:53:43 +0000 (14:53 +0100)
sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java
sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java
sonar-core/src/test/java/org/sonar/core/persistence/DefaultDatabaseTest.java
sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java

index 0cf496019836f267b93bcd53209a176e2085671e..cff061530782496686a161895efc2cedb2a2a841 100644 (file)
@@ -240,4 +240,9 @@ public class DefaultDatabase implements Database {
       props.setProperty(key, defaultValue);
     }
   }
+
+  @Override
+  public String toString() {
+    return "Database[" + properties.getProperty("sonar.jdbc.url") + "]";
+  }
 }
index 560cc8d8ea670cb8385612a85845799781ae29fb..71a53963353fe13c589e41e00a8609e746bf14c9 100644 (file)
@@ -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;
   }
index 64945262ef2e6bcbdae9ebd91bd5b5f60d55318a..e2bc586cd88afefad96b8e2ac1c5efa701e7d0c5 100644 (file)
@@ -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");
   }
 }
index 8b2431dc67c7f17953e2eeeb4155b242776585c9..b05cba2266b0d20c03dccb39f1c210c3f797bb53 100644 (file)
@@ -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 + "]";
+  }
 }