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 ae4f174b6c6 Add more test cases on 
ReadwriteSplittingRuleStatementCheckerTest (#38259)
ae4f174b6c6 is described below

commit ae4f174b6c6a97134867078214d41d246911f4e5
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Feb 28 09:26:53 2026 +0800

    Add more test cases on ReadwriteSplittingRuleStatementCheckerTest (#38259)
    
    * Add more test cases on ReadwriteSplittingRuleStatementCheckerTest
    
    * Add more test cases on ReadwriteSplittingRuleStatementCheckerTest
---
 .../ReadwriteSplittingRuleStatementChecker.java    |  3 +-
 ...ReadwriteSplittingRuleStatementCheckerTest.java | 81 +++++++++++++++++++---
 2 files changed, 74 insertions(+), 10 deletions(-)

diff --git 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
index 51a981b8acf..d1eb111f6c0 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
@@ -222,8 +222,7 @@ public final class ReadwriteSplittingRuleStatementChecker {
     
     private static void checkProperties(final ReadwriteSplittingRuleSegment 
each) {
         if ("WEIGHT".equalsIgnoreCase(each.getLoadBalancer().getName())) {
-            
ShardingSpherePreconditions.checkNotEmpty(each.getLoadBalancer().getProps(),
-                    () -> new InvalidAlgorithmConfigurationException("Load 
balancer", each.getLoadBalancer().getName()));
+            
ShardingSpherePreconditions.checkNotEmpty(each.getLoadBalancer().getProps(), () 
-> new InvalidAlgorithmConfigurationException("Load balancer", 
each.getLoadBalancer().getName()));
             checkDataSource(each);
         }
     }
diff --git 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementCheckerTest.java
 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementCheckerTest.java
index 6b60f291196..5f43128a185 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementCheckerTest.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementCheckerTest.java
@@ -19,7 +19,10 @@ package 
org.apache.shardingsphere.readwritesplitting.distsql.handler.checker;
 
 import org.apache.shardingsphere.distsql.segment.AlgorithmSegment;
 import 
org.apache.shardingsphere.infra.algorithm.core.exception.InvalidAlgorithmConfigurationException;
+import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.DuplicateRuleException;
+import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.InvalidRuleConfigurationException;
+import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.MissingRequiredRuleException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.MissingRequiredStrategyException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
@@ -30,6 +33,7 @@ import 
org.apache.shardingsphere.infra.util.props.PropertiesBuilder.Property;
 import 
org.apache.shardingsphere.readwritesplitting.config.ReadwriteSplittingRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.config.rule.ReadwriteSplittingDataSourceGroupRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.segment.ReadwriteSplittingRuleSegment;
+import 
org.apache.shardingsphere.readwritesplitting.exception.actual.DuplicateReadwriteSplittingActualDataSourceException;
 import 
org.apache.shardingsphere.test.infra.framework.extension.mock.AutoMockExtension;
 import 
org.apache.shardingsphere.test.infra.framework.extension.mock.StaticMockSettings;
 import org.junit.jupiter.api.BeforeEach;
@@ -74,7 +78,8 @@ class ReadwriteSplittingRuleStatementCheckerTest {
     
     @Test
     void assertCheckCreationWithDuplicateRuleNames() {
-        Collection<ReadwriteSplittingRuleSegment> segments = Arrays.asList(new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null),
+        Collection<ReadwriteSplittingRuleSegment> segments = Arrays.asList(
+                new ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null),
                 new ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_2", 
Arrays.asList("read_ds_2", "read_ds_3"), null, null),
                 new ReadwriteSplittingRuleSegment("bar_rule_0", "write_ds_4", 
Arrays.asList("read_ds_4", "read_ds_5"), null, null));
         assertThrows(DuplicateRuleException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, segments, null, 
false));
@@ -82,15 +87,14 @@ class ReadwriteSplittingRuleStatementCheckerTest {
     
     @Test
     void assertCheckCreationWithInvalidTransactionalReadQueryStrategy() {
-        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
createReadDataSources(), "invalid", null);
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), "invalid", null);
         assertThrows(MissingRequiredStrategyException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, 
Collections.singleton(segment), null, false));
     }
     
     @ParameterizedTest(name = "{0}")
     @MethodSource("validTransactionalReadQueryStrategyArguments")
     void assertCheckCreationWithValidTransactionalReadQueryStrategy(final 
String name, final String transactionalReadQueryStrategy) {
-        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0",
-                Arrays.asList("read_ds_0", "read_ds_1"), 
transactionalReadQueryStrategy, null);
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), transactionalReadQueryStrategy, null);
         assertDoesNotThrow(() -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, 
Collections.singleton(segment), null, false));
     }
     
@@ -117,6 +121,71 @@ class ReadwriteSplittingRuleStatementCheckerTest {
         assertDoesNotThrow(() -> 
ReadwriteSplittingRuleStatementChecker.checkAlteration(database, 
Collections.singleton(segment), currentRuleConfig));
     }
     
+    @Test
+    void assertCheckCreationWithIfNotExists() {
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null);
+        Collection<ReadwriteSplittingDataSourceGroupRuleConfiguration> 
dataSourceGroups = Collections.singleton(
+                new 
ReadwriteSplittingDataSourceGroupRuleConfiguration("foo_rule_0", "write_ds_9", 
Collections.singletonList("read_ds_9"), "RANDOM"));
+        ReadwriteSplittingRuleConfiguration currentRuleConfig = new 
ReadwriteSplittingRuleConfiguration(dataSourceGroups, Collections.emptyMap());
+        assertDoesNotThrow(() -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, 
Collections.singleton(segment), currentRuleConfig, true));
+    }
+    
+    @Test
+    void assertCheckCreationWithDuplicateRuleNameInLogicDataSources() {
+        DataSourceMapperRuleAttribute ruleAttribute = () -> 
Collections.singletonMap("foo_rule_0", Collections.singleton("actual_ds_0"));
+        
when(database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class)).thenReturn(Collections.singleton(ruleAttribute));
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null);
+        assertThrows(InvalidRuleConfigurationException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, 
Collections.singleton(segment), null, false));
+    }
+    
+    @Test
+    void assertCheckCreationWithDuplicateRuleNameInCurrentRuleConfig() {
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null);
+        Collection<ReadwriteSplittingDataSourceGroupRuleConfiguration> 
dataSourceGroups = Collections.singleton(
+                new 
ReadwriteSplittingDataSourceGroupRuleConfiguration("foo_rule_0", "write_ds_9", 
Collections.singletonList("read_ds_9"), "RANDOM"));
+        ReadwriteSplittingRuleConfiguration currentRuleConfig = new 
ReadwriteSplittingRuleConfiguration(dataSourceGroups, Collections.emptyMap());
+        assertThrows(DuplicateRuleException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, 
Collections.singleton(segment), currentRuleConfig, false));
+    }
+    
+    @Test
+    void assertCheckCreationWithMissingRequiredStorageUnits() {
+        
when(resourceMetaData.getNotExistedDataSources(any())).thenReturn(Collections.singleton("missing_ds_0"));
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null);
+        assertThrows(MissingRequiredStorageUnitsException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, 
Collections.singleton(segment), null, false));
+    }
+    
+    @Test
+    void assertCheckCreationWithDuplicateWriteDataSource() {
+        Collection<ReadwriteSplittingRuleSegment> segments = Arrays.asList(
+                new ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null),
+                new ReadwriteSplittingRuleSegment("bar_rule_0", "write_ds_0", 
Arrays.asList("read_ds_2", "read_ds_3"), null, null));
+        
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, segments, null, 
false));
+    }
+    
+    @Test
+    void assertCheckCreationWithDuplicateReadDataSource() {
+        Collection<ReadwriteSplittingRuleSegment> segments = Arrays.asList(
+                new ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null),
+                new ReadwriteSplittingRuleSegment("bar_rule_0", "write_ds_2", 
Arrays.asList("read_ds_0", "read_ds_3"), null, null));
+        
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, segments, null, 
false));
+    }
+    
+    @Test
+    void assertCheckCreationWithNonWeightLoadBalancer() {
+        AlgorithmSegment loadBalancer = new AlgorithmSegment("RANDOM", new 
Properties());
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, loadBalancer);
+        assertDoesNotThrow(() -> 
ReadwriteSplittingRuleStatementChecker.checkCreation(database, 
Collections.singleton(segment), null, false));
+    }
+    
+    @Test
+    void assertCheckAlterationWithMissingRuleName() {
+        ReadwriteSplittingRuleSegment segment = new 
ReadwriteSplittingRuleSegment("foo_rule_0", "write_ds_0", 
Arrays.asList("read_ds_0", "read_ds_1"), null, null);
+        Collection<ReadwriteSplittingDataSourceGroupRuleConfiguration> 
dataSourceGroups = Collections.singleton(
+                new 
ReadwriteSplittingDataSourceGroupRuleConfiguration("bar_rule_0", "write_ds_9", 
Collections.singletonList("read_ds_9"), "RANDOM"));
+        ReadwriteSplittingRuleConfiguration currentRuleConfig = new 
ReadwriteSplittingRuleConfiguration(dataSourceGroups, Collections.emptyMap());
+        assertThrows(MissingRequiredRuleException.class, () -> 
ReadwriteSplittingRuleStatementChecker.checkAlteration(database, 
Collections.singleton(segment), currentRuleConfig));
+    }
+    
     private static Stream<Arguments> invalidWeightConfigurationArguments() {
         return Stream.of(
                 Arguments.of("empty weight properties",
@@ -136,8 +205,4 @@ class ReadwriteSplittingRuleStatementCheckerTest {
                 Arguments.of("uppercase strategy", "PRIMARY"),
                 Arguments.of("mixed-case strategy", "PrImArY"));
     }
-    
-    private static Collection<String> createReadDataSources() {
-        return Arrays.asList("read_ds_0", "read_ds_1");
-    }
 }

Reply via email to