/* * Copyright 1999-2015 dangdang.com. * <p> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * </p> */ package com.dangdang.ddframe.rdb.sharding.jdbc; import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule; import com.dangdang.ddframe.rdb.sharding.parser.result.router.SQLStatementType; import org.junit.Test; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public final class ShardingDataSourceTest { @Test public void assertGetConnection() throws SQLException { Connection connection = mockConnection(); DataSource dataSource = mock(DataSource.class); when(dataSource.getConnection()).thenReturn(connection); assertThat(createShardingDataSource(dataSource).getConnection().getConnection("ds", SQLStatementType.SELECT), is(connection)); } private Connection mockConnection() throws SQLException { Connection result = mock(Connection.class); DatabaseMetaData databaseMetaData = mock(DatabaseMetaData.class); when(result.getMetaData()).thenReturn(databaseMetaData); when(databaseMetaData.getDatabaseProductName()).thenReturn("H2"); return result; } private ShardingDataSource createShardingDataSource(final DataSource dataSource) { Map<String, DataSource> dataSourceMap = new HashMap<>(1); dataSourceMap.put("ds", dataSource); DataSourceRule dataSourceRule = new DataSourceRule(dataSourceMap); TableRule tableRule = TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(dataSourceRule).build(); return new ShardingDataSource(ShardingRule.builder() .dataSourceRule(dataSourceRule).tableRules(Collections.singletonList(tableRule)).build()); } }