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

zhangliang 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 5a2e8795d64 Add more test cases on ShardingRuleConfigurationChecker 
(#33710)
5a2e8795d64 is described below

commit 5a2e8795d64a29e737c82e4c12df4f74635c4437
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Nov 18 18:42:28 2024 +0800

    Add more test cases on ShardingRuleConfigurationChecker (#33710)
---
 .../checker/ShardingRuleConfigurationChecker.java  |  2 +-
 .../ShardingRuleConfigurationCheckerTest.java      | 98 +++++++++++++++++++---
 2 files changed, 87 insertions(+), 13 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
index f34d91141da..c441b36a08e 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
@@ -123,7 +123,7 @@ public final class ShardingRuleConfigurationChecker 
implements RuleConfiguration
         }
         
ShardingSpherePreconditions.checkNotNull(shardingStrategy.getShardingAlgorithmName(),
 () -> new MissingRequiredShardingConfigurationException("Sharding algorithm 
name", databaseName));
         ShardingSpherePreconditions.checkContains(shardingAlgorithms, 
shardingStrategy.getShardingAlgorithmName(),
-                () -> new UnregisteredAlgorithmException("Key generate", 
shardingStrategy.getShardingAlgorithmName(), new 
SQLExceptionIdentifier(databaseName)));
+                () -> new UnregisteredAlgorithmException("sharding", 
shardingStrategy.getShardingAlgorithmName(), new 
SQLExceptionIdentifier(databaseName)));
     }
     
     @Override
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
index 00aaf75fca9..7592d06f6b6 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sharding.checker;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
+import 
org.apache.shardingsphere.infra.algorithm.core.exception.UnregisteredAlgorithmException;
 import 
org.apache.shardingsphere.infra.config.rule.checker.RuleConfigurationChecker;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -25,45 +26,118 @@ import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleC
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexShardingStrategyConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredShardingConfigurationException;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Properties;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 class ShardingRuleConfigurationCheckerTest {
     
-    @SuppressWarnings("unchecked")
+    private ShardingRuleConfigurationChecker checker;
+    
+    @BeforeEach
+    void setUp() {
+        checker = (ShardingRuleConfigurationChecker) 
OrderedSPILoader.getServicesByClass(
+                RuleConfigurationChecker.class, 
Collections.singleton(ShardingRuleConfiguration.class)).get(ShardingRuleConfiguration.class);
+    }
+    
     @Test
     void assertCheckSuccess() {
         ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
-        ShardingAuditStrategyConfiguration shardingAuditStrategyConfig = new 
ShardingAuditStrategyConfiguration(Collections.singletonList("foo_audit"), 
false);
+        ShardingAuditStrategyConfiguration shardingAuditStrategyConfig = new 
ShardingAuditStrategyConfiguration(Collections.singleton("foo_audit"), false);
         ShardingStrategyConfiguration shardingStrategyConfig = 
createShardingStrategyConfiguration();
         
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(shardingStrategyConfig,
 shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
         
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(shardingStrategyConfig,
 shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
-        RuleConfigurationChecker<ShardingRuleConfiguration> checker = 
OrderedSPILoader.getServicesByClass(
-                RuleConfigurationChecker.class, 
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
         checker.check("foo_db", ruleConfig, Collections.emptyMap(), 
Collections.emptyList());
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     void assertCheckTableConfigurationFailed() {
         ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
-        
ruleConfig.setTables(Collections.singletonList(createShardingTableRuleConfiguration(null,
 null, null)));
+        
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(null,
 null, null)));
         
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(null,
 null, null)));
-        RuleConfigurationChecker<ShardingRuleConfiguration> checker = 
OrderedSPILoader.getServicesByClass(
-                RuleConfigurationChecker.class, 
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
         assertThrows(MissingRequiredShardingConfigurationException.class, () 
-> checker.check("foo_db", ruleConfig, Collections.emptyMap(), 
Collections.emptyList()));
     }
     
+    @Test
+    void assertCheckKeyGenerateStrategyFailed() {
+        ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
+        ShardingAuditStrategyConfiguration shardingAuditStrategyConfig = new 
ShardingAuditStrategyConfiguration(Collections.singleton("foo_audit"), false);
+        ShardingStrategyConfiguration shardingStrategyConfig = 
createShardingStrategyConfiguration();
+        
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(shardingStrategyConfig,
 shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
+        
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(null,
 null,
+                new KeyGenerateStrategyConfiguration("foo_col", 
"bar_keygen"))));
+        assertThrows(UnregisteredAlgorithmException.class, () -> 
checker.check("foo_db", ruleConfig, Collections.emptyMap(), 
Collections.emptyList()));
+    }
+    
+    @Test
+    void assertCheckAuditStrategyFailed() {
+        ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
+        ShardingStrategyConfiguration shardingStrategyConfig = 
createShardingStrategyConfiguration();
+        
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(shardingStrategyConfig,
 null, ruleConfig.getDefaultKeyGenerateStrategy())));
+        
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(shardingStrategyConfig,
+                new 
ShardingAuditStrategyConfiguration(Collections.singleton("bar_audit"), false), 
ruleConfig.getDefaultKeyGenerateStrategy())));
+        assertThrows(UnregisteredAlgorithmException.class, () -> 
checker.check("foo_db", ruleConfig, Collections.emptyMap(), 
Collections.emptyList()));
+    }
+    
+    @Test
+    void assertCheckShardingStrategyFailedWithComplexShardingStrategy() {
+        ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
+        ShardingAuditStrategyConfiguration shardingAuditStrategyConfig = new 
ShardingAuditStrategyConfiguration(Collections.singleton("foo_audit"), false);
+        ruleConfig.setTables(Collections.singleton(
+                createShardingTableRuleConfiguration(new 
NoneShardingStrategyConfiguration(), shardingAuditStrategyConfig, 
ruleConfig.getDefaultKeyGenerateStrategy())));
+        
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(
+                new ComplexShardingStrategyConfiguration("", "foo_algorithm"), 
shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
+        assertThrows(MissingRequiredShardingConfigurationException.class, () 
-> checker.check("foo_db", ruleConfig, Collections.emptyMap(), 
Collections.emptyList()));
+    }
+    
+    @Test
+    void assertCheckShardingStrategyFailedWithUnregisteredAlgorithm() {
+        ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
+        ShardingAuditStrategyConfiguration shardingAuditStrategyConfig = new 
ShardingAuditStrategyConfiguration(Collections.singleton("foo_audit"), false);
+        ruleConfig.setTables(Collections.singleton(
+                createShardingTableRuleConfiguration(new 
NoneShardingStrategyConfiguration(), shardingAuditStrategyConfig, 
ruleConfig.getDefaultKeyGenerateStrategy())));
+        
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(
+                new StandardShardingStrategyConfiguration("foo_col", 
"bar_algorithm"), shardingAuditStrategyConfig, 
ruleConfig.getDefaultKeyGenerateStrategy())));
+        assertThrows(UnregisteredAlgorithmException.class, () -> 
checker.check("foo_db", ruleConfig, Collections.emptyMap(), 
Collections.emptyList()));
+    }
+    
+    @Test
+    void assertGetRequiredDataSourceNames() {
+        ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
+        ShardingAuditStrategyConfiguration shardingAuditStrategyConfig = new 
ShardingAuditStrategyConfiguration(Collections.singleton("foo_audit"), false);
+        ShardingStrategyConfiguration shardingStrategyConfig = 
createShardingStrategyConfiguration();
+        
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(shardingStrategyConfig,
 shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
+        
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(shardingStrategyConfig,
 shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
+        assertTrue(checker.getRequiredDataSourceNames(ruleConfig).isEmpty());
+    }
+    
+    @Test
+    void assertGetTableNames() {
+        ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
+        ShardingAuditStrategyConfiguration shardingAuditStrategyConfig = new 
ShardingAuditStrategyConfiguration(Collections.singleton("foo_audit"), false);
+        ShardingStrategyConfiguration shardingStrategyConfig = 
createShardingStrategyConfiguration();
+        
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(shardingStrategyConfig,
 shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
+        
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(shardingStrategyConfig,
 shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
+        assertThat(checker.getTableNames(ruleConfig), 
is(Arrays.asList("foo_tbl", "bar_tbl")));
+    }
+    
     private ShardingRuleConfiguration createRuleConfiguration() {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         result.getShardingAlgorithms().put("foo_algorithm", new 
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new 
Property("sharding-count", "1"))));
@@ -85,8 +159,8 @@ class ShardingRuleConfigurationCheckerTest {
         ShardingTableRuleConfiguration result = new 
ShardingTableRuleConfiguration("foo_tbl", null);
         result.setDatabaseShardingStrategy(null == shardingStrategyConfig ? 
mock(ShardingStrategyConfiguration.class) : shardingStrategyConfig);
         result.setTableShardingStrategy(null == shardingStrategyConfig ? 
mock(ShardingStrategyConfiguration.class) : shardingStrategyConfig);
-        result.setAuditStrategy(null == shardingAuditStrategyConfig ? 
mock(ShardingAuditStrategyConfiguration.class) : shardingAuditStrategyConfig);
-        result.setKeyGenerateStrategy(null == keyGenerateStrategyConfig ? 
mock(KeyGenerateStrategyConfiguration.class) : keyGenerateStrategyConfig);
+        result.setAuditStrategy(shardingAuditStrategyConfig);
+        result.setKeyGenerateStrategy(keyGenerateStrategyConfig);
         return result;
     }
     
@@ -96,8 +170,8 @@ class ShardingRuleConfigurationCheckerTest {
         ShardingAutoTableRuleConfiguration result = 
mock(ShardingAutoTableRuleConfiguration.class);
         when(result.getLogicTable()).thenReturn("bar_tbl");
         when(result.getShardingStrategy()).thenReturn(null == 
shardingStrategyConfig ? mock(ShardingStrategyConfiguration.class) : 
shardingStrategyConfig);
-        when(result.getAuditStrategy()).thenReturn(null == 
shardingAuditStrategyConfig ? mock(ShardingAuditStrategyConfiguration.class) : 
shardingAuditStrategyConfig);
-        when(result.getKeyGenerateStrategy()).thenReturn(null == 
keyGenerateStrategyConfig ? mock(KeyGenerateStrategyConfiguration.class) : 
keyGenerateStrategyConfig);
+        
when(result.getAuditStrategy()).thenReturn(shardingAuditStrategyConfig);
+        
when(result.getKeyGenerateStrategy()).thenReturn(keyGenerateStrategyConfig);
         return result;
     }
 }

Reply via email to