Add tests to verify ConnectionConfiguration mapping to pooled DataSource providers.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user