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 26a28f8378d Refactor SetDefaultSingleTableStorageUnitExecutorTest 
(#33098)
26a28f8378d is described below

commit 26a28f8378df25b1786483e2f422ed03203565c4
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Oct 2 17:01:39 2024 +0800

    Refactor SetDefaultSingleTableStorageUnitExecutorTest (#33098)
---
 .../SetDefaultSingleTableStorageUnitExecutor.java  | 32 +++-----
 ...tDefaultSingleTableStorageUnitExecutorTest.java | 92 +++++++++++-----------
 2 files changed, 59 insertions(+), 65 deletions(-)

diff --git 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutor.java
 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutor.java
index 708cebe3aca..20c98b931cc 100644
--- 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutor.java
+++ 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutor.java
@@ -31,6 +31,7 @@ import org.apache.shardingsphere.single.rule.SingleRule;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.stream.Collectors;
 
 /**
@@ -45,42 +46,31 @@ public final class SetDefaultSingleTableStorageUnitExecutor 
implements DatabaseR
     
     @Override
     public void checkBeforeUpdate(final 
SetDefaultSingleTableStorageUnitStatement sqlStatement) {
-        checkStorageUnitExist(sqlStatement);
+        checkDefaultStorageUnitExist(sqlStatement);
     }
     
-    private void checkStorageUnitExist(final 
SetDefaultSingleTableStorageUnitStatement sqlStatement) {
+    private void checkDefaultStorageUnitExist(final 
SetDefaultSingleTableStorageUnitStatement sqlStatement) {
         if (!Strings.isNullOrEmpty(sqlStatement.getDefaultStorageUnit())) {
-            Collection<String> dataSourceNames = new 
HashSet<>(database.getResourceMetaData().getStorageUnits().keySet());
-            dataSourceNames.addAll(getLogicDataSourceNames());
-            ShardingSpherePreconditions.checkContains(dataSourceNames, 
sqlStatement.getDefaultStorageUnit(),
+            
ShardingSpherePreconditions.checkContains(getAllStorageUnitNames(), 
sqlStatement.getDefaultStorageUnit(),
                     () -> new 
MissingRequiredStorageUnitsException(database.getName(), 
Collections.singleton(sqlStatement.getDefaultStorageUnit())));
         }
     }
     
-    private Collection<String> getLogicDataSourceNames() {
-        return 
database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class).stream()
-                .flatMap(each -> 
each.getDataSourceMapper().keySet().stream()).collect(Collectors.toSet());
+    private Collection<String> getAllStorageUnitNames() {
+        Collection<String> result = new 
HashSet<>(database.getResourceMetaData().getStorageUnits().keySet());
+        result.addAll(
+                
database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class).stream().flatMap(each
 -> each.getDataSourceMapper().keySet().stream()).collect(Collectors.toSet()));
+        return result;
     }
     
     @Override
     public SingleRuleConfiguration buildToBeAlteredRuleConfiguration(final 
SetDefaultSingleTableStorageUnitStatement sqlStatement) {
-        SingleRuleConfiguration result = new SingleRuleConfiguration();
-        if (null != sqlStatement.getDefaultStorageUnit()) {
-            result.setDefaultDataSource(sqlStatement.getDefaultStorageUnit());
-        }
-        return result;
+        return new SingleRuleConfiguration(new LinkedList<>(), 
sqlStatement.getDefaultStorageUnit());
     }
     
     @Override
     public SingleRuleConfiguration buildToBeDroppedRuleConfiguration(final 
SingleRuleConfiguration toBeAlteredRuleConfig) {
-        if (toBeAlteredRuleConfig.getDefaultDataSource().isPresent()) {
-            return null;
-        }
-        SingleRuleConfiguration result = new SingleRuleConfiguration();
-        if (rule.getConfiguration().getDefaultDataSource().isPresent()) {
-            
result.setDefaultDataSource(rule.getConfiguration().getDefaultDataSource().get());
-        }
-        return result;
+        return toBeAlteredRuleConfig.getDefaultDataSource().isPresent() ? null 
: new SingleRuleConfiguration(new LinkedList<>(), 
rule.getConfiguration().getDefaultDataSource().orElse(null));
     }
     
     @Override
diff --git 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
index 979ea776070..487c43d0650 100644
--- 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
+++ 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
@@ -17,77 +17,81 @@
 
 package org.apache.shardingsphere.single.distsql.handler.update;
 
+import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.rule.attribute.datasource.DataSourceMapperRuleAttribute;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
 import 
org.apache.shardingsphere.single.distsql.statement.rdl.SetDefaultSingleTableStorageUnitStatement;
 import org.apache.shardingsphere.single.rule.SingleRule;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.ArgumentMatchers;
 
+import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
+import java.util.Optional;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-@ExtendWith(MockitoExtension.class)
 class SetDefaultSingleTableStorageUnitExecutorTest {
     
-    private final SetDefaultSingleTableStorageUnitExecutor executor = new 
SetDefaultSingleTableStorageUnitExecutor();
-    
     @Test
-    void assertCheckWithInvalidDataSource() {
+    void assertExecuteUpdateWithNotExistedDefaultStorageUnit() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        
when(database.getRuleMetaData().getAttributes(any())).thenReturn(Collections.emptyList());
-        executor.setDatabase(database);
-        assertThrows(MissingRequiredStorageUnitsException.class, () -> 
executor.checkBeforeUpdate(new 
SetDefaultSingleTableStorageUnitStatement("bar_ds")));
+        
when(database.getResourceMetaData().getStorageUnits().keySet()).thenReturn(Collections.emptySet());
+        
when(database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class)).thenReturn(Collections.emptyList());
+        SingleRule rule = mock(SingleRule.class, RETURNS_DEEP_STUBS);
+        
when(rule.getAttributes().findAttribute(DataSourceMapperRuleAttribute.class)).thenReturn(Optional.empty());
+        DistSQLUpdateExecuteEngine engine = new DistSQLUpdateExecuteEngine(new 
SetDefaultSingleTableStorageUnitStatement("foo_ds"), "foo_db", 
mockContextManager(rule, database));
+        assertThrows(MissingRequiredStorageUnitsException.class, 
engine::executeUpdate);
     }
     
     @Test
-    void assertCheckWithLogicDataSource() {
+    void assertExecuteUpdateWithoutDefaultStorageUnit() throws SQLException {
+        SingleRule rule = mock(SingleRule.class);
+        when(rule.getConfiguration()).thenReturn(new 
SingleRuleConfiguration(Collections.emptyList(), "foo_ds"));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        DataSourceMapperRuleAttribute ruleAttribute = 
mock(DataSourceMapperRuleAttribute.class, RETURNS_DEEP_STUBS);
-        
when(ruleAttribute.getDataSourceMapper().keySet()).thenReturn(Collections.singleton("logic_ds"));
-        
when(database.getRuleMetaData().getAttributes(any())).thenReturn(Collections.singleton(ruleAttribute));
-        executor.setDatabase(database);
-        assertDoesNotThrow(() -> executor.checkBeforeUpdate(new 
SetDefaultSingleTableStorageUnitStatement("logic_ds")));
+        ContextManager contextManager = mockContextManager(rule, database);
+        DistSQLUpdateExecuteEngine engine = new DistSQLUpdateExecuteEngine(new 
SetDefaultSingleTableStorageUnitStatement(null), "foo_db", contextManager);
+        engine.executeUpdate();
+        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
+        verify(metaDataManagerPersistService)
+                .removeRuleConfigurationItem(eq("foo_db"), 
ArgumentMatchers.<SingleRuleConfiguration>argThat(x -> 
x.getDefaultDataSource().equals(Optional.of("foo_ds"))));
+        
verify(metaDataManagerPersistService).alterRuleConfiguration(eq("foo_db"), 
ArgumentMatchers.<SingleRuleConfiguration>argThat(x -> 
!x.getDefaultDataSource().isPresent()));
     }
     
     @Test
-    void assertUpdate() {
-        executor.setRule(mock(SingleRule.class));
-        SingleRuleConfiguration toBeAlteredRuleConfig = 
executor.buildToBeAlteredRuleConfiguration(new 
SetDefaultSingleTableStorageUnitStatement("foo_ds"));
-        assertTrue(toBeAlteredRuleConfig.getDefaultDataSource().isPresent());
-        assertThat(toBeAlteredRuleConfig.getDefaultDataSource().get(), 
is("foo_ds"));
-        assertTrue(toBeAlteredRuleConfig.getTables().isEmpty());
-        
assertNull(executor.buildToBeDroppedRuleConfiguration(toBeAlteredRuleConfig));
+    void assertExecuteUpdateWithDefaultStorageUnit() throws SQLException {
+        SingleRule rule = mock(SingleRule.class, RETURNS_DEEP_STUBS);
+        when(rule.getConfiguration()).thenReturn(new 
SingleRuleConfiguration(Collections.emptyList(), "foo_ds"));
+        
when(rule.getAttributes().findAttribute(DataSourceMapperRuleAttribute.class)).thenReturn(Optional.empty());
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        
when(database.getResourceMetaData().getStorageUnits().keySet()).thenReturn(new 
HashSet<>(Arrays.asList("foo_ds", "bar_ds")));
+        
when(database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class)).thenReturn(Collections.emptyList());
+        ContextManager contextManager = mockContextManager(rule, database);
+        DistSQLUpdateExecuteEngine engine = new DistSQLUpdateExecuteEngine(new 
SetDefaultSingleTableStorageUnitStatement("bar_ds"), "foo_db", contextManager);
+        engine.executeUpdate();
+        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
+        
verify(metaDataManagerPersistService).removeRuleConfigurationItem("foo_db", 
null);
+        
verify(metaDataManagerPersistService).alterRuleConfiguration(eq("foo_db"), 
ArgumentMatchers.<SingleRuleConfiguration>argThat(x -> 
x.getDefaultDataSource().equals(Optional.of("bar_ds"))));
     }
     
-    @Test
-    void assertRandom() {
-        SingleRuleConfiguration currentConfig = new SingleRuleConfiguration();
-        currentConfig.setDefaultDataSource("foo_ds");
-        SingleRule rule = mock(SingleRule.class);
-        when(rule.getConfiguration()).thenReturn(currentConfig);
-        executor.setRule(rule);
-        SingleRuleConfiguration toBeAlteredRuleConfig = 
executor.buildToBeAlteredRuleConfiguration(new 
SetDefaultSingleTableStorageUnitStatement(null));
-        assertFalse(toBeAlteredRuleConfig.getDefaultDataSource().isPresent());
-        SingleRuleConfiguration toBeDroppedRuleConfig = 
executor.buildToBeDroppedRuleConfiguration(toBeAlteredRuleConfig);
-        assertNotNull(toBeDroppedRuleConfig);
-        assertTrue(toBeDroppedRuleConfig.getDefaultDataSource().isPresent());
-        assertThat(toBeDroppedRuleConfig.getDefaultDataSource().get(), 
is("foo_ds"));
-        assertTrue(toBeDroppedRuleConfig.getTables().isEmpty());
+    private ContextManager mockContextManager(final SingleRule rule, final 
ShardingSphereDatabase database) {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        RuleMetaData ruleMetaData = new 
RuleMetaData(Collections.singleton(rule));
+        when(database.getName()).thenReturn("foo_db");
+        when(database.getRuleMetaData()).thenReturn(ruleMetaData);
+        when(result.getDatabase("foo_db")).thenReturn(database);
+        return result;
     }
 }

Reply via email to