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;
}
}