package org.springframework.cloud.config.xml; 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.ServiceInfo; import org.springframework.cloud.service.relational.HikariCpPooledDataSourceCreator; import org.springframework.cloud.service.relational.TomcatJdbcPooledDataSourceCreator; import org.springframework.context.ApplicationContext; 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; /** * * @author Ramnivas Laddad * */ public abstract class DataSourceXmlConfigTest extends AbstractServiceXmlConfigTest<DataSource> { protected abstract String getDriverClassName(); protected abstract String getValidationQuery(); protected abstract ServiceInfo createService(String id); protected String getWithServiceIdContextFileName() { return "cloud-datasource-with-service-id.xml"; } protected String getWithoutServiceIdContextFileName() { return "cloud-datasource-without-service-id.xml"; } protected Class<DataSource> getConnectorType() { return DataSource.class; } // Mixed relational services test (mysql+postgresql) @Test(expected=BeanCreationException.class) public void cloudDataSourceWithoutServiceNameSpecified_TwoMixedServiceExist_byType() { ApplicationContext testContext = getTestApplicationContext(getWithoutServiceIdContextFileName(), createMysqlService("my-service"), createPostgresqlService("my-service-2")); testContext.getBean("my-service", getConnectorType()); } @Test(expected=BeanCreationException.class) public void cloudDataSourceWithoutServiceNameSpecified_TwoMixedServiceExist_byId() { ApplicationContext testContext = getTestApplicationContext(getWithoutServiceIdContextFileName(), createMysqlService("my-service"), createPostgresqlService("my-service-2")); testContext.getBean(getConnectorType()); } @Test public void cloudDataSourceWithNoConfig() throws Exception { ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", createService("my-service")); 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("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", createService("my-service")); DataSource ds = testContext.getBean("db-pool-tomcat-jdbc", getConnectorType()); assertThat(ds, instanceOf(Class.forName(TomcatJdbcPooledDataSourceCreator.TOMCAT_JDBC_DATASOURCE))); } @Test public void cloudDataSourceWithHikariCpDataSource() throws Exception { ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", createService("my-service")); DataSource ds = testContext.getBean("db-pool-hikari", getConnectorType()); assertThat(ds, instanceOf(Class.forName(HikariCpPooledDataSourceCreator.HIKARI_DATASOURCE))); } @Test public void cloudDataSourceWithInvalidDataSource() throws Exception { ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml", createService("my-service")); DataSource ds = testContext.getBean("db-pool-invalid", getConnectorType()); assertThat(ds, instanceOf(SimpleDriverDataSource.class)); } }