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 202d87fd25d Added unit tests for 
RuleMetaData.getInUsedStorageUnitNameAndRulesMap() (#28724)
202d87fd25d is described below

commit 202d87fd25dcd79bda862930f5894642164e8424
Author: Sakshi Jain <[email protected]>
AuthorDate: Thu Mar 28 06:51:07 2024 +0530

    Added unit tests for RuleMetaData.getInUsedStorageUnitNameAndRulesMap() 
(#28724)
    
    * added some tests for RuleMetaData.getInUsedStorageUnitNameAndRulesMap()
    
    * added test for 0 rules
    
    * remove unused import
    
    * checkstyle issues fixed
    
    * address feedbacks
    
    * address feedbacks
    
    * removed duplicate lines
    
    * replaced MockDataSourceContainedRule with mock object
    
    * spotless issues fixed
---
 .../metadata/database/rule/RuleMetaDataTest.java   | 92 ++++++++++++++++++++++
 1 file changed, 92 insertions(+)

diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataTest.java
index 4dfba648d55..e669e27810b 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataTest.java
@@ -17,14 +17,27 @@
 
 package org.apache.shardingsphere.infra.metadata.database.rule;
 
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.datanode.DataNode;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
+import 
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
 import org.junit.jupiter.api.Test;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 class RuleMetaDataTest {
     
@@ -44,4 +57,83 @@ class RuleMetaDataTest {
     void assertGetSingleRule() {
         
assertThat(ruleMetaData.getSingleRule(ShardingSphereRuleFixture.class), 
instanceOf(ShardingSphereRuleFixture.class));
     }
+    
+    @Test
+    void assertGetInUsedStorageUnitNameAndRulesMapWhenRulesAreEmpty() {
+        Collection<ShardingSphereRule> rules = new ArrayList<>();
+        RuleMetaData ruleMetaData = new RuleMetaData(rules);
+        Map<String, Collection<Class<? extends ShardingSphereRule>>> actual = 
ruleMetaData.getInUsedStorageUnitNameAndRulesMap();
+        assertThat(actual.size(), is(0));
+    }
+    
+    @Test
+    void 
assertGetInUsedStorageUnitNameAndRulesMapWhenRulesContainDataNodeContainedRule()
 {
+        Collection<ShardingSphereRule> rules = new ArrayList<>();
+        DataNodeContainedRule rule = new MockDataNodeContainedRule();
+        rules.add(rule);
+        RuleMetaData ruleMetaData = new RuleMetaData(rules);
+        Map<String, Collection<Class<? extends ShardingSphereRule>>> actual = 
ruleMetaData.getInUsedStorageUnitNameAndRulesMap();
+        assertThat(actual.size(), is(1));
+        assertTrue(actual.containsKey("testDataNodeSourceName"));
+        assertThat(actual.get("testDataNodeSourceName").size(), is(1));
+        assertThat(actual.get("testDataNodeSourceName").size(), is(1));
+        
assertTrue(actual.get("testDataNodeSourceName").contains(MockDataNodeContainedRule.class));
+    }
+    
+    @Test
+    void 
assertGetInUsedStorageUnitNameAndRulesMapWhenRulesContainBothDataSourceContainedRuleAndDataNodeContainedRule()
 {
+        Collection<ShardingSphereRule> rules = new ArrayList<>();
+        DataSourceContainedRule dataSourceContainedRule = 
mock(DataSourceContainedRule.class);
+        
when(dataSourceContainedRule.getDataSourceMapper()).thenReturn(Collections.singletonMap("test",
 Arrays.asList("testDataSourceName")));
+        DataNodeContainedRule dataNodeContainedRule = new 
MockDataNodeContainedRule();
+        rules.add(dataSourceContainedRule);
+        rules.add(dataNodeContainedRule);
+        RuleMetaData ruleMetaData = new RuleMetaData(rules);
+        Map<String, Collection<Class<? extends ShardingSphereRule>>> actual = 
ruleMetaData.getInUsedStorageUnitNameAndRulesMap();
+        assertThat(actual.size(), is(2));
+        assertTrue(actual.containsKey("testDataSourceName"));
+        assertTrue(actual.containsKey("testDataNodeSourceName"));
+        
assertTrue(actual.get("testDataSourceName").contains(dataSourceContainedRule.getClass()));
+        
assertTrue(actual.get("testDataNodeSourceName").contains(MockDataNodeContainedRule.class));
+    }
+    
+    private static class MockDataNodeContainedRule implements 
DataNodeContainedRule {
+        
+        @Override
+        public RuleConfiguration getConfiguration() {
+            return mock(RuleConfiguration.class);
+        }
+        
+        @Override
+        public Map<String, Collection<DataNode>> getAllDataNodes() {
+            Map<String, Collection<DataNode>> result = new LinkedHashMap<>();
+            result.put("test", Arrays.asList(new 
DataNode("testDataNodeSourceName", "testTableName")));
+            return result;
+        }
+        
+        @Override
+        public boolean isNeedAccumulate(final Collection<String> tableNames) {
+            return false;
+        }
+        
+        @Override
+        public Optional<String> findLogicTableByActualTable(final String 
actualTable) {
+            return Optional.empty();
+        }
+        
+        @Override
+        public Optional<String> findFirstActualTable(final String logicTable) {
+            return Optional.empty();
+        }
+        
+        @Override
+        public Collection<DataNode> getDataNodesByTableName(final String 
tableName) {
+            return null;
+        }
+        
+        @Override
+        public Optional<String> findActualTableByCatalog(final String catalog, 
final String logicTable) {
+            return Optional.empty();
+        }
+    }
 }

Reply via email to