This is an automated email from the ASF dual-hosted git repository.
yx9o 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 5388e8cc0f5 Add more test cases on
QualifiedReadwriteSplittingTransactionalDataSourceRouter (#33594)
5388e8cc0f5 is described below
commit 5388e8cc0f5533dafd16f08cabba22e44e68446e
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Nov 8 16:47:16 2024 +0800
Add more test cases on
QualifiedReadwriteSplittingTransactionalDataSourceRouter (#33594)
---
...SplittingTransactionalDataSourceRouterTest.java | 58 ++++++++++++----------
1 file changed, 31 insertions(+), 27 deletions(-)
diff --git
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/qualified/type/QualifiedReadwriteSplittingTransactionalDataSourceRouterTest.java
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/qualified/type/QualifiedReadwriteSplittingTransactionalDataSourceRouterTest.java
index 30f72d35fac..1e3225a7975 100644
---
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/qualified/type/QualifiedReadwriteSplittingTransactionalDataSourceRouterTest.java
+++
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/qualified/type/QualifiedReadwriteSplittingTransactionalDataSourceRouterTest.java
@@ -20,14 +20,10 @@ package
org.apache.shardingsphere.readwritesplitting.route.qualified.type;
import
org.apache.shardingsphere.infra.algorithm.loadbalancer.round.robin.RoundRobinLoadBalanceAlgorithm;
import org.apache.shardingsphere.infra.hint.HintValueContext;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
-import
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
import
org.apache.shardingsphere.readwritesplitting.config.rule.ReadwriteSplittingDataSourceGroupRuleConfiguration;
-import
org.apache.shardingsphere.readwritesplitting.transaction.TransactionalReadQueryStrategy;
import
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceGroupRule;
+import
org.apache.shardingsphere.readwritesplitting.transaction.TransactionalReadQueryStrategy;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Arrays;
import java.util.Collections;
@@ -35,37 +31,45 @@ import java.util.Collections;
import static org.hamcrest.CoreMatchers.is;
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.mock;
-import static org.mockito.Mockito.when;
-@ExtendWith(MockitoExtension.class)
class QualifiedReadwriteSplittingTransactionalDataSourceRouterTest {
- @Mock
- private HintValueContext hintValueContext;
+ @Test
+ void assertIsQualified() {
+ assertFalse(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(new
ConnectionContext(Collections::emptySet)).isQualified(null, null,
mock(HintValueContext.class)));
+ }
+
+ @Test
+ void assertRouteWithFixedAndWithoutReadWriteSplitReplicaRoute() {
+ ReadwriteSplittingDataSourceGroupRuleConfiguration
dataSourceGroupConfig = createDataSourceGroupRuleConfiguration();
+ ReadwriteSplittingDataSourceGroupRule rule = new
ReadwriteSplittingDataSourceGroupRule(dataSourceGroupConfig,
TransactionalReadQueryStrategy.FIXED, new RoundRobinLoadBalanceAlgorithm());
+ assertThat(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(new
ConnectionContext(Collections::emptySet)).route(rule), is("read_ds0"));
+ }
+
+ @Test
+ void assertRouteWithFixedAndWithReadWriteSplitReplicaRoute() {
+ ReadwriteSplittingDataSourceGroupRuleConfiguration
dataSourceGroupConfig = createDataSourceGroupRuleConfiguration();
+ ReadwriteSplittingDataSourceGroupRule rule = new
ReadwriteSplittingDataSourceGroupRule(dataSourceGroupConfig,
TransactionalReadQueryStrategy.FIXED, new RoundRobinLoadBalanceAlgorithm());
+ ConnectionContext connectionContext = new
ConnectionContext(Collections::emptySet);
+
connectionContext.getTransactionContext().setReadWriteSplitReplicaRoute("read_ds1");
+ assertThat(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(connectionContext).route(rule),
is("read_ds1"));
+ }
@Test
- void assertWriteRouteTransaction() {
- ConnectionContext connectionContext = mock(ConnectionContext.class);
- TransactionConnectionContext transactionConnectionContext =
mock(TransactionConnectionContext.class);
-
when(connectionContext.getTransactionContext()).thenReturn(transactionConnectionContext);
-
when(connectionContext.getTransactionContext().isInTransaction()).thenReturn(Boolean.TRUE);
- assertTrue(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(connectionContext).isQualified(null,
null, hintValueContext));
-
when(connectionContext.getTransactionContext().isInTransaction()).thenReturn(Boolean.FALSE);
- assertFalse(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(connectionContext).isQualified(null,
null, hintValueContext));
+ void assertRouteWithDynamic() {
+ ReadwriteSplittingDataSourceGroupRuleConfiguration
dataSourceGroupConfig = createDataSourceGroupRuleConfiguration();
+ ReadwriteSplittingDataSourceGroupRule rule = new
ReadwriteSplittingDataSourceGroupRule(dataSourceGroupConfig,
TransactionalReadQueryStrategy.DYNAMIC, new RoundRobinLoadBalanceAlgorithm());
+ assertThat(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(new
ConnectionContext(Collections::emptySet)).route(rule), is("read_ds0"));
}
@Test
- void assertRoute() {
- ReadwriteSplittingDataSourceGroupRuleConfiguration
dataSourceGroupConfig = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
- "test_config", "write_ds", Arrays.asList("read_ds_0",
"read_ds_1"), null);
- ReadwriteSplittingDataSourceGroupRule rule;
- rule = new
ReadwriteSplittingDataSourceGroupRule(dataSourceGroupConfig,
TransactionalReadQueryStrategy.PRIMARY, null);
+ void assertRouteWithPrimary() {
+ ReadwriteSplittingDataSourceGroupRule rule = new
ReadwriteSplittingDataSourceGroupRule(createDataSourceGroupRuleConfiguration(),
TransactionalReadQueryStrategy.PRIMARY, null);
assertThat(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(new
ConnectionContext(Collections::emptySet)).route(rule), is("write_ds"));
- rule = new
ReadwriteSplittingDataSourceGroupRule(dataSourceGroupConfig,
TransactionalReadQueryStrategy.FIXED, new RoundRobinLoadBalanceAlgorithm());
- assertThat(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(new
ConnectionContext(Collections::emptySet)).route(rule), is("read_ds_0"));
- rule = new
ReadwriteSplittingDataSourceGroupRule(dataSourceGroupConfig,
TransactionalReadQueryStrategy.DYNAMIC, new RoundRobinLoadBalanceAlgorithm());
- assertThat(new
QualifiedReadwriteSplittingTransactionalDataSourceRouter(new
ConnectionContext(Collections::emptySet)).route(rule), is("read_ds_0"));
+ }
+
+ private ReadwriteSplittingDataSourceGroupRuleConfiguration
createDataSourceGroupRuleConfiguration() {
+ return new
ReadwriteSplittingDataSourceGroupRuleConfiguration("foo_group", "write_ds",
Arrays.asList("read_ds0", "read_ds1"), null);
}
}