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 e4079b0b80b Add more test cases on TransactionRule (#33091)
e4079b0b80b is described below

commit e4079b0b80b871206395a818d6b7ed57d499492f
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Oct 1 23:44:02 2024 +0800

    Add more test cases on TransactionRule (#33091)
---
 .../transaction/rule/TransactionRuleTest.java      | 68 ++++++++++++++++++----
 1 file changed, 58 insertions(+), 10 deletions(-)

diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
index 95c55da7d40..4d1ab1ab350 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
@@ -19,23 +19,32 @@ package org.apache.shardingsphere.transaction.rule;
 
 import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
+import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateStatement;
 import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
+import org.apache.shardingsphere.transaction.ConnectionTransaction;
 import org.apache.shardingsphere.transaction.api.TransactionType;
 import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
 import 
org.apache.shardingsphere.transaction.core.fixture.ShardingSphereTransactionManagerFixture;
 import org.junit.jupiter.api.Test;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+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.when;
@@ -49,21 +58,67 @@ class TransactionRuleTest {
     
     @Test
     void assertRefreshWithNotDatabaseChange() {
-        TransactionRule actual = new 
TransactionRule(createTransactionRuleConfiguration(), Collections.emptyMap());
+        TransactionRule actual = new TransactionRule(new 
TransactionRuleConfiguration("XA", "Atomikos", new Properties()), 
Collections.emptyMap());
         actual.refresh(Collections.singletonMap(BAR_DB, createAddDatabase()), 
GlobalRuleChangedType.SCHEMA_CHANGED);
         
assertThat(actual.getResource().getTransactionManager(TransactionType.XA), 
instanceOf(ShardingSphereTransactionManagerFixture.class));
     }
     
     @Test
     void assertRefreshWithDatabaseChange() {
-        TransactionRule actual = new 
TransactionRule(createTransactionRuleConfiguration(), 
Collections.singletonMap(FOO_DB, createDatabase()));
+        TransactionRule actual = new TransactionRule(new 
TransactionRuleConfiguration("XA", "Atomikos", new Properties()), 
Collections.singletonMap(FOO_DB, createDatabase()));
         actual.refresh(Collections.singletonMap(BAR_DB, createAddDatabase()), 
GlobalRuleChangedType.DATABASE_CHANGED);
         
assertThat(actual.getResource().getTransactionManager(TransactionType.XA), 
instanceOf(ShardingSphereTransactionManagerFixture.class));
     }
     
+    @Test
+    void assertIsNotImplicitCommitTransactionWhenNotAutoCommit() {
+        assertFalse(new TransactionRule(new TransactionRuleConfiguration("XA", 
"Atomikos", new Properties()), Collections.emptyMap())
+                .isImplicitCommitTransaction(mock(ExecutionContext.class), 
mock(ConnectionTransaction.class), false));
+    }
+    
+    @Test
+    void 
assertIsNotImplicitCommitTransactionWhenDefaultTypeIsNotDistributedTransaction()
 {
+        assertFalse(new TransactionRule(new 
TransactionRuleConfiguration("LOCAL", null, new Properties()), 
Collections.emptyMap())
+                .isImplicitCommitTransaction(mock(ExecutionContext.class), 
mock(ConnectionTransaction.class), true));
+    }
+    
+    @Test
+    void assertIsNotImplicitCommitTransactionWhenInDistributedTransaction() {
+        ConnectionTransaction connectionTransaction = 
mock(ConnectionTransaction.class);
+        
when(connectionTransaction.isInDistributedTransaction()).thenReturn(true);
+        assertFalse(new TransactionRule(new TransactionRuleConfiguration("XA", 
null, new Properties()), Collections.emptyMap())
+                .isImplicitCommitTransaction(mock(ExecutionContext.class), 
connectionTransaction, true));
+    }
+    
+    @Test
+    void assertIsNotImplicitCommitTransactionWhenQuery() {
+        ExecutionContext executionContext = mock(ExecutionContext.class, 
RETURNS_DEEP_STUBS);
+        
when(executionContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(SelectStatement.class));
+        assertFalse(new TransactionRule(new TransactionRuleConfiguration("XA", 
null, new Properties()), Collections.emptyMap())
+                .isImplicitCommitTransaction(executionContext, 
mock(ConnectionTransaction.class), true));
+    }
+    
+    @Test
+    void assertIsNotImplicitCommitTransactionForSingleExecutionUnit() {
+        ExecutionContext executionContext = mock(ExecutionContext.class, 
RETURNS_DEEP_STUBS);
+        
when(executionContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(UpdateStatement.class));
+        
when(executionContext.getExecutionUnits()).thenReturn(Collections.singleton(mock(ExecutionUnit.class)));
+        assertFalse(new TransactionRule(new TransactionRuleConfiguration("XA", 
null, new Properties()), Collections.emptyMap())
+                .isImplicitCommitTransaction(executionContext, 
mock(ConnectionTransaction.class), true));
+    }
+    
+    @Test
+    void assertIsImplicitCommitTransaction() {
+        ExecutionContext executionContext = mock(ExecutionContext.class, 
RETURNS_DEEP_STUBS);
+        
when(executionContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(UpdateStatement.class));
+        
when(executionContext.getExecutionUnits()).thenReturn(Arrays.asList(mock(ExecutionUnit.class),
 mock(ExecutionUnit.class)));
+        assertTrue(new TransactionRule(new TransactionRuleConfiguration("XA", 
null, new Properties()), Collections.emptyMap())
+                .isImplicitCommitTransaction(executionContext, 
mock(ConnectionTransaction.class), true));
+    }
+    
     @Test
     void assertClose() {
-        TransactionRule actual = new 
TransactionRule(createTransactionRuleConfiguration(), 
Collections.singletonMap(FOO_DB, createDatabase()));
+        TransactionRule actual = new TransactionRule(new 
TransactionRuleConfiguration("XA", "Atomikos", new Properties()), 
Collections.singletonMap(FOO_DB, createDatabase()));
         actual.close();
         
assertThat(actual.getResource().getTransactionManager(TransactionType.XA), 
instanceOf(ShardingSphereTransactionManagerFixture.class));
     }
@@ -109,11 +164,4 @@ class TransactionRuleTest {
         when(result.getStorageUnits()).thenReturn(storageUnits);
         return result;
     }
-    
-    private TransactionRuleConfiguration createTransactionRuleConfiguration() {
-        TransactionRuleConfiguration result = 
mock(TransactionRuleConfiguration.class);
-        when(result.getDefaultType()).thenReturn("XA");
-        when(result.getProviderType()).thenReturn("Atomikos");
-        return result;
-    }
 }

Reply via email to