package org.resthub.jpa; import com.jolbox.bonecp.BoneCPConfig; import com.jolbox.bonecp.BoneCPTestDataSource; import org.fest.assertions.api.Assertions; import org.resthub.jpa.pool.BoneCPDataSourceFactory; import org.testng.annotations.Test; import javax.sql.DataSource; import java.util.Properties; public class BoneCPDataSourceFactoryTest { private BoneCPDataSourceFactory boneCPDataSourceFactory = new BoneCPDataSourceFactory(); @Test public void testBoneCPDataSourceConfigNoProps() throws Exception { DataSource dataSource = boneCPDataSourceFactory.create(BoneCPTestDataSource.class, new Properties()); Assertions.assertThat(dataSource).isNotNull().isInstanceOf(BoneCPTestDataSource.class); BoneCPTestDataSource testDataSource = (BoneCPTestDataSource) dataSource; Assertions.assertThat(testDataSource).isNotNull(); Assertions.assertThat(testDataSource.getDriverClass()).isNull(); Assertions.assertThat(testDataSource.getConfig()).isNotNull(); // check that BoneCP defaults are kept BoneCPConfig expectedDefaults = new BoneCPConfig(); Assertions.assertThat(testDataSource.getConfig().getAcquireIncrement()).isEqualTo(expectedDefaults.getAcquireIncrement()); Assertions.assertThat(testDataSource.getConfig().getAcquireRetryAttempts()).isEqualTo(expectedDefaults.getAcquireRetryAttempts()); Assertions.assertThat(testDataSource.getConfig().getAcquireRetryDelayInMs()).isEqualTo(expectedDefaults.getAcquireRetryDelayInMs()); Assertions.assertThat(testDataSource.getConfig().getCloseConnectionWatchTimeoutInMs()).isEqualTo(expectedDefaults.getCloseConnectionWatchTimeoutInMs()); Assertions.assertThat(testDataSource.getConfig().getConnectionTimeoutInMs()).isEqualTo(expectedDefaults.getConnectionTimeoutInMs()); Assertions.assertThat(testDataSource.getConfig().getConnectionHookClassName()).isEqualTo(expectedDefaults.getConnectionHookClassName()); Assertions.assertThat(testDataSource.getConfig().getConnectionTestStatement()).isEqualTo(expectedDefaults.getConnectionTestStatement()); Assertions.assertThat(testDataSource.getConfig().getDefaultAutoCommit()).isEqualTo(expectedDefaults.getDefaultAutoCommit()); Assertions.assertThat(testDataSource.getConfig().getDefaultCatalog()).isEqualTo(expectedDefaults.getDefaultCatalog()); Assertions.assertThat(testDataSource.getConfig().getDefaultReadOnly()).isEqualTo(expectedDefaults.getDefaultReadOnly()); Assertions.assertThat(testDataSource.getConfig().getDefaultTransactionIsolation()).isEqualTo(expectedDefaults.getDefaultTransactionIsolation()); Assertions.assertThat(testDataSource.getConfig().getIdleConnectionTestPeriodInMinutes()).isEqualTo(expectedDefaults.getIdleConnectionTestPeriodInMinutes()); Assertions.assertThat(testDataSource.getConfig().getIdleMaxAgeInMinutes()).isEqualTo(expectedDefaults.getIdleMaxAgeInMinutes()); Assertions.assertThat(testDataSource.getConfig().getInitSQL()).isEqualTo(expectedDefaults.getInitSQL()); Assertions.assertThat(testDataSource.getConfig().getPoolName()).isEqualTo(expectedDefaults.getPoolName()); Assertions.assertThat(testDataSource.getConfig().getMaxConnectionAgeInSeconds()).isEqualTo(expectedDefaults.getMaxConnectionAgeInSeconds()); Assertions.assertThat(testDataSource.getConfig().getMaxConnectionsPerPartition()).isEqualTo(expectedDefaults.getMaxConnectionsPerPartition()); Assertions.assertThat(testDataSource.getConfig().getMinConnectionsPerPartition()).isEqualTo(expectedDefaults.getMinConnectionsPerPartition()); Assertions.assertThat(testDataSource.getConfig().getPartitionCount()).isEqualTo(expectedDefaults.getPartitionCount()); Assertions.assertThat(testDataSource.getConfig().getPoolAvailabilityThreshold()).isEqualTo(expectedDefaults.getPoolAvailabilityThreshold()); Assertions.assertThat(testDataSource.getConfig().getPoolStrategy()).isEqualTo(expectedDefaults.getPoolStrategy()); Assertions.assertThat(testDataSource.getConfig().getQueryExecuteTimeLimitInMs()).isEqualTo(expectedDefaults.getQueryExecuteTimeLimitInMs()); Assertions.assertThat(testDataSource.getConfig().getServiceOrder()).isEqualTo(expectedDefaults.getServiceOrder()); Assertions.assertThat(testDataSource.getConfig().getStatementsCacheSize()).isEqualTo(expectedDefaults.getStatementsCacheSize()); Assertions.assertThat(testDataSource.getConfig().getJdbcUrl()).isEqualTo(expectedDefaults.getJdbcUrl()); Assertions.assertThat(testDataSource.getConfig().getUsername()).isEqualTo(expectedDefaults.getUsername()); Assertions.assertThat(testDataSource.getConfig().getPassword()).isEqualTo(expectedDefaults.getPassword()); } @Test public void testBoneCPDataSourceConfigAllProps() throws Exception { Properties configProps = new Properties(); configProps.put("driverClass", "org.resthub.TestDriverClass"); configProps.put("acquireIncrement", "1"); configProps.put("acquireRetryAttempts", "2"); configProps.put("acquireRetryDelayInMs", "5000"); configProps.put("closeConnectionWatchTimeoutInMs", "1"); configProps.put("connectionTimeoutInMs", "1"); configProps.put("connectionHookClassName", "org.resthub.Test"); configProps.put("connectionTestStatement", "select 1"); configProps.put("defaultAutoCommit", "false"); configProps.put("defaultCatalog", "resthubCatalog"); configProps.put("defaultReadOnly", "true"); configProps.put("defaultTransactionIsolation", "default"); configProps.put("idleConnectionTestPeriodInMinutes", "50"); configProps.put("idleMaxAgeInMinutes", "50"); configProps.put("initSQL", "select 1"); configProps.put("poolName", "ResthubPool"); configProps.put("maxConnectionAgeInSeconds", "10"); configProps.put("maxConnectionsPerPartition", "3"); configProps.put("minConnectionsPerPartition", "2"); configProps.put("partitionCount", "2"); configProps.put("poolAvailabilityThreshold", "1"); configProps.put("poolStrategy", "CACHED"); configProps.put("queryExecuteTimeLimitInMs", "10"); configProps.put("serviceOrder", "LIFO"); configProps.put("statementsCacheSize", "1"); configProps.put("jdbcUrl", "url"); configProps.put("username", "user"); configProps.put("password", "pass"); DataSource dataSource = boneCPDataSourceFactory.create(BoneCPTestDataSource.class, configProps); Assertions.assertThat(dataSource).isNotNull().isInstanceOf(BoneCPTestDataSource.class); BoneCPTestDataSource testDataSource = (BoneCPTestDataSource) dataSource; Assertions.assertThat(testDataSource).isNotNull(); Assertions.assertThat(testDataSource.getDriverClass()).isNotNull().isEqualTo(configProps.getProperty("driverClass")); Assertions.assertThat(testDataSource.getConfig()).isNotNull(); // check that BoneCP defaults are kept Assertions.assertThat(testDataSource.getConfig().getAcquireIncrement()).isEqualTo(new Integer(configProps.getProperty("acquireIncrement"))); Assertions.assertThat(testDataSource.getConfig().getAcquireRetryAttempts()).isEqualTo(new Integer(configProps.getProperty("acquireRetryAttempts"))); Assertions.assertThat(testDataSource.getConfig().getAcquireRetryDelayInMs()).isEqualTo(new Integer(configProps.getProperty("acquireRetryDelayInMs"))); Assertions.assertThat(testDataSource.getConfig().getCloseConnectionWatchTimeoutInMs()).isEqualTo(new Integer(configProps.getProperty("closeConnectionWatchTimeoutInMs"))); Assertions.assertThat(testDataSource.getConfig().getConnectionTimeoutInMs()).isEqualTo(new Integer(configProps.getProperty("connectionTimeoutInMs"))); Assertions.assertThat(testDataSource.getConfig().getConnectionHookClassName()).isEqualTo(configProps.getProperty("connectionHookClassName")); Assertions.assertThat(testDataSource.getConfig().getConnectionTestStatement()).isEqualTo(configProps.getProperty("connectionTestStatement")); Assertions.assertThat(testDataSource.getConfig().getDefaultAutoCommit()).isEqualTo(Boolean.getBoolean(configProps.getProperty("defaultAutoCommit"))); Assertions.assertThat(testDataSource.getConfig().getDefaultCatalog()).isEqualTo(configProps.getProperty("defaultCatalog")); Assertions.assertThat(testDataSource.getConfig().getDefaultReadOnly()).isEqualTo(Boolean.getBoolean(configProps.getProperty("defaultReadOnly"))); Assertions.assertThat(testDataSource.getConfig().getDefaultTransactionIsolation()).isEqualTo(configProps.getProperty("defaultTransactionIsolation")); Assertions.assertThat(testDataSource.getConfig().getIdleConnectionTestPeriodInMinutes()).isEqualTo(new Integer(configProps.getProperty("idleConnectionTestPeriodInMinutes"))); Assertions.assertThat(testDataSource.getConfig().getIdleMaxAgeInMinutes()).isEqualTo(new Integer(configProps.getProperty("idleMaxAgeInMinutes"))); Assertions.assertThat(testDataSource.getConfig().getInitSQL()).isEqualTo(configProps.getProperty("initSQL")); Assertions.assertThat(testDataSource.getConfig().getPoolName()).isEqualTo(configProps.getProperty("poolName")); Assertions.assertThat(testDataSource.getConfig().getMaxConnectionAgeInSeconds()).isEqualTo(new Integer(configProps.getProperty("maxConnectionAgeInSeconds"))); Assertions.assertThat(testDataSource.getConfig().getMaxConnectionsPerPartition()).isEqualTo(new Integer(configProps.getProperty("maxConnectionsPerPartition"))); Assertions.assertThat(testDataSource.getConfig().getMinConnectionsPerPartition()).isEqualTo(new Integer(configProps.getProperty("minConnectionsPerPartition"))); Assertions.assertThat(testDataSource.getConfig().getPartitionCount()).isEqualTo(new Integer(configProps.getProperty("partitionCount"))); Assertions.assertThat(testDataSource.getConfig().getPoolAvailabilityThreshold()).isEqualTo(new Integer(configProps.getProperty("poolAvailabilityThreshold"))); Assertions.assertThat(testDataSource.getConfig().getPoolStrategy()).isEqualTo(configProps.getProperty("poolStrategy")); Assertions.assertThat(testDataSource.getConfig().getQueryExecuteTimeLimitInMs()).isEqualTo(new Integer(configProps.getProperty("queryExecuteTimeLimitInMs"))); Assertions.assertThat(testDataSource.getConfig().getServiceOrder()).isEqualTo(configProps.getProperty("serviceOrder")); Assertions.assertThat(testDataSource.getConfig().getStatementsCacheSize()).isEqualTo(new Integer(configProps.getProperty("statementsCacheSize"))); Assertions.assertThat(testDataSource.getConfig().getJdbcUrl()).isEqualTo(configProps.getProperty("jdbcUrl")); Assertions.assertThat(testDataSource.getConfig().getUsername()).isEqualTo(configProps.getProperty("username")); Assertions.assertThat(testDataSource.getConfig().getPassword()).isEqualTo(configProps.getProperty("password")); } @Test public void testBoneCPDataSourceConfigPartialAnUnresolvedProps() throws Exception { Properties configProps = new Properties(); configProps.put("driverClass", "org.resthub.TestDriverClass"); configProps.put("jdbcUrl", "url"); configProps.put("username", "user"); configProps.put("password", "pass"); configProps.put("acquireIncrement", "1"); configProps.put("poolName", "retshubPoolName"); configProps.put("maxConnectionsPerPartition", "${maxConnectionsPerPartition}"); configProps.put("poolStrategy", "${poolStrategy}"); configProps.put("idleMaxAgeInMinutes", "${idleMaxAgeInMinutes}"); DataSource dataSource = boneCPDataSourceFactory.create(BoneCPTestDataSource.class, configProps); Assertions.assertThat(dataSource).isNotNull().isInstanceOf(BoneCPTestDataSource.class); BoneCPTestDataSource testDataSource = (BoneCPTestDataSource) dataSource; Assertions.assertThat(testDataSource).isNotNull(); Assertions.assertThat(testDataSource.getDriverClass()).isNotNull().isEqualTo(configProps.getProperty("driverClass")); Assertions.assertThat(testDataSource.getConfig()).isNotNull(); // check that BoneCP defaults are kept BoneCPConfig expectedDefaults = new BoneCPConfig(); Assertions.assertThat(testDataSource.getConfig().getAcquireRetryAttempts()).isEqualTo(expectedDefaults.getAcquireRetryAttempts()); Assertions.assertThat(testDataSource.getConfig().getAcquireRetryDelayInMs()).isEqualTo(expectedDefaults.getAcquireRetryDelayInMs()); Assertions.assertThat(testDataSource.getConfig().getCloseConnectionWatchTimeoutInMs()).isEqualTo(expectedDefaults.getCloseConnectionWatchTimeoutInMs()); Assertions.assertThat(testDataSource.getConfig().getConnectionTimeoutInMs()).isEqualTo(expectedDefaults.getConnectionTimeoutInMs()); Assertions.assertThat(testDataSource.getConfig().getConnectionHookClassName()).isEqualTo(expectedDefaults.getConnectionHookClassName()); Assertions.assertThat(testDataSource.getConfig().getConnectionTestStatement()).isEqualTo(expectedDefaults.getConnectionTestStatement()); Assertions.assertThat(testDataSource.getConfig().getDefaultAutoCommit()).isEqualTo(expectedDefaults.getDefaultAutoCommit()); Assertions.assertThat(testDataSource.getConfig().getDefaultCatalog()).isEqualTo(expectedDefaults.getDefaultCatalog()); Assertions.assertThat(testDataSource.getConfig().getDefaultReadOnly()).isEqualTo(expectedDefaults.getDefaultReadOnly()); Assertions.assertThat(testDataSource.getConfig().getDefaultTransactionIsolation()).isEqualTo(expectedDefaults.getDefaultTransactionIsolation()); Assertions.assertThat(testDataSource.getConfig().getIdleConnectionTestPeriodInMinutes()).isEqualTo(expectedDefaults.getIdleConnectionTestPeriodInMinutes()); Assertions.assertThat(testDataSource.getConfig().getIdleMaxAgeInMinutes()).isEqualTo(expectedDefaults.getIdleMaxAgeInMinutes()); Assertions.assertThat(testDataSource.getConfig().getInitSQL()).isEqualTo(expectedDefaults.getInitSQL()); Assertions.assertThat(testDataSource.getConfig().getMaxConnectionAgeInSeconds()).isEqualTo(expectedDefaults.getMaxConnectionAgeInSeconds()); Assertions.assertThat(testDataSource.getConfig().getMaxConnectionsPerPartition()).isEqualTo(expectedDefaults.getMaxConnectionsPerPartition()); Assertions.assertThat(testDataSource.getConfig().getMinConnectionsPerPartition()).isEqualTo(expectedDefaults.getMinConnectionsPerPartition()); Assertions.assertThat(testDataSource.getConfig().getPartitionCount()).isEqualTo(expectedDefaults.getPartitionCount()); Assertions.assertThat(testDataSource.getConfig().getPoolAvailabilityThreshold()).isEqualTo(expectedDefaults.getPoolAvailabilityThreshold()); Assertions.assertThat(testDataSource.getConfig().getPoolStrategy()).isEqualTo(expectedDefaults.getPoolStrategy()); Assertions.assertThat(testDataSource.getConfig().getQueryExecuteTimeLimitInMs()).isEqualTo(expectedDefaults.getQueryExecuteTimeLimitInMs()); Assertions.assertThat(testDataSource.getConfig().getServiceOrder()).isEqualTo(expectedDefaults.getServiceOrder()); Assertions.assertThat(testDataSource.getConfig().getStatementsCacheSize()).isEqualTo(expectedDefaults.getStatementsCacheSize()); // check concrete datasource parameters Assertions.assertThat(testDataSource.getConfig().getJdbcUrl()).isEqualTo(configProps.getProperty("jdbcUrl")); Assertions.assertThat(testDataSource.getConfig().getUsername()).isEqualTo(configProps.getProperty("username")); Assertions.assertThat(testDataSource.getConfig().getPassword()).isEqualTo(configProps.getProperty("password")); Assertions.assertThat(testDataSource.getConfig().getPoolName()).isEqualTo(configProps.getProperty("poolName")); Assertions.assertThat(testDataSource.getConfig().getAcquireIncrement()).isEqualTo(new Integer(configProps.getProperty("acquireIncrement"))); } }