package org.dayatang.datasource4saas.dscreator; import com.alibaba.druid.pool.DruidDataSource; import org.apache.commons.beanutils.BeanUtils; import org.dayatang.configuration.Configuration; import org.dayatang.configuration.impl.SimpleConfiguration; import org.dayatang.datasource4saas.Constants; import org.junit.After; import org.junit.Before; import org.junit.Test; import javax.sql.DataSource; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; public class DruidDataSourceCreatorTest { private DruidDataSourceCreator instance; private String tenant = "abc"; @Before public void setUp() throws Exception { instance = new DruidDataSourceCreator(); Configuration dsConfiguration = createDsConfiguration(); Configuration tenantDbMappings = createDbMappings(); instance.setDsConfiguration(dsConfiguration); instance.setTenantDbMapping(tenantDbMappings); } private Configuration createDsConfiguration() { Configuration result = new SimpleConfiguration(); result.setString(Constants.JDBC_HOST, "localhost"); result.setString(Constants.JDBC_PORT, "3306"); result.setString(Constants.JDBC_DB_NAME, "test_db"); result.setString(Constants.JDBC_INSTANCE, "XE"); result.setString(Constants.JDBC_EXTRA_URL_STRING, "useUnicode=true&characterEncoding=utf-8"); result.setString(Constants.JDBC_USERNAME, "root"); result.setString(Constants.JDBC_PASSWORD, "1234"); result.setInt("maxActive", 30); result.setInt("initialSize", 10); return result; } private Configuration createDbMappings() { Configuration result = new SimpleConfiguration(); result.setString("abc", "DB_ABC"); result.setString("xyz", "DB_XYZ"); return result; } @After public void tearDown() throws Exception { } @Test public void createDataSourceForTenantByMysqlAndDbname() throws Exception { instance.setDbType(DbType.MYSQL); instance.setMappingStrategy(TenantDbMappingStrategy.DBNAME); String url = "jdbc:mysql://localhost:3306/DB_ABC?useUnicode=true&characterEncoding=utf-8"; DataSource result = instance.createDataSourceForTenant(tenant); assertThat(result, instanceOf(DruidDataSource.class)); assertEquals("com.mysql.jdbc.Driver", BeanUtils.getProperty(result, "driverClassName")); assertEquals(url, BeanUtils.getProperty(result, "url")); assertEquals("root", BeanUtils.getProperty(result, "username")); assertEquals("1234", BeanUtils.getProperty(result, "password")); assertEquals("30", BeanUtils.getProperty(result, "maxActive")); assertEquals("10", BeanUtils.getProperty(result, "initialSize")); } @Test public void createDataSourceForTenantByPostgresAndPort() throws Exception { instance.setDbType(DbType.POSTGRESQL); instance.setMappingStrategy(TenantDbMappingStrategy.PORT); String url = "jdbc:postgresql://localhost:DB_ABC/test_db?useUnicode=true&characterEncoding=utf-8"; DataSource result = instance.createDataSourceForTenant(tenant); assertThat(result, instanceOf(DruidDataSource.class)); assertEquals("org.postgresql.Driver", BeanUtils.getProperty(result, "driverClassName")); assertEquals(url, BeanUtils.getProperty(result, "url")); assertEquals("root", BeanUtils.getProperty(result, "username")); assertEquals("1234", BeanUtils.getProperty(result, "password")); assertEquals("30", BeanUtils.getProperty(result, "maxActive")); assertEquals("10", BeanUtils.getProperty(result, "initialSize")); } }