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 ddbe9207b75 Add GlobalRuleDefinitionExecutorTest (#33135)
ddbe9207b75 is described below

commit ddbe9207b75a6d7abd4de23eecea049ef2c22c09
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Oct 6 20:39:24 2024 +0800

    Add GlobalRuleDefinitionExecutorTest (#33135)
    
    * Add GlobalRuleDefinitionExecutorTest
    
    * Add GlobalRuleDefinitionExecutorTest
---
 .../update/AlterGlobalClockRuleExecutorTest.java   | 57 +++++++-------
 .../update/AlterSQLFederationRuleExecutorTest.java | 90 +++++++++------------
 .../update/AlterSQLParserRuleExecutorTest.java     | 85 ++++++++------------
 .../update/AlterSQLTranslatorRuleExecutorTest.java | 73 +++++++----------
 .../update/AlterTransactionRuleExecutorTest.java   | 91 ++++++++++------------
 .../update/GlobalRuleDefinitionExecutorTest.java   | 53 +++++++------
 6 files changed, 192 insertions(+), 257 deletions(-)

diff --git 
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
 
b/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
index bdbb30bc041..6a1251a4acf 100644
--- 
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
+++ 
b/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
@@ -17,50 +17,45 @@
 
 package org.apache.shardingsphere.globalclock.distsql.handler.update;
 
-import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
 import 
org.apache.shardingsphere.globalclock.config.GlobalClockRuleConfiguration;
 import 
org.apache.shardingsphere.globalclock.distsql.statement.updatable.AlterGlobalClockRuleStatement;
 import org.apache.shardingsphere.globalclock.rule.GlobalClockRule;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.rule.scope.GlobalRuleConfiguration;
+import 
org.apache.shardingsphere.test.it.distsql.handler.engine.update.GlobalRuleDefinitionExecutorTest;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.SQLException;
-import java.util.Collections;
 import java.util.Properties;
+import java.util.stream.Stream;
 
-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.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
-class AlterGlobalClockRuleExecutorTest {
+class AlterGlobalClockRuleExecutorTest extends 
GlobalRuleDefinitionExecutorTest {
     
-    @Test
-    void assertExecute() throws SQLException {
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(new 
AlterGlobalClockRuleStatement("TSO", "redis", true, new Properties()), null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        
verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(ArgumentMatchers.argThat(this::assertRuleConfiguration));
+    AlterGlobalClockRuleExecutorTest() {
+        super(mock(GlobalClockRule.class));
     }
     
-    private boolean assertRuleConfiguration(final GlobalClockRuleConfiguration 
actual) {
-        assertThat(actual.getType(), is("TSO"));
-        assertThat(actual.getProvider(), is("redis"));
-        assertTrue(actual.isEnabled());
-        return true;
+    @ParameterizedTest(name = "{0}")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    void assertExecuteUpdate(final String name, final GlobalRuleConfiguration 
ruleConfig, final DistSQLStatement sqlStatement, final RuleConfiguration 
matchedRuleConfig) throws SQLException {
+        assertExecuteUpdate(ruleConfig, sqlStatement, matchedRuleConfig, null);
     }
     
-    private ContextManager mockContextManager() {
-        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        GlobalClockRule rule = mock(GlobalClockRule.class);
-        when(rule.getConfiguration()).thenReturn(new 
GlobalClockRuleConfiguration("TSO", "local", false, new Properties()));
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
-        return result;
+    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
+            return Stream.of(Arguments.arguments("normal",
+                    new GlobalClockRuleConfiguration("TSO", "local", false, 
new Properties()),
+                    new AlterGlobalClockRuleStatement("TSO", "redis", true, 
new Properties()),
+                    new GlobalClockRuleConfiguration("TSO", "redis", true, new 
Properties())));
+        }
     }
 }
diff --git 
a/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
 
b/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
index da35a8d0e16..a768beb84b7 100644
--- 
a/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
+++ 
b/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
@@ -17,75 +17,57 @@
 
 package org.apache.shardingsphere.sqlfederation.distsql.handler.update;
 
-import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.rule.scope.GlobalRuleConfiguration;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import 
org.apache.shardingsphere.sqlfederation.config.SQLFederationRuleConfiguration;
 import 
org.apache.shardingsphere.sqlfederation.distsql.segment.CacheOptionSegment;
 import 
org.apache.shardingsphere.sqlfederation.distsql.statement.updatable.AlterSQLFederationRuleStatement;
 import org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
 import 
org.apache.shardingsphere.sqlfederation.rule.builder.DefaultSQLFederationRuleConfigurationBuilder;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
+import 
org.apache.shardingsphere.test.it.distsql.handler.engine.update.GlobalRuleDefinitionExecutorTest;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.SQLException;
-import java.util.Collections;
+import java.util.stream.Stream;
 
-import static 
org.apache.shardingsphere.test.matcher.ShardingSphereAssertionMatchers.deepEqual;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-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;
 
-class AlterSQLFederationRuleExecutorTest {
+class AlterSQLFederationRuleExecutorTest extends 
GlobalRuleDefinitionExecutorTest {
     
-    @Test
-    void assertExecuteUpdate() throws SQLException {
-        AlterSQLFederationRuleStatement sqlStatement = new 
AlterSQLFederationRuleStatement(true, true, new CacheOptionSegment(64, 512L));
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(sqlStatement, null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(
-                ArgumentMatchers.<SQLFederationRuleConfiguration>argThat(x -> 
assertRuleConfiguration(x, true, true, new CacheOption(64, 512L))));
+    AlterSQLFederationRuleExecutorTest() {
+        super(mock(SQLFederationRule.class));
     }
     
-    @Test
-    void assertExecuteUpdateWithNullStatement() throws SQLException {
-        AlterSQLFederationRuleStatement sqlStatement = new 
AlterSQLFederationRuleStatement(null, null, null);
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(sqlStatement, null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(
-                ArgumentMatchers.<SQLFederationRuleConfiguration>argThat(x -> 
assertRuleConfiguration(x, false, false, new CacheOption(2000, 65535L))));
+    @ParameterizedTest(name = "{0}")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    void assertExecuteUpdate(final String name, final GlobalRuleConfiguration 
ruleConfig,
+                             final DistSQLStatement sqlStatement, final 
RuleConfiguration matchedRuleConfig, final Class<? extends Exception> 
expectedException) throws SQLException {
+        assertExecuteUpdate(ruleConfig, sqlStatement, matchedRuleConfig, 
expectedException);
     }
     
-    @Test
-    void assertExecuteUpdateWithNullCacheOptionSegment() throws SQLException {
-        AlterSQLFederationRuleStatement sqlStatement = new 
AlterSQLFederationRuleStatement(null, null, new CacheOptionSegment(null, null));
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(sqlStatement, null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(
-                ArgumentMatchers.<SQLFederationRuleConfiguration>argThat(x -> 
assertRuleConfiguration(x, false, false, new CacheOption(2000, 65535L))));
-    }
-    
-    private boolean assertRuleConfiguration(final 
SQLFederationRuleConfiguration actual,
-                                            final boolean 
expectedSQLFederationEnabled, final boolean expectedAllQueryUseSQLFederation, 
final CacheOption expectedExecutionPlanCache) {
-        assertThat(actual.isSqlFederationEnabled(), 
is(expectedSQLFederationEnabled));
-        assertThat(actual.isAllQueryUseSQLFederation(), 
is(expectedAllQueryUseSQLFederation));
-        assertThat(actual.getExecutionPlanCache(), 
deepEqual(expectedExecutionPlanCache));
-        return true;
-    }
-    
-    private ContextManager mockContextManager() {
-        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        SQLFederationRule rule = mock(SQLFederationRule.class);
-        when(rule.getConfiguration()).thenReturn(new 
DefaultSQLFederationRuleConfigurationBuilder().build());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
-        return result;
+    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
+            return Stream.of(
+                    Arguments.arguments("normal",
+                            new 
DefaultSQLFederationRuleConfigurationBuilder().build(),
+                            new AlterSQLFederationRuleStatement(true, true, 
new CacheOptionSegment(64, 512L)),
+                            new SQLFederationRuleConfiguration(true, true, new 
CacheOption(64, 512L)), null),
+                    
Arguments.arguments("withNotExistedDistributedTransactionType",
+                            new 
DefaultSQLFederationRuleConfigurationBuilder().build(),
+                            new AlterSQLFederationRuleStatement(null, null, 
null),
+                            new SQLFederationRuleConfiguration(false, false, 
new CacheOption(2000, 65535L)), null),
+                    Arguments.arguments("withNotExistedXATransactionProvider",
+                            new 
DefaultSQLFederationRuleConfigurationBuilder().build(),
+                            new AlterSQLFederationRuleStatement(null, null, 
new CacheOptionSegment(null, null)),
+                            new SQLFederationRuleConfiguration(false, false, 
new CacheOption(2000, 65535L)), null));
+        }
     }
 }
diff --git 
a/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
 
b/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
index 4d63fc54d7f..eea3d8a3850 100644
--- 
a/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
+++ 
b/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
@@ -17,72 +17,55 @@
 
 package org.apache.shardingsphere.parser.distsql.handler.update;
 
-import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.rule.scope.GlobalRuleConfiguration;
 import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
 import org.apache.shardingsphere.parser.distsql.segment.CacheOptionSegment;
 import 
org.apache.shardingsphere.parser.distsql.statement.updatable.AlterSQLParserRuleStatement;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
+import 
org.apache.shardingsphere.test.it.distsql.handler.engine.update.GlobalRuleDefinitionExecutorTest;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.SQLException;
-import java.util.Collections;
+import java.util.stream.Stream;
 
-import static 
org.apache.shardingsphere.test.matcher.ShardingSphereAssertionMatchers.deepEqual;
-import static org.hamcrest.MatcherAssert.assertThat;
-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;
 
-class AlterSQLParserRuleExecutorTest {
+class AlterSQLParserRuleExecutorTest extends GlobalRuleDefinitionExecutorTest {
     
-    @Test
-    void assertExecute() throws SQLException {
-        AlterSQLParserRuleStatement sqlStatement = new 
AlterSQLParserRuleStatement(new CacheOptionSegment(64, 512L), new 
CacheOptionSegment(1000, 1000L));
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(sqlStatement, null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(
-                ArgumentMatchers.<SQLParserRuleConfiguration>argThat(x -> 
assertRuleConfiguration(x, new CacheOption(64, 512L), new CacheOption(1000, 
1000L))));
+    AlterSQLParserRuleExecutorTest() {
+        super(mock(SQLParserRule.class));
     }
     
-    @Test
-    void assertExecuteWithNullStatement() throws SQLException {
-        AlterSQLParserRuleStatement sqlStatement = new 
AlterSQLParserRuleStatement(null, null);
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(sqlStatement, null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(
-                ArgumentMatchers.<SQLParserRuleConfiguration>argThat(x -> 
assertRuleConfiguration(x, new CacheOption(128, 1024L), new CacheOption(2000, 
65535L))));
+    @ParameterizedTest(name = "{0}")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    void assertExecuteUpdate(final String name, final GlobalRuleConfiguration 
ruleConfig, final DistSQLStatement sqlStatement, final RuleConfiguration 
matchedRuleConfig) throws SQLException {
+        assertExecuteUpdate(ruleConfig, sqlStatement, matchedRuleConfig, null);
     }
     
-    @Test
-    void assertExecuteWithNullCacheOptionSegment() throws SQLException {
-        AlterSQLParserRuleStatement sqlStatement = new 
AlterSQLParserRuleStatement(new CacheOptionSegment(null, null), new 
CacheOptionSegment(null, null));
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(sqlStatement, null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(
-                ArgumentMatchers.<SQLParserRuleConfiguration>argThat(x -> 
assertRuleConfiguration(x, new CacheOption(128, 1024L), new CacheOption(2000, 
65535L))));
-    }
-    
-    private boolean assertRuleConfiguration(final SQLParserRuleConfiguration 
actual, final CacheOption expectedParseTreeCache, final CacheOption 
expectedSQLStatementCache) {
-        assertThat(actual.getParseTreeCache(), 
deepEqual(expectedParseTreeCache));
-        assertThat(actual.getSqlStatementCache(), 
deepEqual(expectedSQLStatementCache));
-        return true;
-    }
-    
-    private ContextManager mockContextManager() {
-        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        SQLParserRule rule = mock(SQLParserRule.class);
-        when(rule.getConfiguration()).thenReturn(new 
DefaultSQLParserRuleConfigurationBuilder().build());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
-        return result;
+    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
+            return Stream.of(Arguments.arguments("normal",
+                    new DefaultSQLParserRuleConfigurationBuilder().build(),
+                    new AlterSQLParserRuleStatement(new CacheOptionSegment(64, 
512L), new CacheOptionSegment(1000, 1000L)),
+                    new SQLParserRuleConfiguration(new CacheOption(64, 512L), 
new CacheOption(1000, 1000L))),
+                    Arguments.arguments("withNullStatement",
+                            new 
DefaultSQLParserRuleConfigurationBuilder().build(),
+                            new AlterSQLParserRuleStatement(null, null),
+                            new SQLParserRuleConfiguration(new 
CacheOption(128, 1024L), new CacheOption(2000, 65535L))),
+                    Arguments.arguments("wthNullCacheOptionSegment",
+                            new 
DefaultSQLParserRuleConfigurationBuilder().build(),
+                            new AlterSQLParserRuleStatement(new 
CacheOptionSegment(null, null), new CacheOptionSegment(null, null)),
+                            new SQLParserRuleConfiguration(new 
CacheOption(128, 1024L), new CacheOption(2000, 65535L))));
+        }
     }
 }
diff --git 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
index 2992fbe4bee..c1c0c865796 100644
--- 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
+++ 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
@@ -17,65 +17,52 @@
 
 package org.apache.shardingsphere.sqltranslator.distsql.handler.update;
 
-import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
 import org.apache.shardingsphere.distsql.segment.AlgorithmSegment;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.rule.scope.GlobalRuleConfiguration;
 import 
org.apache.shardingsphere.sqltranslator.config.SQLTranslatorRuleConfiguration;
 import 
org.apache.shardingsphere.sqltranslator.distsql.statement.updateable.AlterSQLTranslatorRuleStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
+import 
org.apache.shardingsphere.test.it.distsql.handler.engine.update.GlobalRuleDefinitionExecutorTest;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.SQLException;
-import java.util.Collections;
 import java.util.Properties;
+import java.util.stream.Stream;
 
-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.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
-class AlterSQLTranslatorRuleExecutorTest {
+class AlterSQLTranslatorRuleExecutorTest extends 
GlobalRuleDefinitionExecutorTest {
     
-    @Test
-    void assertExecuteWithTrueOriginalSQLWhenTranslatingFailed() throws 
SQLException {
-        AlterSQLTranslatorRuleStatement sqlStatement = new 
AlterSQLTranslatorRuleStatement(new AlgorithmSegment("Native", 
PropertiesBuilder.build(new Property("foo", "bar"))), true);
-        ContextManager contextManager = mockContextManager();
-        DistSQLUpdateExecuteEngine engine = new 
DistSQLUpdateExecuteEngine(sqlStatement, null, contextManager);
-        engine.executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        
verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(ArgumentMatchers.argThat(this::assertRuleConfiguration));
+    AlterSQLTranslatorRuleExecutorTest() {
+        super(mock(SQLTranslatorRule.class));
     }
     
-    @Test
-    void assertExecuteWithNullOriginalSQLWhenTranslatingFailed() throws 
SQLException {
-        AlterSQLTranslatorRuleStatement sqlStatement = new 
AlterSQLTranslatorRuleStatement(new AlgorithmSegment("Native", 
PropertiesBuilder.build(new Property("foo", "bar"))), null);
-        ContextManager contextManager = mockContextManager();
-        DistSQLUpdateExecuteEngine engine = new 
DistSQLUpdateExecuteEngine(sqlStatement, null, contextManager);
-        engine.executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        
verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(ArgumentMatchers.argThat(this::assertRuleConfiguration));
+    @ParameterizedTest(name = "{0}")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    void assertExecuteUpdate(final String name, final GlobalRuleConfiguration 
ruleConfig, final DistSQLStatement sqlStatement, final RuleConfiguration 
matchedRuleConfig) throws SQLException {
+        assertExecuteUpdate(ruleConfig, sqlStatement, matchedRuleConfig, null);
     }
     
-    private boolean assertRuleConfiguration(final 
SQLTranslatorRuleConfiguration actual) {
-        assertThat(actual.getProps().size(), is(1));
-        assertThat(actual.getProps().getProperty("foo"), is("bar"));
-        assertTrue(actual.isUseOriginalSQLWhenTranslatingFailed());
-        return true;
-    }
-    
-    private ContextManager mockContextManager() {
-        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        SQLTranslatorRule rule = mock(SQLTranslatorRule.class);
-        when(rule.getConfiguration()).thenReturn(new 
SQLTranslatorRuleConfiguration("NATIVE", new Properties(), true));
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
-        return result;
+    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
+            return 
Stream.of(Arguments.arguments("withTrueOriginalSQLWhenTranslatingFailed",
+                    new SQLTranslatorRuleConfiguration("NATIVE", new 
Properties(), true),
+                    new AlterSQLTranslatorRuleStatement(new 
AlgorithmSegment("NATIVE", PropertiesBuilder.build(new Property("foo", 
"bar"))), true),
+                    new SQLTranslatorRuleConfiguration("NATIVE", 
PropertiesBuilder.build(new Property("foo", "bar")), true)),
+                    
Arguments.arguments("withNullOriginalSQLWhenTranslatingFailed",
+                            new SQLTranslatorRuleConfiguration("NATIVE", new 
Properties(), true),
+                            new AlterSQLTranslatorRuleStatement(new 
AlgorithmSegment("NATIVE", PropertiesBuilder.build(new Property("foo", 
"bar"))), null),
+                            new SQLTranslatorRuleConfiguration("NATIVE", 
PropertiesBuilder.build(new Property("foo", "bar")), true)));
+        }
     }
 }
diff --git 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
index 877cd07fb2c..8d4623833b6 100644
--- 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
+++ 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
@@ -17,74 +17,63 @@
 
 package org.apache.shardingsphere.transaction.distsql.handler.update;
 
-import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.rule.scope.GlobalRuleConfiguration;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.InvalidRuleConfigurationException;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import 
org.apache.shardingsphere.test.it.distsql.handler.engine.update.GlobalRuleDefinitionExecutorTest;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
 import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
 import 
org.apache.shardingsphere.transaction.distsql.segment.TransactionProviderSegment;
 import 
org.apache.shardingsphere.transaction.distsql.statement.updatable.AlterTransactionRuleStatement;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.SQLException;
-import java.util.Collections;
 import java.util.Properties;
+import java.util.stream.Stream;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-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;
 
-class AlterTransactionRuleExecutorTest {
+class AlterTransactionRuleExecutorTest extends 
GlobalRuleDefinitionExecutorTest {
     
-    @Test
-    void assertExecuteUpdateWithInvalidTransactionType() {
-        AlterTransactionRuleStatement sqlStatement = new 
AlterTransactionRuleStatement("Invalid", new TransactionProviderSegment("", new 
Properties()));
-        assertThrows(InvalidRuleConfigurationException.class, () -> new 
DistSQLUpdateExecuteEngine(sqlStatement, null, 
mockContextManager()).executeUpdate());
+    AlterTransactionRuleExecutorTest() {
+        super(mock(TransactionRule.class));
     }
     
-    @Test
-    void assertExecuteUpdateWithNotExistedDistributedTransactionType() {
-        AlterTransactionRuleStatement sqlStatement = new 
AlterTransactionRuleStatement("BASE", new TransactionProviderSegment("", new 
Properties()));
-        assertThrows(InvalidRuleConfigurationException.class, () -> new 
DistSQLUpdateExecuteEngine(sqlStatement, null, 
mockContextManager()).executeUpdate());
+    @ParameterizedTest(name = "{0}")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    void assertExecuteUpdate(final String name, final GlobalRuleConfiguration 
ruleConfig,
+                             final DistSQLStatement sqlStatement, final 
RuleConfiguration matchedRuleConfig, final Class<? extends Exception> 
expectedException) throws SQLException {
+        assertExecuteUpdate(ruleConfig, sqlStatement, matchedRuleConfig, 
expectedException);
     }
     
-    @Test
-    void assertExecuteUpdateWithNotExistedXATransactionProvider() {
-        AlterTransactionRuleStatement sqlStatement = new 
AlterTransactionRuleStatement("XA", new TransactionProviderSegment("Invalid", 
new Properties()));
-        assertThrows(InvalidRuleConfigurationException.class, () -> new 
DistSQLUpdateExecuteEngine(sqlStatement, null, 
mockContextManager()).executeUpdate());
-    }
-    
-    @Test
-    void assertExecuteUpdate() throws SQLException {
-        AlterTransactionRuleStatement sqlStatement = new 
AlterTransactionRuleStatement(
-                "XA", new TransactionProviderSegment("Atomikos", 
PropertiesBuilder.build(new Property("host", "127.0.0.1"), new 
Property("databaseName", "jbossts"))));
-        ContextManager contextManager = mockContextManager();
-        DistSQLUpdateExecuteEngine engine = new 
DistSQLUpdateExecuteEngine(sqlStatement, null, contextManager);
-        engine.executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        
verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(ArgumentMatchers.argThat(this::assertRuleConfiguration));
-    }
-    
-    private boolean assertRuleConfiguration(final TransactionRuleConfiguration 
actual) {
-        assertThat(actual.getProps().size(), is(2));
-        assertThat(actual.getProps().getProperty("host"), is("127.0.0.1"));
-        assertThat(actual.getProps().getProperty("databaseName"), 
is("jbossts"));
-        return true;
-    }
-    
-    private ContextManager mockContextManager() {
-        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        TransactionRule rule = mock(TransactionRule.class);
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
-        return result;
+    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
+            return Stream.of(
+                    Arguments.arguments("withInvalidTransactionType",
+                            new TransactionRuleConfiguration("", "", new 
Properties()),
+                            new AlterTransactionRuleStatement("Invalid", new 
TransactionProviderSegment("", new Properties())),
+                            null, InvalidRuleConfigurationException.class),
+                    
Arguments.arguments("withNotExistedDistributedTransactionType",
+                            new TransactionRuleConfiguration("", "", new 
Properties()),
+                            new AlterTransactionRuleStatement("BASE", new 
TransactionProviderSegment("", new Properties())),
+                            null, InvalidRuleConfigurationException.class),
+                    Arguments.arguments("withNotExistedXATransactionProvider",
+                            new TransactionRuleConfiguration("", "", new 
Properties()),
+                            new AlterTransactionRuleStatement("XA", new 
TransactionProviderSegment("Invalid", new Properties())),
+                            null, InvalidRuleConfigurationException.class),
+                    Arguments.arguments("normal",
+                            new TransactionRuleConfiguration("XA", "Atomikos", 
new Properties()),
+                            new AlterTransactionRuleStatement("XA", new 
TransactionProviderSegment("Atomikos", PropertiesBuilder.build(new 
Property("k", "v")))),
+                            new TransactionRuleConfiguration("XA", "Atomikos", 
PropertiesBuilder.build(new Property("k", "v"))), null));
+        }
     }
 }
diff --git 
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
 
b/test/it/distsql/src/main/java/org/apache/shardingsphere/test/it/distsql/handler/engine/update/GlobalRuleDefinitionExecutorTest.java
similarity index 53%
copy from 
kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
copy to 
test/it/distsql/src/main/java/org/apache/shardingsphere/test/it/distsql/handler/engine/update/GlobalRuleDefinitionExecutorTest.java
index bdbb30bc041..2e3bdf48720 100644
--- 
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
+++ 
b/test/it/distsql/src/main/java/org/apache/shardingsphere/test/it/distsql/handler/engine/update/GlobalRuleDefinitionExecutorTest.java
@@ -15,52 +15,51 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.globalclock.distsql.handler.update;
+package org.apache.shardingsphere.test.it.distsql.handler.engine.update;
 
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
-import 
org.apache.shardingsphere.globalclock.config.GlobalClockRuleConfiguration;
-import 
org.apache.shardingsphere.globalclock.distsql.statement.updatable.AlterGlobalClockRuleStatement;
-import org.apache.shardingsphere.globalclock.rule.GlobalClockRule;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.rule.scope.GlobalRuleConfiguration;
+import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.InvalidRuleConfigurationException;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
 
 import java.sql.SQLException;
 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.assertTrue;
+import static 
org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 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;
 
-class AlterGlobalClockRuleExecutorTest {
+@RequiredArgsConstructor
+public abstract class GlobalRuleDefinitionExecutorTest {
     
-    @Test
-    void assertExecute() throws SQLException {
-        ContextManager contextManager = mockContextManager();
-        new DistSQLUpdateExecuteEngine(new 
AlterGlobalClockRuleStatement("TSO", "redis", true, new Properties()), null, 
contextManager).executeUpdate();
-        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
-        
verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(ArgumentMatchers.argThat(this::assertRuleConfiguration));
-    }
+    private final GlobalRule mockedRule;
     
-    private boolean assertRuleConfiguration(final GlobalClockRuleConfiguration 
actual) {
-        assertThat(actual.getType(), is("TSO"));
-        assertThat(actual.getProvider(), is("redis"));
-        assertTrue(actual.isEnabled());
-        return true;
+    protected void assertExecuteUpdate(final GlobalRuleConfiguration 
ruleConfig,
+                                       final DistSQLStatement sqlStatement, 
final RuleConfiguration matchedRuleConfig, final Class<? extends Exception> 
expectedException) throws SQLException {
+        ContextManager contextManager = mockContextManager(ruleConfig);
+        DistSQLUpdateExecuteEngine engine = new 
DistSQLUpdateExecuteEngine(sqlStatement, null, contextManager);
+        if (null != expectedException) {
+            assertThrows(InvalidRuleConfigurationException.class, 
engine::executeUpdate);
+            return;
+        }
+        engine.executeUpdate();
+        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
+        
verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(deepEq(matchedRuleConfig));
     }
     
-    private ContextManager mockContextManager() {
+    private ContextManager mockContextManager(final GlobalRuleConfiguration 
ruleConfig) {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        GlobalClockRule rule = mock(GlobalClockRule.class);
-        when(rule.getConfiguration()).thenReturn(new 
GlobalClockRuleConfiguration("TSO", "local", false, new Properties()));
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
+        when(mockedRule.getConfiguration()).thenReturn(ruleConfig);
+        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(mockedRule)));
         return result;
     }
 }


Reply via email to