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

duanzhengqiang 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 67b15e2  Move empty judge from ShardingRule to 
AlgorithmProvidedShardingRuleBuilder (#13335)
67b15e2 is described below

commit 67b15e295a5f55bc816a3e336ba10a899e67165f
Author: Hongsheng Zhong <[email protected]>
AuthorDate: Fri Oct 29 08:22:20 2021 +0800

    Move empty judge from ShardingRule to AlgorithmProvidedShardingRuleBuilder 
(#13335)
---
 .../shardingsphere/sharding/rule/ShardingRule.java |  1 -
 .../AlgorithmProvidedShardingRuleBuilder.java      |  4 ++-
 .../AlgorithmProvidedShardingRuleBuilderTest.java  | 41 ++++++++++++++++++----
 3 files changed, 38 insertions(+), 8 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 87ab6dd..e9be9de 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -102,7 +102,6 @@ public final class ShardingRule implements SchemaRule, 
DataNodeContainedRule, Ta
     }
     
     public ShardingRule(final AlgorithmProvidedShardingRuleConfiguration 
config, final Collection<String> dataSourceNames) {
-        Preconditions.checkArgument(null != dataSourceNames && 
!dataSourceNames.isEmpty(), "Data source names cannot be empty.");
         this.dataSourceNames = getDataSourceNames(config.getTables(), 
config.getAutoTables(), dataSourceNames);
         shardingAlgorithms.putAll(config.getShardingAlgorithms());
         keyGenerators.putAll(config.getKeyGenerators());
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilder.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilder.java
index e3ec967..a8d1a6d 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilder.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilder.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.rule.builder;
 
+import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.builder.schema.SchemaRulesBuilderMaterials;
 import org.apache.shardingsphere.infra.rule.builder.schema.SchemaRuleBuilder;
@@ -36,7 +37,8 @@ public final class AlgorithmProvidedShardingRuleBuilder 
implements SchemaRuleBui
     @Override
     public ShardingRule build(final SchemaRulesBuilderMaterials materials, 
final AlgorithmProvidedShardingRuleConfiguration config, final 
Collection<ShardingSphereRule> builtRules) {
         Map<String, DataSource> dataSourceMap = materials.getDataSourceMap();
-        return new ShardingRule(config, null != dataSourceMap ? 
dataSourceMap.keySet() : null);
+        Preconditions.checkArgument(null != dataSourceMap && 
!dataSourceMap.isEmpty(), "Data sources cannot be empty.");
+        return new ShardingRule(config, dataSourceMap.keySet());
     }
     
     @Override
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilderTest.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilderTest.java
index 8e59eb1..84863a9 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilderTest.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/AlgorithmProvidedShardingRuleBuilderTest.java
@@ -25,10 +25,12 @@ import 
org.apache.shardingsphere.sharding.algorithm.config.AlgorithmProvidedShar
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.spi.ordered.OrderedSPIRegistry;
+import org.junit.Before;
 import org.junit.Test;
 
 import javax.sql.DataSource;
 import java.util.Collections;
+import java.util.Map;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
@@ -42,13 +44,40 @@ public final class AlgorithmProvidedShardingRuleBuilderTest 
{
         ShardingSphereServiceLoader.register(SchemaRuleBuilder.class);
     }
     
-    @SuppressWarnings({"rawtypes", "unchecked"})
+    private AlgorithmProvidedShardingRuleConfiguration ruleConfig;
+    
+    @SuppressWarnings("rawtypes")
+    private SchemaRuleBuilder builder;
+    
+    @Before
+    public void setUp() {
+        ruleConfig = mock(AlgorithmProvidedShardingRuleConfiguration.class);
+        builder = 
OrderedSPIRegistry.getRegisteredServices(SchemaRuleBuilder.class, 
Collections.singletonList(ruleConfig)).get(ruleConfig);
+    }
+    
+    @SuppressWarnings("unchecked")
     @Test
     public void assertBuild() {
-        AlgorithmProvidedShardingRuleConfiguration ruleConfig = 
mock(AlgorithmProvidedShardingRuleConfiguration.class);
-        SchemaRuleBuilder builder = 
OrderedSPIRegistry.getRegisteredServices(SchemaRuleBuilder.class, 
Collections.singletonList(ruleConfig)).get(ruleConfig);
-        assertThat(builder.build(new 
SchemaRulesBuilderMaterials("test_schema", Collections.emptyList(), 
-                mock(DatabaseType.class), Collections.singletonMap("name", 
mock(DataSource.class, RETURNS_DEEP_STUBS)), 
-                new ConfigurationProperties(new Properties())), ruleConfig, 
Collections.emptyList()), instanceOf(ShardingRule.class));
+        SchemaRulesBuilderMaterials materials = 
createSchemaRulesBuilderMaterials(Collections.singletonMap("name", 
mock(DataSource.class, RETURNS_DEEP_STUBS)));
+        assertThat(builder.build(materials, ruleConfig, 
Collections.emptyList()), instanceOf(ShardingRule.class));
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test(expected = IllegalArgumentException.class)
+    public void assertBuildWithNullDataSourceMap() {
+        SchemaRulesBuilderMaterials materials = 
createSchemaRulesBuilderMaterials(null);
+        assertThat(builder.build(materials, ruleConfig, 
Collections.emptyList()), instanceOf(ShardingRule.class));
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test(expected = IllegalArgumentException.class)
+    public void assertBuildWithEmptyDataSourceMap() {
+        SchemaRulesBuilderMaterials materials = 
createSchemaRulesBuilderMaterials(Collections.emptyMap());
+        assertThat(builder.build(materials, ruleConfig, 
Collections.emptyList()), instanceOf(ShardingRule.class));
+    }
+    
+    private SchemaRulesBuilderMaterials 
createSchemaRulesBuilderMaterials(final Map<String, DataSource> dataSourceMap) {
+        return new SchemaRulesBuilderMaterials("test_schema", 
Collections.emptyList(),
+                mock(DatabaseType.class), dataSourceMap, new 
ConfigurationProperties(new Properties()));
     }
 }

Reply via email to