package org.resthub.jpa; import com.zaxxer.hikari.HikariCPTestDataSource; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.TestElf; import org.fest.assertions.api.Assertions; import org.h2.jdbcx.JdbcDataSource; import org.resthub.jpa.pool.HikariCPDataSourceTestFactory; import org.resthub.jpa.sql.FakeDataSource; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.testng.annotations.Test; import javax.inject.Inject; import javax.inject.Named; import java.sql.SQLException; @ContextConfiguration(locations = {"classpath:hikariCPContext.xml", "classpath:hikaricp-test-context.xml"}) @ActiveProfiles({"resthub-jpa", "resthub-pool-hikaricp"}) public class HikariCPDataSourceFactoryIntegrationTest extends AbstractTestNGSpringContextTests { @Inject @Named("hikariCPDataSourceFactory") private HikariCPDataSourceTestFactory hikariCPDataSourceTestFactory; @Inject @Named("dataSource") private HikariCPTestDataSource hikariCPTestDataSource; @Test public void testHikariDataSourceConfigResthub() throws SQLException { Assertions.assertThat(this.hikariCPTestDataSource).isNotNull(); Assertions.assertThat(this.hikariCPTestDataSource.getConfig()).isNotNull(); // check Resthub default values Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getDataSourceClassName()).isEqualTo("org.resthub.jpa.sql.FakeDataSource"); Assertions.assertThat(this.hikariCPDataSourceTestFactory.getOriginalDataSourceClassName()).isEqualTo("org.h2.jdbcx.JdbcDataSource"); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getConnectionTestQuery()).isEqualTo("/* ping*/ SELECT 1"); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getPoolName()).isEqualTo("ResthubDBPool"); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().isRegisterMbeans()).isEqualTo(false); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getMaximumPoolSize()).isEqualTo(12); // check concrete datasource parameters Assertions.assertThat(this.hikariCPTestDataSource.isWrapperFor(FakeDataSource.class)).isTrue(); JdbcDataSource ds = (JdbcDataSource) TestElf.getPool(this.hikariCPTestDataSource).getDataSource(); Assertions.assertThat(ds.getURL()).isNotNull().isEqualTo("jdbc:h2:mem:resthub"); Assertions.assertThat(ds.getUser()).isNotNull().isEqualTo("sa"); Assertions.assertThat(ds.getPassword()).isNotNull().isEqualTo(""); // check that properties provided in database.properties are resolved Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getMaxLifetime()).isEqualTo(200000); // check that Hikari defaults are kept HikariConfig expectedDefaults = new HikariConfig(); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getConnectionCustomizerClassName()).isEqualTo(expectedDefaults.getConnectionCustomizerClassName()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getConnectionInitSql()).isEqualTo(expectedDefaults.getConnectionInitSql()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getConnectionTimeout()).isEqualTo(expectedDefaults.getConnectionTimeout()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getDataSource()).isEqualTo(expectedDefaults.getDataSource()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getIdleTimeout()).isEqualTo(expectedDefaults.getIdleTimeout()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getLeakDetectionThreshold()).isEqualTo(expectedDefaults.getLeakDetectionThreshold()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().getTransactionIsolation()).isEqualTo(expectedDefaults.getTransactionIsolation()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().isAutoCommit()).isEqualTo(expectedDefaults.isAutoCommit()); Assertions.assertThat(this.hikariCPTestDataSource.getConfig().isInitializationFailFast()).isEqualTo(expectedDefaults.isInitializationFailFast()); } }