package org.springframework.cloud.service.relational; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Collections; import java.util.List; import java.util.Properties; import javax.sql.DataSource; import org.junit.Test; import org.springframework.cloud.ReflectionUtils; import org.springframework.cloud.config.DataSourceCloudConfigTestHelper; import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig; import org.springframework.cloud.service.common.RelationalServiceInfo; import org.springframework.cloud.service.relational.DataSourceConfig.ConnectionConfig; import org.springframework.test.util.ReflectionTestUtils; /** * * @author Ramnivas Laddad * */ public abstract class AbstractDataSourceCreatorTest<C extends DataSourceCreator<SI>, SI extends RelationalServiceInfo> { public abstract SI createServiceInfo(); public abstract String getDriverName(); public abstract C getCreator(); public abstract String getValidationQueryStart(); @Test public void cloudDataSourceCreationNoConfig() throws Exception { SI relationalServiceInfo = createServiceInfo(); List<String> pooledDataSource = Collections.singletonList(BasicDbcpPooledDataSourceCreator.class.getSimpleName()); DataSourceConfig config = new DataSourceConfig(pooledDataSource); DataSource dataSource = getCreator().create(relationalServiceInfo, config); assertDataSourceProperties(relationalServiceInfo, dataSource); } @Test public void cloudDataSourceCreationWithConfig() throws Exception { SI relationalServiceInfo = createServiceInfo(); PoolConfig poolConfig = new PoolConfig("5", 100); ConnectionConfig connectionConfig = new ConnectionConfig("foo=bar"); List<String> pooledDataSource = Collections.singletonList(BasicDbcpPooledDataSourceCreator.class.getSimpleName()); DataSourceConfig config = new DataSourceConfig(poolConfig, connectionConfig, pooledDataSource); DataSource dataSource = getCreator().create(relationalServiceInfo, config); assertDataSourceProperties(relationalServiceInfo, dataSource); DataSourceCloudConfigTestHelper.assertPoolProperties(dataSource, 5, 0, 100); Properties connectionProp = new Properties(); connectionProp.put("foo", "bar"); assertConnectionProperties(dataSource, connectionProp); } private void assertConnectionProperties(DataSource dataSource, Properties connectionProp) { assertEquals(connectionProp, ReflectionTestUtils.getField(dataSource, "connectionProperties")); } private void assertDataSourceProperties(RelationalServiceInfo relationalServiceInfo, DataSource dataSource) { assertNotNull(dataSource); assertEquals(getDriverName(), ReflectionUtils.getValue(dataSource, "driverClassName")); assertEquals(relationalServiceInfo.getJdbcUrl(), ReflectionUtils.getValue(dataSource, "url")); Object testOnBorrow = ReflectionUtils.getValue(dataSource, "testOnBorrow"); assertNotNull(testOnBorrow); assertTrue(Boolean.valueOf(testOnBorrow.toString())); Object validationQuery = ReflectionUtils.getValue(dataSource, "validationQuery"); assertNotNull(validationQuery); assertTrue(validationQuery.toString().startsWith(getValidationQueryStart())); } }