Add tests to verify ConnectionConfiguration mapping to pooled DataSource providers.

This commit is contained in:
Scott Frederick
2017-01-30 18:21:22 -06:00
parent 61cfcd1c32
commit 9030d0f717

View File

@@ -10,9 +10,11 @@ import org.springframework.cloud.ReflectionUtils;
import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig;
import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.common.MysqlServiceInfo;
import org.springframework.cloud.service.relational.DataSourceConfig.ConnectionConfig;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.assertEquals;
@@ -28,11 +30,17 @@ import static org.springframework.cloud.service.relational.TomcatDbcpPooledDataS
import static org.springframework.cloud.service.relational.TomcatJdbcPooledDataSourceCreator.TOMCAT_JDBC_DATASOURCE;
public class PooledDataSourceCreatorsTest {
public static final int MIN_POOL_SIZE = 100;
public static final int MAX_POOL_SIZE = 200;
public static final int MAX_WAIT_TIME = 5;
private static final int MIN_POOL_SIZE = 100;
private static final int MAX_POOL_SIZE = 200;
private static final int MAX_WAIT_TIME = 5;
private static final String CONNECTION_PROPERTIES_STRING = "useUnicode=true;characterEncoding=UTF-8";
private static final Properties CONNECTION_PROPERTIES = new Properties() {{
setProperty("useUnicode", "true");
setProperty("characterEncoding", "UTF-8");
}};
@Mock private MysqlServiceInfo mockMysqlServiceInfo;
@Mock
private MysqlServiceInfo mockMysqlServiceInfo;
// Just to grab driver class name and validation query string
private MysqlDataSourceCreator mysqlDataSourceCreator = new MysqlDataSourceCreator();
@@ -46,7 +54,8 @@ public class PooledDataSourceCreatorsTest {
@Test
public void pooledDataSourceCreationDefault() throws Exception {
PoolConfig poolConfig = new PoolConfig(MIN_POOL_SIZE, MAX_POOL_SIZE, MAX_WAIT_TIME);
DataSourceConfig config = new DataSourceConfig(poolConfig, null);
ConnectionConfig connectionConfig = new ConnectionConfig(CONNECTION_PROPERTIES_STRING);
DataSourceConfig config = new DataSourceConfig(poolConfig, connectionConfig);
DataSource ds = createMysqlDataSource(config);
assertTomcatJdbcDataSource(ds);
}
@@ -97,7 +106,8 @@ public class PooledDataSourceCreatorsTest {
List<String> dataSourceNames = Collections.singletonList(pooledDataSourceName);
PoolConfig poolConfig =
new PoolConfig(MIN_POOL_SIZE, MAX_POOL_SIZE, MAX_WAIT_TIME);
DataSourceConfig config = new DataSourceConfig(poolConfig, null, dataSourceNames);
ConnectionConfig connectionConfig = new ConnectionConfig(CONNECTION_PROPERTIES_STRING);
DataSourceConfig config = new DataSourceConfig(poolConfig, connectionConfig, dataSourceNames);
return createMysqlDataSource(config);
}
@@ -111,16 +121,18 @@ public class PooledDataSourceCreatorsTest {
if (hasClass(DBCP2_BASIC_DATASOURCE)) {
assertThat(ds, instanceOf(Class.forName(DBCP2_BASIC_DATASOURCE)));
assertEquals(MIN_POOL_SIZE, getValue(ds, "minIdle"));
assertEquals(MAX_POOL_SIZE, getValue(ds, "maxTotal"));
assertEquals(MAX_WAIT_TIME, getValue(ds, "maxWaitMillis"));
assertEquals(MIN_POOL_SIZE, getIntValue(ds, "minIdle"));
assertEquals(MAX_POOL_SIZE, getIntValue(ds, "maxTotal"));
assertEquals(MAX_WAIT_TIME, getIntValue(ds, "maxWaitMillis"));
assertEquals(CONNECTION_PROPERTIES, getPropertiesValue(ds, "connectionProperties"));
}
if (hasClass(DBCP_BASIC_DATASOURCE) && !hasClass(DBCP2_BASIC_DATASOURCE)) {
assertThat(ds, instanceOf(Class.forName(DBCP_BASIC_DATASOURCE)));
assertEquals(MIN_POOL_SIZE, getValue(ds, "minIdle"));
assertEquals(MAX_POOL_SIZE, getValue(ds, "maxActive"));
assertEquals(MAX_WAIT_TIME, getValue(ds, "maxWait"));
assertEquals(MIN_POOL_SIZE, getIntValue(ds, "minIdle"));
assertEquals(MAX_POOL_SIZE, getIntValue(ds, "maxActive"));
assertEquals(MAX_WAIT_TIME, getIntValue(ds, "maxWait"));
assertEquals(CONNECTION_PROPERTIES, getPropertiesValue(ds, "connectionProperties"));
}
}
@@ -130,37 +142,53 @@ public class PooledDataSourceCreatorsTest {
if (hasClass(TOMCAT_7_DBCP)) {
assertThat(ds, instanceOf(Class.forName(TOMCAT_7_DBCP)));
assertEquals(MIN_POOL_SIZE, getValue(ds, "minIdle"));
assertEquals(MAX_WAIT_TIME, getValue(ds, "maxWait"));
assertEquals(MIN_POOL_SIZE, getIntValue(ds, "minIdle"));
assertEquals(MAX_WAIT_TIME, getIntValue(ds, "maxWait"));
assertEquals(CONNECTION_PROPERTIES, getPropertiesValue(ds, "connectionProperties"));
}
if (hasClass(TOMCAT_8_DBCP)) {
assertThat(ds, instanceOf(Class.forName(TOMCAT_8_DBCP)));
assertEquals(MIN_POOL_SIZE, getValue(ds, "minIdle"));
assertEquals(MAX_POOL_SIZE, getValue(ds, "maxTotal"));
assertEquals(MAX_WAIT_TIME, getValue(ds, "maxWaitMillis"));
assertEquals(MIN_POOL_SIZE, getIntValue(ds, "minIdle"));
assertEquals(MAX_POOL_SIZE, getIntValue(ds, "maxTotal"));
assertEquals(MAX_WAIT_TIME, getIntValue(ds, "maxWaitMillis"));
assertEquals(CONNECTION_PROPERTIES, getPropertiesValue(ds, "connectionProperties"));
}
}
private void assertTomcatJdbcDataSource(DataSource ds) throws ClassNotFoundException {
assertThat(ds, instanceOf(Class.forName(TOMCAT_JDBC_DATASOURCE)));
assertEquals(MIN_POOL_SIZE, getValue(ds, "minIdle"));
assertEquals(MAX_WAIT_TIME, getValue(ds, "maxWait"));
assertEquals(MIN_POOL_SIZE, getIntValue(ds, "minIdle"));
assertEquals(MAX_WAIT_TIME, getIntValue(ds, "maxWait"));
// the results of setConnectionProperties are reflected by getDbProperties, not getConnectionProperties
assertEquals(CONNECTION_PROPERTIES, getPropertiesValue(ds, "dbProperties"));
}
private void assertHikariDataSource(DataSource ds) throws ClassNotFoundException {
assertThat(ds, instanceOf(Class.forName(HIKARI_DATASOURCE)));
assertEquals(MIN_POOL_SIZE, getValue(ds, "minimumIdle"));
assertEquals(MAX_POOL_SIZE, getValue(ds, "maximumPoolSize"));
assertEquals(MIN_POOL_SIZE, getIntValue(ds, "minimumIdle"));
assertEquals(MAX_POOL_SIZE, getIntValue(ds, "maximumPoolSize"));
}
private int getValue(Object target, String fieldName) {
private int getIntValue(Object target, String fieldName) {
return Integer.valueOf(getStringValue(target, fieldName));
}
private String getStringValue(Object target, String fieldName) {
return getValue(target, fieldName).toString();
}
private Properties getPropertiesValue(Object target, String fieldName) {
return (Properties) getValue(target, fieldName);
}
private Object getValue(Object target, String fieldName) {
Object value = ReflectionUtils.getValue(target, fieldName);
if (value == null) {
throw new IllegalArgumentException("Bad field name " + fieldName + " for target object " + target);
}
return Integer.valueOf(value.toString());
return value;
}
}