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

totalo 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 6e75a3630d7 Add AlterTransactionRuleExecutorTest (#33102)
6e75a3630d7 is described below

commit 6e75a3630d75e2d22b34be6a700990a346d0631e
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Oct 3 13:02:27 2024 +0800

    Add AlterTransactionRuleExecutorTest (#33102)
---
 .../update/AlterSQLTranslatorRuleExecutorTest.java | 41 ++++++++++----
 .../update/AlterTransactionRuleExecutor.java       |  6 +-
 .../ShardingSphereTransactionManagerFixture.java   |  2 +-
 .../update/AlterTransactionRuleExecutorTest.java   | 65 ++++++++++++++--------
 4 files changed, 74 insertions(+), 40 deletions(-)

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 110987691fa..2992fbe4bee 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
@@ -18,47 +18,64 @@
 package org.apache.shardingsphere.sqltranslator.distsql.handler.update;
 
 import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
-import 
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.global.GlobalRuleDefinitionExecutor;
 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.sqltranslator.config.SQLTranslatorRuleConfiguration;
 import 
org.apache.shardingsphere.sqltranslator.distsql.statement.updateable.AlterSQLTranslatorRuleStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
 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 java.sql.SQLException;
+import java.util.Collections;
 import java.util.Properties;
 
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+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 {
     
     @Test
-    void assertExecute() {
+    void assertExecuteWithTrueOriginalSQLWhenTranslatingFailed() throws 
SQLException {
         AlterSQLTranslatorRuleStatement sqlStatement = new 
AlterSQLTranslatorRuleStatement(new AlgorithmSegment("Native", 
PropertiesBuilder.build(new Property("foo", "bar"))), true);
-        DistSQLUpdateExecuteEngine engine = new 
DistSQLUpdateExecuteEngine(sqlStatement, null, mockContextManager());
-        assertDoesNotThrow(engine::executeUpdate);
+        ContextManager contextManager = mockContextManager();
+        DistSQLUpdateExecuteEngine engine = new 
DistSQLUpdateExecuteEngine(sqlStatement, null, contextManager);
+        engine.executeUpdate();
+        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
+        
verify(metaDataManagerPersistService).alterGlobalRuleConfiguration(ArgumentMatchers.argThat(this::assertRuleConfiguration));
     }
     
     @Test
-    void assertExecuteWithNullOriginalSQLWhenTranslatingFailed() {
+    void assertExecuteWithNullOriginalSQLWhenTranslatingFailed() throws 
SQLException {
         AlterSQLTranslatorRuleStatement sqlStatement = new 
AlterSQLTranslatorRuleStatement(new AlgorithmSegment("Native", 
PropertiesBuilder.build(new Property("foo", "bar"))), null);
-        DistSQLUpdateExecuteEngine engine = new 
DistSQLUpdateExecuteEngine(sqlStatement, null, mockContextManager());
-        assertDoesNotThrow(engine::executeUpdate);
+        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 
SQLTranslatorRuleConfiguration actual) {
+        assertThat(actual.getProps().size(), is(1));
+        assertThat(actual.getProps().getProperty("foo"), is("bar"));
+        assertTrue(actual.isUseOriginalSQLWhenTranslatingFailed());
+        return true;
     }
     
-    @SuppressWarnings({"rawtypes", "unchecked"})
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         SQLTranslatorRule rule = mock(SQLTranslatorRule.class);
-        GlobalRuleDefinitionExecutor executor = 
mock(GlobalRuleDefinitionExecutor.class);
-        when(executor.getRuleClass()).thenReturn(SQLTranslatorRule.class);
         when(rule.getConfiguration()).thenReturn(new 
SQLTranslatorRuleConfiguration("NATIVE", new Properties(), true));
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(executor.getRuleClass())).thenReturn(rule);
+        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
         return result;
     }
 }
diff --git 
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
 
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
index 75b478b839a..bcd4427215c 100644
--- 
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
+++ 
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
@@ -39,11 +39,9 @@ public final class AlterTransactionRuleExecutor implements 
GlobalRuleDefinitionE
     public void checkBeforeUpdate(final AlterTransactionRuleStatement 
sqlStatement) {
         checkTransactionType(sqlStatement);
         TransactionType transactionType = 
TransactionType.valueOf(sqlStatement.getDefaultType().toUpperCase());
-        if (TransactionType.LOCAL == transactionType) {
-            return;
+        if (TransactionType.LOCAL != transactionType) {
+            checkTransactionManager(sqlStatement, transactionType);
         }
-        checkTransactionManager(sqlStatement, transactionType);
-        
     }
     
     private void checkTransactionType(final AlterTransactionRuleStatement 
statement) {
diff --git 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/fixture/ShardingSphereTransactionManagerFixture.java
 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/fixture/ShardingSphereTransactionManagerFixture.java
index 7b5cf94d2cd..95ef27e8f5d 100644
--- 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/fixture/ShardingSphereTransactionManagerFixture.java
+++ 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/fixture/ShardingSphereTransactionManagerFixture.java
@@ -71,7 +71,7 @@ public class ShardingSphereTransactionManagerFixture 
implements ShardingSphereDi
     
     @Override
     public boolean containsProviderType(final String providerType) {
-        return true;
+        return !"Invalid".equals(providerType);
     }
     
     @Override
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 e5ae1b94b16..877cd07fb2c 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,55 +17,74 @@
 
 package org.apache.shardingsphere.transaction.distsql.handler.update;
 
-import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
-import org.apache.shardingsphere.test.mock.AutoMockExtension;
-import org.apache.shardingsphere.test.mock.StaticMockSettings;
+import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
+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.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
 import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
-import 
org.apache.shardingsphere.transaction.distsql.handler.fixture.ShardingSphereTransactionManagerFixture;
 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.apache.shardingsphere.transaction.spi.ShardingSphereDistributedTransactionManager;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
+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.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;
 
-@ExtendWith(AutoMockExtension.class)
-@StaticMockSettings(ShardingSphereServiceLoader.class)
 class AlterTransactionRuleExecutorTest {
     
     @Test
-    void assertExecuteWithXA() {
-        
when(ShardingSphereServiceLoader.getServiceInstances(ShardingSphereDistributedTransactionManager.class)).thenReturn(Collections.singleton(new
 ShardingSphereTransactionManagerFixture()));
-        AlterTransactionRuleExecutor executor = new 
AlterTransactionRuleExecutor();
+    void assertExecuteUpdateWithInvalidTransactionType() {
+        AlterTransactionRuleStatement sqlStatement = new 
AlterTransactionRuleStatement("Invalid", new TransactionProviderSegment("", new 
Properties()));
+        assertThrows(InvalidRuleConfigurationException.class, () -> new 
DistSQLUpdateExecuteEngine(sqlStatement, null, 
mockContextManager()).executeUpdate());
+    }
+    
+    @Test
+    void assertExecuteUpdateWithNotExistedDistributedTransactionType() {
+        AlterTransactionRuleStatement sqlStatement = new 
AlterTransactionRuleStatement("BASE", new TransactionProviderSegment("", new 
Properties()));
+        assertThrows(InvalidRuleConfigurationException.class, () -> new 
DistSQLUpdateExecuteEngine(sqlStatement, null, 
mockContextManager()).executeUpdate());
+    }
+    
+    @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"))));
-        TransactionRule rule = mock(TransactionRule.class);
-        executor.setRule(rule);
-        TransactionRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
-        assertThat(actual.getDefaultType(), is("XA"));
-        assertThat(actual.getProviderType(), is("Atomikos"));
+        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;
     }
     
-    @Test
-    void assertExecuteWithLocal() {
-        AlterTransactionRuleExecutor executor = new 
AlterTransactionRuleExecutor();
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         TransactionRule rule = mock(TransactionRule.class);
-        executor.setRule(rule);
-        TransactionRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(new 
AlterTransactionRuleStatement("LOCAL", new TransactionProviderSegment("", new 
Properties())));
-        assertThat(actual.getDefaultType(), is("LOCAL"));
-        assertThat(actual.getProviderType(), is(""));
+        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(rule)));
+        return result;
     }
 }

Reply via email to