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 fb7688e4867 Add test cases on
ReadwriteSplittingRuleConfigurationChecker (#33581)
fb7688e4867 is described below
commit fb7688e4867b49cb8a9ba6c5b3a820f338576149
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Nov 7 14:04:28 2024 +0800
Add test cases on ReadwriteSplittingRuleConfigurationChecker (#33581)
---
...writeSplittingRuleConfigurationCheckerTest.java | 70 ++++++++++++++--------
1 file changed, 44 insertions(+), 26 deletions(-)
diff --git
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
index 7e8e3fc4034..7f4e6ae96de 100644
---
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
+++
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
@@ -39,25 +39,29 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
+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;
+@SuppressWarnings({"rawtypes", "unchecked"})
class ReadwriteSplittingRuleConfigurationCheckerTest {
- @SuppressWarnings({"rawtypes", "unchecked"})
@Test
void assertInvalidCheck() {
- ReadwriteSplittingRuleConfiguration config =
createInvalidConfiguration();
- RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(config.getClass())).get(config.getClass());
-
assertThrows(MissingRequiredReadwriteSplittingActualDataSourceException.class,
() -> checker.check("test", config, Collections.emptyMap(),
Collections.emptyList()));
+ ReadwriteSplittingRuleConfiguration ruleConfig =
createInvalidRuleConfiguration();
+ RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+
assertThrows(MissingRequiredReadwriteSplittingActualDataSourceException.class,
() -> checker.check("test", ruleConfig, Collections.emptyMap(),
Collections.emptyList()));
}
- private ReadwriteSplittingRuleConfiguration createInvalidConfiguration() {
+ private ReadwriteSplittingRuleConfiguration
createInvalidRuleConfiguration() {
ReadwriteSplittingRuleConfiguration result =
mock(ReadwriteSplittingRuleConfiguration.class);
ReadwriteSplittingDataSourceGroupRuleConfiguration
dataSourceGroupConfig =
mock(ReadwriteSplittingDataSourceGroupRuleConfiguration.class);
when(dataSourceGroupConfig.getName()).thenReturn("readwrite_ds");
@@ -65,50 +69,46 @@ class ReadwriteSplittingRuleConfigurationCheckerTest {
return result;
}
- @SuppressWarnings({"rawtypes", "unchecked"})
@Test
void assertCheckWhenConfigInvalidWriteDataSource() {
- ReadwriteSplittingRuleConfiguration config =
mock(ReadwriteSplittingRuleConfiguration.class);
+ ReadwriteSplittingRuleConfiguration ruleConfig =
mock(ReadwriteSplittingRuleConfiguration.class);
List<ReadwriteSplittingDataSourceGroupRuleConfiguration> configs =
Arrays.asList(createDataSourceGroupRuleConfiguration(
"write_ds_0", Arrays.asList("read_ds_0", "read_ds_1")),
createDataSourceGroupRuleConfiguration("write_ds_2", Arrays.asList("read_ds_0",
"read_ds_1")));
- when(config.getDataSourceGroups()).thenReturn(configs);
- RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(config.getClass())).get(config.getClass());
-
assertThrows(ReadwriteSplittingActualDataSourceNotFoundException.class, () ->
checker.check("test", config, mockDataSources(), Collections.emptyList()));
+ when(ruleConfig.getDataSourceGroups()).thenReturn(configs);
+ RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+
assertThrows(ReadwriteSplittingActualDataSourceNotFoundException.class, () ->
checker.check("test", ruleConfig, mockDataSources(), Collections.emptyList()));
}
- @SuppressWarnings({"rawtypes", "unchecked"})
@Test
void assertCheckWhenConfigInvalidReadDataSource() {
- ReadwriteSplittingRuleConfiguration config =
mock(ReadwriteSplittingRuleConfiguration.class);
+ ReadwriteSplittingRuleConfiguration ruleConfig =
mock(ReadwriteSplittingRuleConfiguration.class);
List<ReadwriteSplittingDataSourceGroupRuleConfiguration> configs =
Arrays.asList(createDataSourceGroupRuleConfiguration(
"write_ds_0", Arrays.asList("read_ds_0", "read_ds_0")),
createDataSourceGroupRuleConfiguration("write_ds_1", Arrays.asList("read_ds_0",
"read_ds_0")));
- when(config.getDataSourceGroups()).thenReturn(configs);
- RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(config.getClass())).get(config.getClass());
-
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class, () ->
checker.check("test", config, mockDataSources(), Collections.emptyList()));
+ when(ruleConfig.getDataSourceGroups()).thenReturn(configs);
+ RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+
assertThrows(DuplicateReadwriteSplittingActualDataSourceException.class, () ->
checker.check("test", ruleConfig, mockDataSources(), Collections.emptyList()));
}
- @SuppressWarnings({"rawtypes", "unchecked"})
@Test
void assertCheckWeightLoadBalanceInvalidDataSourceName() {
- ReadwriteSplittingRuleConfiguration config =
mock(ReadwriteSplittingRuleConfiguration.class);
+ ReadwriteSplittingRuleConfiguration ruleConfig =
mock(ReadwriteSplittingRuleConfiguration.class);
Collection<ReadwriteSplittingDataSourceGroupRuleConfiguration> configs
= Collections.singleton(createDataSourceGroupRuleConfiguration("write_ds_0",
Arrays.asList("read_ds_0", "read_ds_1")));
- when(config.getDataSourceGroups()).thenReturn(configs);
+ when(ruleConfig.getDataSourceGroups()).thenReturn(configs);
AlgorithmConfiguration algorithm = new
AlgorithmConfiguration("WEIGHT", PropertiesBuilder.build(new
Property("read_ds_2", "1"), new Property("read_ds_1", "2")));
-
when(config.getLoadBalancers()).thenReturn(Collections.singletonMap("weight_ds",
algorithm));
- RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(config.getClass())).get(config.getClass());
- assertThrows(AlgorithmInitializationException.class, () ->
checker.check("test", config, mockDataSources(), Collections.emptyList()));
+
when(ruleConfig.getLoadBalancers()).thenReturn(Collections.singletonMap("weight_ds",
algorithm));
+ RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+ assertThrows(AlgorithmInitializationException.class, () ->
checker.check("test", ruleConfig, mockDataSources(), Collections.emptyList()));
}
- @SuppressWarnings({"rawtypes", "unchecked"})
@Test
void assertCheckWhenConfigOtherRulesDatasource() {
- ReadwriteSplittingRuleConfiguration config =
createContainsOtherRulesDatasourceConfiguration();
- RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(config.getClass())).get(config.getClass());
+ ReadwriteSplittingRuleConfiguration ruleConfig =
createContainsOtherRulesDatasourceConfiguration();
+ RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
ShardingSphereRule rule = mock(ShardingSphereRule.class);
DataSourceMapperRuleAttribute ruleAttribute =
mock(DataSourceMapperRuleAttribute.class, RETURNS_DEEP_STUBS);
when(ruleAttribute.getDataSourceMapper().containsKey("otherDatasourceName")).thenReturn(true);
when(rule.getAttributes()).thenReturn(new
RuleAttributes(ruleAttribute));
- checker.check("test", config, mockDataSources(),
Collections.singleton(rule));
+ checker.check("test", ruleConfig, mockDataSources(),
Collections.singleton(rule));
}
private ReadwriteSplittingRuleConfiguration
createContainsOtherRulesDatasourceConfiguration() {
@@ -131,11 +131,29 @@ class ReadwriteSplittingRuleConfigurationCheckerTest {
}
private Map<String, DataSource> mockDataSources() {
- Map<String, DataSource> result = new LinkedHashMap<>(2, 1F);
+ Map<String, DataSource> result = new LinkedHashMap<>(4, 1F);
result.put("read_ds_0", new MockedDataSource());
result.put("read_ds_1", new MockedDataSource());
result.put("write_ds_0", new MockedDataSource());
result.put("write_ds_1", new MockedDataSource());
return result;
}
+
+ @Test
+ void assertGetRequiredDataSourceNames() {
+ ReadwriteSplittingDataSourceGroupRuleConfiguration
dataSourceGroupConfig = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
+ "foo_group", "write_ds", Arrays.asList("read_ds0",
"read_ds1"), "foo_algo");
+ ReadwriteSplittingRuleConfiguration ruleConfig = new
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceGroupConfig),
Collections.emptyMap());
+ RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+ assertThat(checker.getRequiredDataSourceNames(ruleConfig), is(new
LinkedHashSet<>(Arrays.asList("write_ds", "read_ds0", "read_ds1"))));
+ }
+
+ @Test
+ void assertGetRequiredDataSourceNamesWhenEmpty() {
+ ReadwriteSplittingDataSourceGroupRuleConfiguration
dataSourceGroupConfig = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
+ "foo_group", null, Collections.emptyList(), "foo_algo");
+ ReadwriteSplittingRuleConfiguration ruleConfig = new
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceGroupConfig),
Collections.emptyMap());
+ RuleConfigurationChecker checker =
OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class,
Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+ assertTrue(checker.getRequiredDataSourceNames(ruleConfig).isEmpty());
+ }
}