This is an automated email from the ASF dual-hosted git repository.

zhaojinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d04a610da4 Minor refactor for create new ShardingRule (#29315)
4d04a610da4 is described below

commit 4d04a610da42051b8827f08fd1098af0dc7cc3d9
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Dec 7 18:43:28 2023 +0800

    Minor refactor for create new ShardingRule (#29315)
    
    * Minor refactor for create new ShardingRule
    
    * fix unit test
---
 .../shardingsphere/sharding/rule/ShardingRule.java |  5 +-
 .../sharding/rule/builder/ShardingRuleBuilder.java |  2 +-
 .../checker/ShardingRouteCacheableCheckerTest.java |  5 +-
 .../dal/show/ShowCreateTableMergedResultTest.java  |  4 +-
 .../dal/show/ShowTableStatusMergedResultTest.java  |  4 +-
 .../merge/dal/show/ShowTablesMergedResultTest.java |  4 +-
 .../ShardingRoutingEngineFixtureBuilder.java       | 22 ++++-----
 ...ShardingDatabaseBroadcastRoutingEngineTest.java |  6 ++-
 .../ShardingTableBroadcastRoutingEngineTest.java   |  5 +-
 .../unicast/ShardingUnicastRoutingEngineTest.java  |  4 +-
 .../sharding/rule/ShardingRuleTest.java            | 57 +++++++++++-----------
 .../query/ShowShardingTableNodesExecutorTest.java  |  5 +-
 .../ShardingSphereDatabaseMetaDataTest.java        |  4 +-
 .../YamlDatabaseConfigurationImportExecutor.java   |  5 +-
 .../ImportDatabaseConfigurationUpdaterTest.java    |  3 ++
 .../storage/unit/ShowStorageUnitExecutorTest.java  |  4 +-
 .../config_sharding_sphere_jdbc_target.yaml        |  8 +--
 17 files changed, 85 insertions(+), 62 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 67f2b46ac2e..c32d1ce9bea 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -63,6 +63,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.And
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.util.ExpressionExtractUtils;
 
+import javax.sql.DataSource;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -120,9 +121,9 @@ public final class ShardingRule implements DatabaseRule, 
DataNodeContainedRule,
     
     private final TableNamesMapper actualTableMapper;
     
-    public ShardingRule(final ShardingRuleConfiguration ruleConfig, final 
Collection<String> dataSourceNames, final InstanceContext instanceContext) {
+    public ShardingRule(final ShardingRuleConfiguration ruleConfig, final 
Map<String, DataSource> dataSources, final InstanceContext instanceContext) {
         configuration = ruleConfig;
-        this.dataSourceNames = getDataSourceNames(ruleConfig.getTables(), 
ruleConfig.getAutoTables(), dataSourceNames);
+        this.dataSourceNames = getDataSourceNames(ruleConfig.getTables(), 
ruleConfig.getAutoTables(), dataSources.keySet());
         ruleConfig.getShardingAlgorithms().forEach((key, value) -> 
shardingAlgorithms.put(key, TypedSPILoader.getService(ShardingAlgorithm.class, 
value.getType(), value.getProps())));
         ruleConfig.getKeyGenerators().forEach((key, value) -> 
keyGenerators.put(key, TypedSPILoader.getService(KeyGenerateAlgorithm.class, 
value.getType(), value.getProps())));
         ruleConfig.getAuditors().forEach((key, value) -> auditors.put(key, 
TypedSPILoader.getService(ShardingAuditAlgorithm.class, value.getType(), 
value.getProps())));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
index a239e23b194..d1d6efd3935 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
@@ -40,7 +40,7 @@ public final class ShardingRuleBuilder implements 
DatabaseRuleBuilder<ShardingRu
     public ShardingRule build(final ShardingRuleConfiguration config, final 
String databaseName, final DatabaseType protocolType,
                               final Map<String, DataSource> dataSources, final 
Collection<ShardingSphereRule> builtRules, final InstanceContext 
instanceContext) {
         ShardingSpherePreconditions.checkState(null != dataSources && 
!dataSources.isEmpty(), () -> new 
MissingRequiredShardingConfigurationException("Data source", databaseName));
-        return new ShardingRule(config, dataSources.keySet(), instanceContext);
+        return new ShardingRule(config, dataSources, instanceContext);
     }
     
     @Override
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
index cb2c40decf9..219058244bc 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.cache.checker;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
@@ -44,6 +45,7 @@ import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardS
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
 import 
org.apache.shardingsphere.timeservice.api.config.TimestampServiceRuleConfiguration;
@@ -102,7 +104,8 @@ class ShardingRouteCacheableCheckerTest {
         nonCacheableTableSharding.setTableShardingStrategy(new 
StandardShardingStrategyConfiguration("id", "inline"));
         ruleConfig.getTables().add(nonCacheableTableSharding);
         ruleConfig.setShardingCache(new ShardingCacheConfiguration(100, new 
ShardingCacheOptionsConfiguration(true, 0, 0)));
-        return new ShardingRule(ruleConfig, Arrays.asList("ds_0", "ds_1"), new 
InstanceContext(mock(ComputeNodeInstance.class), props -> 0, null, null, null, 
null));
+        return new ShardingRule(ruleConfig, Maps.of("ds_0", new 
MockedDataSource(), "ds_1", new MockedDataSource()),
+                new InstanceContext(mock(ComputeNodeInstance.class), props -> 
0, null, null, null, null));
     }
     
     private TimestampServiceRule createTimeServiceRule() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
index 788606e5b83..99b8e772f4c 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.merge.dal.show;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -26,6 +27,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -58,7 +60,7 @@ class ShowCreateTableMergedResultTest {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order", "ds.t_order_${0..2}"));
         shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_user", "ds.t_user_${0..2}"));
-        return new ShardingRule(shardingRuleConfig, 
Collections.singleton("ds"), mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, Maps.of("ds", new 
MockedDataSource()), mock(InstanceContext.class));
     }
     
     private ShardingSphereSchema createSchema() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
index ab138b8f85d..a24f40cd2e4 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.merge.dal.show;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -26,6 +27,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -62,7 +64,7 @@ class ShowTableStatusMergedResultTest {
     private ShardingRule buildShardingRule() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("table", "ds.table_${0..2}"));
-        return new ShardingRule(shardingRuleConfig, 
Collections.singletonList("ds"), mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, Maps.of("ds", new 
MockedDataSource()), mock(InstanceContext.class));
     }
     
     @Test
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
index 62fb75c2c45..346b02c6ace 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.merge.dal.show;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -25,6 +26,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -53,7 +55,7 @@ class ShowTablesMergedResultTest {
     private ShardingRule createShardingRule() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("table", "ds.table_${0..2}"));
-        return new ShardingRule(shardingRuleConfig, 
Collections.singleton("ds"), mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, Maps.of("ds", new 
MockedDataSource()), mock(InstanceContext.class));
     }
     
     @Test
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
index 78baf5241e3..a9e688f7a5c 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.fixture;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.SneakyThrows;
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
@@ -48,7 +49,6 @@ import 
org.apache.shardingsphere.timeservice.core.rule.TimestampServiceRule;
 import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -78,7 +78,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
         shardingRuleConfig.getShardingAlgorithms().put("ds_inline", new 
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "ds_${user_id % 2}"))));
         shardingRuleConfig.getShardingAlgorithms().put(
                 "t_order_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_order_${order_id % 2}"))));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     /**
@@ -92,7 +92,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
         shardingRuleConfig.getShardingAlgorithms().put("ds_inline", new 
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "ds_${user_id % 2}"))));
         shardingRuleConfig.getShardingAlgorithms().put(
                 "t_order_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_order_${order_id % 3}"))));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     /**
@@ -110,7 +110,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
                 "t_order_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_order_${order_id % 2}"))));
         shardingRuleConfig.getShardingAlgorithms().put(
                 "t_order_item_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_order_item_${order_id % 2}"))));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     /**
@@ -127,7 +127,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
                 "t_order_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_order_${order_id % 2}"))));
         shardingRuleConfig.getShardingAlgorithms().put(
                 "t_order_item_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_order_item_${order_id % 2}"))));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     /**
@@ -139,7 +139,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         shardingRuleConfig.getTables().add(createTableRuleWithHintConfig());
         shardingRuleConfig.getShardingAlgorithms().put("core_hint_fixture", 
new AlgorithmConfiguration("CORE.HINT.FIXTURE", new Properties()));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     /**
@@ -157,7 +157,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
         shardingRuleConfig.getShardingAlgorithms().put("ds_inline", new 
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "ds_${user_id % 2}"))));
         shardingRuleConfig.getShardingAlgorithms().put(
                 "t_hint_ds_test_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_hint_ds_test_${order_id % 2}"))));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     /**
@@ -180,7 +180,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
                 "t_order_item_inline", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", 
"t_order_item_${user_id % 2}"))));
         shardingRuleConfig.getShardingAlgorithms().put("t_user_inline", new 
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "t_user_${user_id % 2}"))));
         shardingRuleConfig.getShardingAlgorithms().put("core_hint_fixture", 
new AlgorithmConfiguration("CORE.HINT.FIXTURE", new Properties()));
-        return new ShardingRule(shardingRuleConfig, Arrays.asList("ds_0", 
"ds_1", "main"), mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, Maps.of("ds_0", new 
MockedDataSource(), "ds_1", new MockedDataSource(), "main", new 
MockedDataSource()), mock(InstanceContext.class));
     }
     
     /**
@@ -200,7 +200,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
                 new Property("datetime-interval-amount", "1"),
                 new Property("datetime-interval-unit", "MONTHS"));
         shardingRuleConfig.getShardingAlgorithms().put("interval_test", new 
AlgorithmConfiguration("INTERVAL", props));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     private static ShardingTableRuleConfiguration 
createInlineTableRuleConfig(final String tableName,
@@ -280,8 +280,8 @@ public final class ShardingRoutingEngineFixtureBuilder {
         return new ShardingConditions(result, mock(SQLStatementContext.class), 
mock(ShardingRule.class));
     }
     
-    private static Collection<String> createDataSourceNames() {
-        return Arrays.asList("ds_0", "ds_1");
+    private static Map<String, DataSource> createDataSources() {
+        return Maps.of("ds_0", new MockedDataSource(), "ds_1", new 
MockedDataSource());
     }
     
     /**
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
index d5766b600dd..672066c4c5e 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
@@ -17,16 +17,17 @@
 
 package org.apache.shardingsphere.sharding.route.engine.type.broadcast;
 
+import org.apache.groovy.util.Maps;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -41,7 +42,8 @@ class ShardingDatabaseBroadcastRoutingEngineTest {
     void assertRoute() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order", "ds_${0..1}.t_order_${0..2}"));
-        RouteContext routeContext = 
shardingDatabaseBroadcastRoutingEngine.route(new 
ShardingRule(shardingRuleConfig, Arrays.asList("ds_0", "ds_1"), 
mock(InstanceContext.class)));
+        RouteContext routeContext = shardingDatabaseBroadcastRoutingEngine
+                .route(new ShardingRule(shardingRuleConfig, Maps.of("ds_0", 
new MockedDataSource(), "ds_1", new MockedDataSource()), 
mock(InstanceContext.class)));
         List<RouteUnit> routeUnits = new 
ArrayList<>(routeContext.getRouteUnits());
         assertThat(routeContext.getRouteUnits().size(), is(2));
         assertThat(routeUnits.get(0).getDataSourceMapper().getActualName(), 
is("ds_0"));
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
index d5832e0c53c..48b7e4d3ced 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.route.engine.type.broadcast;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.DropIndexStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable;
@@ -35,9 +36,9 @@ import 
org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.Test;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
@@ -126,7 +127,7 @@ class ShardingTableBroadcastRoutingEngineTest {
     private ShardingRule createShardingRule() {
         ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
         ruleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order", "ds${0..1}.t_order_${0..1}"));
-        return new ShardingRule(ruleConfig, Arrays.asList("ds_0", "ds_1"), 
mock(InstanceContext.class));
+        return new ShardingRule(ruleConfig, Maps.of("ds_0", new 
MockedDataSource(), "ds_1", new MockedDataSource()), 
mock(InstanceContext.class));
     }
     
     private SQLStatementContext createSQLStatementContext(final 
Collection<String> tableNames) {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
index 64f67966fa1..ee3fced1f09 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.route.engine.type.unicast;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
@@ -27,6 +28,7 @@ import 
org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.exception.metadata.ShardingTableRuleNotFoundException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -47,7 +49,7 @@ class ShardingUnicastRoutingEngineTest {
     void setUp() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order", "ds_${0..1}.t_order_${0..2}"));
-        shardingRule = new ShardingRule(shardingRuleConfig, 
Arrays.asList("ds_0", "ds_1", "ds_2"), mock(InstanceContext.class));
+        shardingRule = new ShardingRule(shardingRuleConfig, Maps.of("ds_0", 
new MockedDataSource(), "ds_1", new MockedDataSource(), "ds_2", new 
MockedDataSource()), mock(InstanceContext.class));
     }
     
     @Test
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
index 3dbd2fea9a3..26cf8bd1f63 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.rule;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
@@ -58,10 +59,12 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Tab
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
 import org.junit.jupiter.api.Test;
 
+import javax.sql.DataSource;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -117,7 +120,7 @@ class ShardingRuleTest {
         ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
         ruleConfig.setDefaultDatabaseShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "MOD"));
         ruleConfig.getShardingAlgorithms().put("MOD", new 
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new 
Property("sharding-count", "2"))));
-        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
     }
     
     @Test
@@ -125,7 +128,7 @@ class ShardingRuleTest {
         ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
         ruleConfig.setDefaultTableShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "MOD"));
         ruleConfig.getShardingAlgorithms().put("MOD", new 
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new 
Property("sharding-count", "2"))));
-        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
     }
     
     @Test
@@ -135,7 +138,7 @@ class ShardingRuleTest {
         tableRuleConfig.setDatabaseShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "MOD"));
         ruleConfig.getTables().add(tableRuleConfig);
         ruleConfig.getShardingAlgorithms().put("MOD", new 
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new 
Property("sharding-count", "2"))));
-        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
     }
     
     @Test
@@ -145,7 +148,7 @@ class ShardingRuleTest {
         tableRuleConfig.setTableShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "MOD"));
         ruleConfig.getTables().add(tableRuleConfig);
         ruleConfig.getShardingAlgorithms().put("MOD", new 
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new 
Property("sharding-count", "2"))));
-        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
     }
     
     @Test
@@ -155,7 +158,7 @@ class ShardingRuleTest {
         autoTableRuleConfig.setShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "INLINE"));
         ruleConfig.getAutoTables().add(autoTableRuleConfig);
         ruleConfig.getShardingAlgorithms().put("INLINE", new 
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "t_order_%{order_id % 2}"))));
-        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+        assertThrows(ShardingAlgorithmInitializationException.class, () -> new 
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
     }
     
     @Test
@@ -261,7 +264,7 @@ class ShardingRuleTest {
         
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
         shardingRuleConfig.setDefaultDatabaseShardingStrategy(new 
StandardShardingStrategyConfiguration("column", "CORE.STANDARD.FIXTURE"));
         
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new 
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
-        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), 
mock(InstanceContext.class)).findShardingColumn("column", "LOGIC_TABLE");
+        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column", 
"LOGIC_TABLE");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("column"));
     }
@@ -272,7 +275,7 @@ class ShardingRuleTest {
         
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
         shardingRuleConfig.setDefaultTableShardingStrategy(new 
StandardShardingStrategyConfiguration("column", "core_standard_fixture"));
         
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new 
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
-        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), 
mock(InstanceContext.class)).findShardingColumn("column", "LOGIC_TABLE");
+        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column", 
"LOGIC_TABLE");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("column"));
     }
@@ -282,7 +285,7 @@ class ShardingRuleTest {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
         
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new 
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
-        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), 
mock(InstanceContext.class)).findShardingColumn("column", "logic_Table");
+        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column", 
"logic_Table");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("column"));
     }
@@ -292,7 +295,7 @@ class ShardingRuleTest {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         
shardingRuleConfig.getTables().add(createTableRuleConfigWithTableStrategies());
         
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new 
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
-        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), 
mock(InstanceContext.class)).findShardingColumn("column", "logic_Table");
+        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column", 
"logic_Table");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("column"));
     }
@@ -301,7 +304,7 @@ class ShardingRuleTest {
     void assertIsNotShardingColumn() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
-        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), 
mock(InstanceContext.class)).findShardingColumn("column", "other_Table");
+        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column", 
"other_Table");
         assertFalse(actual.isPresent());
     }
     
@@ -331,7 +334,7 @@ class ShardingRuleTest {
         shardingRuleConfig.getTables().add(shardingTableRuleConfig);
         shardingRuleConfig.getTables().add(subTableRuleConfig);
         shardingRuleConfig.getBindingTableGroups().add(new 
ShardingTableReferenceRuleConfiguration("foo", 
shardingTableRuleConfig.getLogicTable() + "," + 
subTableRuleConfig.getLogicTable()));
-        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class)));
+        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class)));
     }
     
     @Test
@@ -343,7 +346,7 @@ class ShardingRuleTest {
         shardingRuleConfig.getTables().add(shardingTableRuleConfig);
         shardingRuleConfig.getTables().add(subTableRuleConfig);
         shardingRuleConfig.getBindingTableGroups().add(new 
ShardingTableReferenceRuleConfiguration("foo", 
shardingTableRuleConfig.getLogicTable() + "," + 
subTableRuleConfig.getLogicTable()));
-        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class)));
+        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class)));
     }
     
     @Test
@@ -358,7 +361,7 @@ class ShardingRuleTest {
         shardingRuleConfig.getShardingAlgorithms().put("shardingAlgorithmDB", 
new AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "ds_%{ds_id % 2}"))));
         subTableRuleConfig.setDatabaseShardingStrategy(new 
StandardShardingStrategyConfiguration("ds_id", "subAlgorithmDB"));
         shardingRuleConfig.getShardingAlgorithms().put("subAlgorithmDB", new 
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "ds_%{ds_id % 3}"))));
-        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class)));
+        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class)));
     }
     
     @Test
@@ -375,7 +378,7 @@ class ShardingRuleTest {
         subTableRuleConfig.setTableShardingStrategy(new 
StandardShardingStrategyConfiguration("table_id", "subAlgorithmTBL"));
         shardingRuleConfig.getShardingAlgorithms().put(
                 "subAlgorithmTBL", new AlgorithmConfiguration("INLINE", 
PropertiesBuilder.build(new Property("algorithm-expression", "table_%{table_id 
% 3}"))));
-        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class)));
+        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class)));
     }
     
     @Test
@@ -392,7 +395,7 @@ class ShardingRuleTest {
         shardingRuleConfig.setDefaultTableShardingStrategy(new 
StandardShardingStrategyConfiguration("table_id", "table_inline"));
         shardingRuleConfig.setDefaultShardingColumn("table_id");
         shardingRuleConfig.getShardingAlgorithms().put("table_inline", new 
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new 
Property("algorithm-expression", "table_%{table_id % 3}"))));
-        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class)));
+        assertThrows(InvalidBindingTablesException.class, () -> new 
ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class)));
     }
     
     @Test
@@ -453,7 +456,7 @@ class ShardingRuleTest {
         autoTableRuleConfig.setShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "hash_mod"));
         shardingRuleConfig.getAutoTables().add(autoTableRuleConfig);
         shardingRuleConfig.getShardingAlgorithms().put("hash_mod", new 
AlgorithmConfiguration("hash_mod", PropertiesBuilder.build(new 
Property("sharding-count", "4"))));
-        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), mock(InstanceContext.class));
+        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class));
         assertThat(shardingRule.getDataSourceNames(), is(new 
LinkedHashSet<>(Arrays.asList("ds_0", "ds_1", "resource0", "resource1"))));
     }
     
@@ -462,7 +465,7 @@ class ShardingRuleTest {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         ShardingTableRuleConfiguration shardingTableRuleConfig = new 
ShardingTableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}");
         shardingRuleConfig.getTables().add(shardingTableRuleConfig);
-        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), mock(InstanceContext.class));
+        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class));
         assertThat(shardingRule.getDataSourceNames(), is(new 
LinkedHashSet<>(Arrays.asList("ds_0", "ds_1"))));
     }
     
@@ -473,15 +476,15 @@ class ShardingRuleTest {
         autoTableRuleConfig.setShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "hash_mod"));
         shardingRuleConfig.getAutoTables().add(autoTableRuleConfig);
         shardingRuleConfig.getShardingAlgorithms().put("hash_mod", new 
AlgorithmConfiguration("hash_mod", PropertiesBuilder.build(new 
Property("sharding-count", "4"))));
-        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), mock(InstanceContext.class));
+        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class));
         assertThat(shardingRule.getDataSourceNames(), is(new 
LinkedHashSet<>(Arrays.asList("resource0", "resource1"))));
     }
     
     @Test
     void assertGetDataSourceNamesWithoutShardingTablesAndShardingAutoTables() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
-        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), mock(InstanceContext.class));
-        assertThat(shardingRule.getDataSourceNames(), is(Arrays.asList("ds_0", 
"ds_1", "resource0", "resource1")));
+        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class));
+        assertThat(shardingRule.getDataSourceNames(), is(new 
LinkedHashSet<>(Arrays.asList("ds_0", "ds_1", "resource0", "resource1"))));
     }
     
     private ShardingRule createMaximumShardingRule() {
@@ -503,14 +506,14 @@ class ShardingRuleTest {
         shardingRuleConfig.getKeyGenerators().put("default", new 
AlgorithmConfiguration("UUID", new Properties()));
         shardingRuleConfig.getKeyGenerators().put("auto_increment", new 
AlgorithmConfiguration("AUTO_INCREMENT.FIXTURE", new Properties()));
         shardingRuleConfig.getAuditors().put("audit_algorithm", new 
AlgorithmConfiguration("DML_SHARDING_CONDITIONS", new Properties()));
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     private ShardingRule createMinimumShardingRule() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         ShardingTableRuleConfiguration shardingTableRuleConfig = 
createTableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}");
         shardingRuleConfig.getTables().add(shardingTableRuleConfig);
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     private ShardingTableRuleConfiguration createTableRuleConfiguration(final 
String logicTableName, final String actualDataNodes) {
@@ -520,8 +523,8 @@ class ShardingRuleTest {
         return result;
     }
     
-    private Collection<String> createDataSourceNames() {
-        return Arrays.asList("ds_0", "ds_1", "resource0", "resource1");
+    private Map<String, DataSource> createDataSources() {
+        return Maps.of("ds_0", new MockedDataSource(), "ds_1", new 
MockedDataSource(), "resource0", new MockedDataSource(), "resource1", new 
MockedDataSource());
     }
     
     private ShardingTableRuleConfiguration 
createTableRuleConfigWithAllStrategies() {
@@ -541,7 +544,7 @@ class ShardingRuleTest {
     void assertFindShardingColumnForComplexShardingStrategy() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         
shardingRuleConfig.getTables().add(createTableRuleConfigWithComplexStrategies());
-        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSourceNames(), 
mock(InstanceContext.class)).findShardingColumn("column1", "LOGIC_TABLE");
+        Optional<String> actual = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column1", 
"LOGIC_TABLE");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("COLUMN1"));
     }
@@ -661,10 +664,8 @@ class ShardingRuleTest {
         Collection<String> logicTableNames = new LinkedHashSet<>();
         logicTableNames.add("logic_Table");
         ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
-        Collection<String> dataSourceNames = new LinkedHashSet<>();
-        dataSourceNames.add("resource0");
         ruleConfig.getTables().add(new 
ShardingTableRuleConfiguration("LOGIC_TABLE", "ds_${0}.table_${0..2}"));
-        ShardingRule shardingRule = new ShardingRule(ruleConfig, 
dataSourceNames, mock(InstanceContext.class));
+        ShardingRule shardingRule = new ShardingRule(ruleConfig, 
Maps.of("resource0", new MockedDataSource()), mock(InstanceContext.class));
         assertTrue(shardingRule.isAllTablesInSameDataSource(logicTableNames));
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
index ffeffc4cdd0..f700957ad4e 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.query;
 
 import lombok.SneakyThrows;
+import org.apache.groovy.util.Maps;
 import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
@@ -31,12 +32,12 @@ import 
org.apache.shardingsphere.sharding.distsql.statement.ShowShardingTableNod
 import 
org.apache.shardingsphere.sharding.exception.metadata.ShardingRuleNotFoundException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sharding.yaml.swapper.ShardingRuleConfigurationConverter;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.Test;
 
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
@@ -67,7 +68,7 @@ class ShowShardingTableNodesExecutorTest {
         YamlRootConfiguration yamlRootConfig = YamlEngine.unmarshal(new 
File(url.getFile()), YamlRootConfiguration.class);
         ShardingRuleConfiguration shardingRuleConfig = 
ShardingRuleConfigurationConverter.findAndConvertShardingRuleConfiguration(yamlRootConfig.getRules())
                 .orElseThrow(ShardingRuleNotFoundException::new);
-        return new ShardingRule(shardingRuleConfig, Arrays.asList("ds_1", 
"ds_2", "ds_3"), mock(InstanceContext.class));
+        return new ShardingRule(shardingRuleConfig, Maps.of("ds_1", new 
MockedDataSource(), "ds_2", new MockedDataSource(), "ds_3", new 
MockedDataSource()), mock(InstanceContext.class));
     }
     
     private void assertOrder(final ShardingSphereDatabase database) {
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
index 037a7dfce3e..48522a9d5be 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.driver.jdbc.core.datasource.metadata;
 
+import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import 
org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
@@ -26,6 +27,7 @@ import 
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -100,7 +102,7 @@ class ShardingSphereDatabaseMetaDataTest {
         ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
         ShardingTableRuleConfiguration shardingTableRuleConfig = new 
ShardingTableRuleConfiguration(TABLE_NAME, DATA_SOURCE_NAME + "." + TABLE_NAME);
         ruleConfig.setTables(Collections.singleton(shardingTableRuleConfig));
-        return new ShardingRule(ruleConfig, 
Collections.singleton(DATA_SOURCE_NAME), mock(InstanceContext.class));
+        return new ShardingRule(ruleConfig, Maps.of(DATA_SOURCE_NAME, new 
MockedDataSource()), mock(InstanceContext.class));
     }
     
     @Test
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index 9df70f3f0c8..f2b86364bb9 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -80,6 +80,7 @@ import org.apache.shardingsphere.single.rule.SingleRule;
 import 
org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration;
 import 
org.apache.shardingsphere.single.yaml.config.swapper.YamlSingleRuleConfigurationSwapper;
 
+import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
@@ -252,7 +253,9 @@ public final class YamlDatabaseConfigurationImportExecutor {
         InstanceContext instanceContext = 
ProxyContext.getInstance().getContextManager().getInstanceContext();
         shardingRuleConfigImportChecker.check(database, shardingRuleConfig);
         allRuleConfigs.add(shardingRuleConfig);
-        database.getRuleMetaData().getRules().add(new 
ShardingRule(shardingRuleConfig, 
database.getResourceMetaData().getStorageUnits().keySet(), instanceContext));
+        Map<String, DataSource> dataSources = 
database.getResourceMetaData().getStorageUnits().entrySet().stream()
+                .collect(Collectors.toMap(Map.Entry::getKey, storageUnit -> 
storageUnit.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new));
+        database.getRuleMetaData().getRules().add(new 
ShardingRule(shardingRuleConfig, dataSources, instanceContext));
     }
     
     private void addReadwriteSplittingRuleConfiguration(final 
ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfig,
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
index 561df445c28..7f76358c61a 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
@@ -25,12 +25,14 @@ import 
org.apache.shardingsphere.distsql.statement.ral.updatable.ImportDatabaseC
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.generic.UnsupportedSQLOperationException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
 import 
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundException;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.util.YamlDatabaseConfigurationImportExecutor;
@@ -137,6 +139,7 @@ class ImportDatabaseConfigurationUpdaterTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         ResourceMetaData resourceMetaData = mock(ResourceMetaData.class);
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
+        
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
         
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
         DataSourceContainedRule dataSourceContainedRule = 
mock(DataSourceContainedRule.class);
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
index b0dbe7c6db1..7750271aaef 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.handler.distsql.rql.storage.unit
 
 import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import 
org.apache.shardingsphere.distsql.statement.rql.show.ShowStorageUnitsStatement;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -72,7 +73,8 @@ class ShowStorageUnitExecutorTest {
         ShardingTableRuleConfiguration shardingTableRuleConfig = 
createTableRuleConfiguration("order", "ds_${0..1}.order_${0..1}");
         shardingTableRuleConfig.setKeyGenerateStrategy(new 
KeyGenerateStrategyConfiguration("id", "increment"));
         shardingRuleConfig.getTables().add(shardingTableRuleConfig);
-        return new ShardingRule(shardingRuleConfig, createDataSourceNames(), 
mock(InstanceContext.class));
+        shardingRuleConfig.getKeyGenerators().put("increment", 
mock(AlgorithmConfiguration.class));
+        return new ShardingRule(shardingRuleConfig, createDataSources(), 
mock(InstanceContext.class));
     }
     
     private ShardingTableRuleConfiguration createTableRuleConfiguration(final 
String logicTableName, final String actualDataNodes) {
diff --git 
a/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml 
b/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml
index eef745c81c8..d67dcd4f35a 100644
--- 
a/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml
+++ 
b/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml
@@ -15,6 +15,8 @@
 # limitations under the License.
 #
 
+databaseName: logic_db
+
 props:
   system-schema-metadata-enabled: false
 
@@ -39,9 +41,6 @@ rules:
   autoTables:
     t_order:
       actualDataSources: ds_1,ds_2
-      keyGenerateStrategy:
-        column: order_id
-        keyGeneratorName: snowflake
       shardingStrategy:
         standard:
           shardingAlgorithmName: t_order_hash_mod
@@ -53,9 +52,6 @@ rules:
         standard:
           shardingColumn: order_id
           shardingAlgorithmName: new_t_order_item_inline
-      keyGenerateStrategy:
-        column: order_id
-        keyGeneratorName: snowflake
 
   shardingAlgorithms:
     database_inline:

Reply via email to