From a6d19e86d1f5eab9e95b73af7749ea6924ec8315 Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Fri, 20 Nov 2015 17:01:04 -0600 Subject: [PATCH] Add the ability to pass a map of connection properties to the DataSource service connection creator for more control over the created DataSource. --- .../xml/CloudDataSourceFactoryParser.java | 9 +++ .../service/relational/DataSourceConfig.java | 26 ++++++- .../relational/DataSourceConfigurer.java | 27 +++++-- .../relational/MysqlDataSourceCreator.java | 4 +- .../relational/OracleDataSourceCreator.java | 4 +- .../PostgresqlDataSourceCreator.java | 4 +- .../cloud/config/xml/spring-cloud.xsd | 1 + .../DataSourceCloudConfigTestHelper.java | 4 ++ .../java/DataSourceJavaConfigMysqlTest.java | 10 +++ .../DataSourceJavaConfigPostgesqlTest.java | 10 +++ .../config/java/DataSourceJavaConfigTest.java | 70 +++++++++++++++---- .../xml/DataSourceXmlConfigMysqlTest.java | 10 ++- .../xml/DataSourceXmlConfigPostgesqlTest.java | 17 ----- .../DataSourceXmlConfigPostgresqlTest.java | 26 +++++++ .../config/xml/DataSourceXmlConfigTest.java | 36 ++++++++-- .../relational/DB2ServiceCreatorTest.java | 6 +- .../relational/MysqlServiceCreatorTest.java | 2 +- ...qlServiceCreatorWithDefaultDriverTest.java | 4 +- ...ysqlServiceCreatorWithMysqlDriverTest.java | 6 +- .../relational/OracleServiceCreatorTest.java | 11 +-- .../PostgresqlServiceCreatorTest.java | 7 +- .../SqlServerServiceCreatorTest.java | 9 ++- .../xml/cloud-datasource-with-config.xml | 17 ++++- 23 files changed, 249 insertions(+), 71 deletions(-) delete mode 100644 spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgesqlTest.java create mode 100644 spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgresqlTest.java diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java index df6f3bf..2fc1b32 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java @@ -10,6 +10,7 @@ import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; import java.util.List; +import java.util.Map; /** * Parser for the {@code } namespace element @@ -23,6 +24,7 @@ public class CloudDataSourceFactoryParser extends AbstractPoolingCloudServiceFac private static final String ELEMENT_CONNECTION = "connection"; private static final String ELEMENT_POOL = "pool"; private static final String ELEMENT_DATASOURCE_NAMES = "pool-data-sources"; + private static final String ELEMENT_CONNECTION_PROPERTIES = "connection-properties"; public CloudDataSourceFactoryParser() { super(CloudDataSourceFactory.class); @@ -54,9 +56,16 @@ public class CloudDataSourceFactoryParser extends AbstractPoolingCloudServiceFac parseListElement(dataSourceNamesElement, dataSourceConfigBeanBuilder.getRawBeanDefinition()); } + Map properties = null; + Element propertiesElement = DomUtils.getChildElementByTagName(element, ELEMENT_CONNECTION_PROPERTIES); + if (propertiesElement != null) { + properties = parserContext.getDelegate().parseMapElement(propertiesElement, builder.getRawBeanDefinition()); + } + dataSourceConfigBeanBuilder.addConstructorArgValue(cloudPoolConfiguration); dataSourceConfigBeanBuilder.addConstructorArgValue(cloudConnectionConfiguration); dataSourceConfigBeanBuilder.addConstructorArgValue(dataSourceNames); + dataSourceConfigBeanBuilder.addConstructorArgValue(properties); builder.addConstructorArgValue(dataSourceConfigBeanBuilder.getBeanDefinition()); } diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java index b19d538..d2f909a 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java @@ -1,8 +1,10 @@ package org.springframework.cloud.service.relational; +import org.springframework.cloud.service.MapServiceConnectorConfig; import org.springframework.cloud.service.PooledServiceConnectorConfig; import java.util.List; +import java.util.Map; /** * @@ -11,21 +13,37 @@ import java.util.List; */ public class DataSourceConfig extends PooledServiceConnectorConfig { private final ConnectionConfig connectionConfig; + private final MapServiceConnectorConfig connectionProperties; private final List pooledDataSourceNames; public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig) { - this(poolConfig, connectionConfig, null); + this(poolConfig, connectionConfig, null, null); } public DataSourceConfig(List pooledDataSourceNames) { - this(null, null, pooledDataSourceNames); + this(null, null, pooledDataSourceNames, null); + } + + public DataSourceConfig(Map properties) { + this(null, null, null, properties); + } + + public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig, + Map properties) { + this(poolConfig, connectionConfig, null, properties); } public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig, List pooledDataSourceNames) { + this(poolConfig, connectionConfig, pooledDataSourceNames, null); + } + + public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig, + List pooledDataSourceNames, Map properties) { super(poolConfig); this.connectionConfig = connectionConfig; this.pooledDataSourceNames = pooledDataSourceNames; + this.connectionProperties = new MapServiceConnectorConfig(properties); } public ConnectionConfig getConnectionConfiguration() { @@ -36,6 +54,10 @@ public class DataSourceConfig extends PooledServiceConnectorConfig { return pooledDataSourceNames; } + public MapServiceConnectorConfig getConnectionProperties() { + return connectionProperties; + } + public static class ConnectionConfig { private String prop; diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java index 1b9167e..caccad8 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java @@ -6,6 +6,8 @@ import javax.sql.DataSource; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; +import org.springframework.cloud.service.MapServiceConnectionConfigurer; +import org.springframework.cloud.service.MapServiceConnectorConfig; import org.springframework.cloud.service.PooledServiceConnectorConfigurer; /** @@ -14,17 +16,30 @@ import org.springframework.cloud.service.PooledServiceConnectorConfigurer; * */ public class DataSourceConfigurer extends PooledServiceConnectorConfigurer { + private MapServiceConnectionConfigurer mapServiceConnectionConfigurer = + new MapServiceConnectionConfigurer(); + @Override public DataSource configure(DataSource dataSource, DataSourceConfig config) { if (config != null) { - BeanWrapper target = new BeanWrapperImpl(dataSource); - - if (config.getConnectionConfiguration() != null) { - BeanWrapper connectionSource = new BeanWrapperImpl(config.getConnectionConfiguration()); - setCorrespondingProperties(target, connectionSource); - } + configureConnection(dataSource, config); + configureConnectionProperties(dataSource, config); return super.configure(dataSource, config); } return dataSource; } + + private void configureConnection(DataSource dataSource, DataSourceConfig config) { + if (config.getConnectionConfiguration() != null) { + BeanWrapper target = new BeanWrapperImpl(dataSource); + BeanWrapper connectionSource = new BeanWrapperImpl(config.getConnectionConfiguration()); + setCorrespondingProperties(target, connectionSource); + } + } + + private void configureConnectionProperties(DataSource dataSource, DataSourceConfig config) { + if (config.getConnectionProperties() != null) { + mapServiceConnectionConfigurer.configure(dataSource, config.getConnectionProperties()); + } + } } diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java index daf14ef..f3f2587 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java @@ -9,12 +9,12 @@ import org.springframework.cloud.service.common.MysqlServiceInfo; * */ public class MysqlDataSourceCreator extends DataSourceCreator { - private static final String[] DRIVERS = new String[]{"org.mariadb.jdbc.Driver", "com.mysql.jdbc.Driver"}; + public static final String[] DRIVERS = new String[]{"org.mariadb.jdbc.Driver", "com.mysql.jdbc.Driver"}; /** * Validation query obtained from the MySQL reference manual: * http://dev.mysql.com/doc/refman/5.1/en/connector-j-usagenotes-j2ee.html */ - private static final String VALIDATION_QUERY = "/* ping */ SELECT 1"; + public static final String VALIDATION_QUERY = "/* ping */ SELECT 1"; public MysqlDataSourceCreator() { super("spring-cloud.mysql.driver", DRIVERS, VALIDATION_QUERY); diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java index 3fc4ac2..d29bfb5 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java @@ -4,8 +4,8 @@ import org.springframework.cloud.service.common.OracleServiceInfo; public class OracleDataSourceCreator extends DataSourceCreator { - private static final String[] DRIVERS = new String[]{"oracle.jdbc.OracleDriver"}; - private static final String VALIDATION_QUERY = "SELECT 'Y' from dual"; + public static final String[] DRIVERS = new String[]{"oracle.jdbc.OracleDriver"}; + public static final String VALIDATION_QUERY = "SELECT 'Y' from dual"; public OracleDataSourceCreator() { super("spring-cloud.oracle.driver", DRIVERS, VALIDATION_QUERY); diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java index d8eb18d..40ea217 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java @@ -10,8 +10,8 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo; */ public class PostgresqlDataSourceCreator extends DataSourceCreator { - private static final String[] DRIVERS = new String[]{"org.postgresql.Driver"}; - private static final String VALIDATION_QUERY = "SELECT 1"; + public static final String[] DRIVERS = new String[]{"org.postgresql.Driver"}; + public static final String VALIDATION_QUERY = "SELECT 1"; public PostgresqlDataSourceCreator() { super("spring-cloud.postgresql.driver", DRIVERS, VALIDATION_QUERY); diff --git a/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd b/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd index 28a8288..b2cdb89 100644 --- a/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd +++ b/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd @@ -60,6 +60,7 @@ + diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java index 626cca2..bb509cd 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java @@ -22,4 +22,8 @@ public class DataSourceCloudConfigTestHelper extends CommonPoolCloudConfigTestHe public static void assertConnectionProperties(DataSource dataSource, Properties connectionProp) { assertEquals(connectionProp, ReflectionUtils.getValue(dataSource, "connectionProperties")); } + + public static void assertConnectionProperty(DataSource dataSource, String key, Object value) { + assertEquals(value, ReflectionUtils.getValue(dataSource, key)); + } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java index 86db892..f1865a9 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java @@ -1,6 +1,7 @@ package org.springframework.cloud.config.java; import org.springframework.cloud.service.common.MysqlServiceInfo; +import org.springframework.cloud.service.relational.MysqlDataSourceCreator; /** * @@ -13,6 +14,15 @@ public class DataSourceJavaConfigMysqlTest extends DataSourceJavaConfigTest { return createMysqlService(id); } + @Override + protected String getDriverClassName() { + return MysqlDataSourceCreator.DRIVERS[0]; + } + + @Override + protected String getValidationQuery() { + return MysqlDataSourceCreator.VALIDATION_QUERY; + } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java index ba7e58e..00f90b0 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java @@ -1,6 +1,7 @@ package org.springframework.cloud.config.java; import org.springframework.cloud.service.common.PostgresqlServiceInfo; +import org.springframework.cloud.service.relational.PostgresqlDataSourceCreator; /** * @@ -13,6 +14,15 @@ public class DataSourceJavaConfigPostgesqlTest extends DataSourceJavaConfigTest return createPostgresqlService(id); } + @Override + protected String getDriverClassName() { + return PostgresqlDataSourceCreator.DRIVERS[0]; + } + + @Override + protected String getValidationQuery() { + return PostgresqlDataSourceCreator.VALIDATION_QUERY; + } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java index 1143eeb..89d85d1 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java @@ -1,14 +1,15 @@ package org.springframework.cloud.config.java; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Properties; import javax.sql.DataSource; import org.junit.Test; import org.springframework.beans.factory.BeanCreationException; -import org.springframework.cloud.config.DataSourceCloudConfigTestHelper; import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig; import org.springframework.cloud.service.relational.BasicDbcpPooledDataSourceCreator; import org.springframework.cloud.service.relational.DataSourceConfig; @@ -16,6 +17,10 @@ import org.springframework.cloud.service.relational.DataSourceConfig.ConnectionC import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; +import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperties; +import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperty; +import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertPoolProperties; + /** * Common base class for testing datasource-related Java config * @@ -23,7 +28,9 @@ import org.springframework.context.annotation.Bean; * */ public abstract class DataSourceJavaConfigTest extends AbstractServiceJavaConfigTest { - + protected abstract String getDriverClassName(); + protected abstract String getValidationQuery(); + public DataSourceJavaConfigTest() { super(DatasourceConfigWithId.class, DatasourceConfigWithoutId.class); } @@ -49,28 +56,50 @@ public abstract class DataSourceJavaConfigTest extends AbstractServiceJavaConfig testContext.getBean(getConnectorType()); } - + @Test + public void cloudDataSourceWithNoConfig() { + ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class, + createService("my-service")); + + DataSource ds = testContext.getBean("dataSourceWithNoConfig", getConnectorType()); + + assertConnectionProperties(ds, null); + assertConnectionProperty(ds, "driverClassName", getDriverClassName()); + assertConnectionProperty(ds, "validationQuery", getValidationQuery()); + } + @Test public void cloudDataSourceWithMaxPool() { ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class, createService("my-service")); - - DataSource ds = testContext.getBean("dbPool20Wait200", getConnectorType()); - DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 20, 0, 200); - + + DataSource ds = testContext.getBean("dataSourceWithPoolAndConnectionConfig", getConnectorType()); + assertPoolProperties(ds, 20, 0, 200); + Properties connectionProp = new Properties(); connectionProp.put("sessionVariables", "sql_mode='ANSI'"); connectionProp.put("characterEncoding", "UTF-8"); - DataSourceCloudConfigTestHelper.assertConnectionProperties(ds, connectionProp); + assertConnectionProperties(ds, connectionProp); } - + @Test public void cloudDataSourceWithMinMaxPool() { ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class, createService("my-service")); - DataSource ds = testContext.getBean("dbPool5_20Wait3000", getConnectorType()); - DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 30, 5, 3000); + DataSource ds = testContext.getBean("dataSourceWithPoolConfig", getConnectorType()); + assertPoolProperties(ds, 30, 5, 3000); + } + + @Test + public void cloudDataSourceWithConnectionProperties() { + ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class, + createService("my-service")); + + DataSource ds = testContext.getBean("dataSourceWithConnectionPropertiesConfig", getConnectorType()); + assertConnectionProperty(ds, "driverClassName", "test.driver"); + assertConnectionProperty(ds, "validationQuery", "test validation query"); + assertConnectionProperty(ds, "testOnBorrow", false); } } @@ -90,7 +119,12 @@ class DatasourceConfigWithoutId extends AbstractCloudConfig { class DatasourceConfigWithServiceConfig extends AbstractCloudConfig { @Bean - public DataSource dbPool20Wait200() { // use this name so that we have a case with default name + public DataSource dataSourceWithNoConfig() { + return connectionFactory().dataSource("my-service"); + } + + @Bean + public DataSource dataSourceWithPoolAndConnectionConfig() { PoolConfig poolConfig = new PoolConfig(20, 200); ConnectionConfig connectionConfig = new ConnectionConfig("sessionVariables=sql_mode='ANSI';characterEncoding=UTF-8"); DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, connectionConfig, basicDbcpConnectionPool()); @@ -98,12 +132,22 @@ class DatasourceConfigWithServiceConfig extends AbstractCloudConfig { } @Bean - public DataSource dbPool5_20Wait3000() { // use this name so that we have a case with default name + public DataSource dataSourceWithPoolConfig() { PoolConfig poolConfig = new PoolConfig(5, 30, 3000); DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, null, basicDbcpConnectionPool()); return connectionFactory().dataSource("my-service", serviceConfig); } + @Bean + public DataSource dataSourceWithConnectionPropertiesConfig() { + Map properties = new HashMap(); + properties.put("driverClassName", "test.driver"); + properties.put("validationQuery", "test validation query"); + properties.put("testOnBorrow", false); + DataSourceConfig serviceConfig = new DataSourceConfig(null, null, basicDbcpConnectionPool(), properties); + return connectionFactory().dataSource("my-service", serviceConfig); + } + private List basicDbcpConnectionPool() { return Collections.singletonList(BasicDbcpPooledDataSourceCreator.class.getSimpleName()); } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigMysqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigMysqlTest.java index 58b6484..ba3e2f5 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigMysqlTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigMysqlTest.java @@ -1,6 +1,7 @@ package org.springframework.cloud.config.xml; import org.springframework.cloud.service.ServiceInfo; +import org.springframework.cloud.service.relational.MysqlDataSourceCreator; /** * @@ -8,10 +9,17 @@ import org.springframework.cloud.service.ServiceInfo; * */ public class DataSourceXmlConfigMysqlTest extends DataSourceXmlConfigTest { - protected ServiceInfo createService(String id) { return createMysqlService(id); } + @Override + protected String getDriverClassName() { + return MysqlDataSourceCreator.DRIVERS[0]; + } + @Override + protected String getValidationQuery() { + return MysqlDataSourceCreator.VALIDATION_QUERY; + } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgesqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgesqlTest.java deleted file mode 100644 index 430eb82..0000000 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgesqlTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.springframework.cloud.config.xml; - -import org.springframework.cloud.service.ServiceInfo; - -/** - * - * @author Ramnivas Laddad - * - */ -public class DataSourceXmlConfigPostgesqlTest extends DataSourceXmlConfigTest { - - @Override - protected ServiceInfo createService(String id) { - return createPostgresqlService(id); - } - -} diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgresqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgresqlTest.java new file mode 100644 index 0000000..58860be --- /dev/null +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgresqlTest.java @@ -0,0 +1,26 @@ +package org.springframework.cloud.config.xml; + +import org.springframework.cloud.service.ServiceInfo; +import org.springframework.cloud.service.relational.PostgresqlDataSourceCreator; + +/** + * + * @author Ramnivas Laddad + * + */ +public class DataSourceXmlConfigPostgresqlTest extends DataSourceXmlConfigTest { + @Override + protected ServiceInfo createService(String id) { + return createPostgresqlService(id); + } + + @Override + protected String getDriverClassName() { + return PostgresqlDataSourceCreator.DRIVERS[0]; + } + + @Override + protected String getValidationQuery() { + return PostgresqlDataSourceCreator.VALIDATION_QUERY; + } +} diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java index 2c7c4c5..32703ba 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java @@ -15,6 +15,8 @@ import org.springframework.jdbc.datasource.SimpleDriverDataSource; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertThat; +import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperties; +import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperty; /** * @@ -22,6 +24,8 @@ import static org.junit.Assert.assertThat; * */ public abstract class DataSourceXmlConfigTest extends AbstractServiceXmlConfigTest { + protected abstract String getDriverClassName(); + protected abstract String getValidationQuery(); protected abstract ServiceInfo createService(String id); @@ -55,28 +59,50 @@ public abstract class DataSourceXmlConfigTest extends AbstractServiceXmlConfigTe } @Test - public void cloudDataSourceWithMaxPool() throws Exception { + public void cloudDataSourceWithNoConfig() throws Exception { ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", createService("my-service")); - DataSource ds = testContext.getBean("db-pool20-wait200", getConnectorType()); + DataSource ds = testContext.getBean("no-config", getConnectorType()); + assertConnectionProperties(ds, null); + assertConnectionProperty(ds, "driverClassName", getDriverClassName()); + assertConnectionProperty(ds, "validationQuery", getValidationQuery()); + } + + @Test + public void cloudDataSourceWithMaxPool() throws Exception { + ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", + createService("my-service")); + + DataSource ds = testContext.getBean("pool-and-connection-config", getConnectorType()); DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 20, 0, 200); - + Properties connectionProp = new Properties(); connectionProp.put("sessionVariables", "sql_mode='ANSI'"); connectionProp.put("characterEncoding", "UTF-8"); DataSourceCloudConfigTestHelper.assertConnectionProperties(ds, connectionProp); } - + @Test public void cloudDataSourceWithMinMaxPool() { ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", createService("my-service")); - DataSource ds = testContext.getBean("db-pool5-30-wait3000", getConnectorType()); + DataSource ds = testContext.getBean("pool-config", getConnectorType()); DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 30, 5, 3000); } + @Test + public void cloudDataSourceWithConnectionProperties() { + ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", + createService("my-service")); + + DataSource ds = testContext.getBean("properties-config", getConnectorType()); + assertConnectionProperty(ds, "driverClassName", "test.driver"); + assertConnectionProperty(ds, "validationQuery", "test validation query"); + assertConnectionProperty(ds, "testOnBorrow", false); + } + @Test public void cloudDataSourceWithTomcatJdbcDataSource() throws Exception { ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/DB2ServiceCreatorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/DB2ServiceCreatorTest.java index ad6bdec..06fede4 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/DB2ServiceCreatorTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/DB2ServiceCreatorTest.java @@ -8,13 +8,15 @@ import org.mockito.MockitoAnnotations; import org.springframework.cloud.service.common.DB2ServiceInfo;; public class DB2ServiceCreatorTest extends AbstractDataSourceCreatorTest { + public static final String TEST_DB2_DRIVER = "com.db2.example.Driver"; + @Mock private DB2ServiceInfo mockDB2ServiceInfo; @Before public void setup() { MockitoAnnotations.initMocks(this); // set a dummy JDBC driver since we can't yet include a real DB2 driver in the project due to licensing restrictions - System.setProperty("spring-cloud.db2.driver", "com.example.Driver"); + System.setProperty("spring-cloud.db2.driver", TEST_DB2_DRIVER); } @Override @@ -26,7 +28,7 @@ public class DB2ServiceCreatorTest extends AbstractDataSourceCreatorTest { - @Mock private OracleServiceInfo mockOracleServiceInfo; + public static final String TEST_ORACLE_DRIVER = "com.oracle.example.Driver"; + + @Mock + private OracleServiceInfo mockOracleServiceInfo; @Before public void setup() { MockitoAnnotations.initMocks(this); // set a dummy JDBC driver since we can't include a real Oracle driver in the project due to licensing restrictions - System.setProperty("spring-cloud.oracle.driver", "com.example.Driver"); + System.setProperty("spring-cloud.oracle.driver", TEST_ORACLE_DRIVER); } @Override @@ -26,7 +29,7 @@ public class OracleServiceCreatorTest extends AbstractDataSourceCreatorTest { - @Mock private PostgresqlServiceInfo mockPostgresqlServiceInfo; + @Mock + private PostgresqlServiceInfo mockPostgresqlServiceInfo; @Before public void setup() { @@ -29,7 +30,7 @@ public class PostgresqlServiceCreatorTest extends AbstractDataSourceCreatorTest< @Override public String getDriverName() { - return "org.postgresql.Driver"; + return PostgresqlDataSourceCreator.DRIVERS[0]; } @Override @@ -39,6 +40,6 @@ public class PostgresqlServiceCreatorTest extends AbstractDataSourceCreatorTest< @Override public String getValidationQueryStart() { - return "SELECT 1"; + return PostgresqlDataSourceCreator.VALIDATION_QUERY; } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java index 92ebfa1..7c9cd5f 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java @@ -8,13 +8,16 @@ import org.mockito.MockitoAnnotations; import org.springframework.cloud.service.common.SqlServerServiceInfo; public class SqlServerServiceCreatorTest extends AbstractDataSourceCreatorTest { - @Mock private SqlServerServiceInfo mockSqlServerServiceInfo; + public static final String TEST_SQLSERVER_DRIVER = "com.sqlserver.example.Driver"; + + @Mock + private SqlServerServiceInfo mockSqlServerServiceInfo; @Before public void setup() { MockitoAnnotations.initMocks(this); // set a dummy JDBC driver since we can't include a real SQL-Server driver in the project due to licensing restrictions - System.setProperty("spring-cloud.sqlserver.driver", "com.example.Driver"); + System.setProperty("spring-cloud.sqlserver.driver", TEST_SQLSERVER_DRIVER); } @Override @@ -26,7 +29,7 @@ public class SqlServerServiceCreatorTest extends AbstractDataSourceCreatorTest - + + + @@ -13,13 +15,24 @@ - + BasicDbcp + + + BasicDbcp + + + + + + + + TomcatJdbc