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());
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;
}
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;
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 {
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
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
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
Properties props = db.getProperties();
- assertThat(props.getProperty("sonar.jdbc.maxActive"), Is.is("2"));
+ assertThat(props.getProperty("sonar.jdbc.maxActive")).isEqualTo("2");
}
@Test
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
DefaultDatabase database = new DefaultDatabase(settings);
database.initSettings();
- assertThat(database.getSchema(), Is.is("my_schema"));
+ assertThat(database.getSchema()).isEqualTo("my_schema");
}
@Test
DefaultDatabase database = new DefaultDatabase(settings);
database.initSettings();
- assertThat(database.getSchema(), Is.is("my_schema"));
+ assertThat(database.getSchema()).isEqualTo("my_schema");
}
@Test
DefaultDatabase database = new DefaultDatabase(settings);
database.initSettings();
- assertThat(database.getSchema(), nullValue());
+ assertThat(database.getSchema()).isNull();
}
@Test
DefaultDatabase database = new DefaultDatabase(settings);
database.initSettings();
- assertThat(database.getSchema(), Is.is("my_schema"));
+ assertThat(database.getSchema()).isEqualTo("my_schema");
}
@Test
DefaultDatabase database = new DefaultDatabase(settings);
database.initSettings();
- assertThat(database.getSchema(), nullValue());
+ assertThat(database.getSchema()).isNull();
}
@Test
DefaultDatabase database = new DefaultDatabase(settings);
database.initSettings();
- assertThat(database.getDialect().getId(), Is.is(PostgreSql.ID));
+ assertThat(database.getDialect().getId()).isEqualTo(PostgreSql.ID);
}
@Test
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");
}
}