diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java index 076402e..0ea45fe 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java @@ -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 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; } }