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 4d7a8bd Add rules assertions for SpringBootStarterTest (#7023)
4d7a8bd is described below
commit 4d7a8bd8dea7e022c41771b5308f20c3273379ac
Author: Yanjie Zhou <[email protected]>
AuthorDate: Tue Aug 25 15:20:13 2020 +0800
Add rules assertions for SpringBootStarterTest (#7023)
* Add sharding rule assertion
* Add encrypt rule assertion
* Add master-slave rule assertion
Add shadow rule assertion
---
.../spring/boot/SpringBootStarterTest.java | 67 ++++++++++++++++++++--
.../test/resources/application-common.properties | 11 +++-
2 files changed, 71 insertions(+), 7 deletions(-)
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
index 407a000..650dadd 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
@@ -17,13 +17,23 @@
package org.apache.shardingsphere.spring.boot;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
import
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.datanode.DataNode;
+import org.apache.shardingsphere.infra.datanode.DataNodeUtil;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import
org.apache.shardingsphere.masterslave.algorithm.RandomMasterSlaveLoadBalanceAlgorithm;
+import org.apache.shardingsphere.masterslave.rule.MasterSlaveDataSourceRule;
import org.apache.shardingsphere.masterslave.rule.MasterSlaveRule;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
+import
org.apache.shardingsphere.sharding.algorithm.sharding.inline.InlineShardingAlgorithm;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.sharding.rule.TableRule;
+import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm;
+import org.apache.shardingsphere.sharding.strategy.ShardingStrategy;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -32,9 +42,16 @@ import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -57,7 +74,7 @@ public class SpringBootStarterTest {
@Test
public void assertRules() {
Collection<ShardingSphereRule> rules =
dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getRules();
- assertThat(rules.size(), is(2));
+ assertThat(rules.size(), is(4));
for (ShardingSphereRule each : rules) {
if (each instanceof ShardingRule) {
assertShardingRule((ShardingRule) each);
@@ -72,19 +89,59 @@ public class SpringBootStarterTest {
}
private void assertShardingRule(final ShardingRule rule) {
- // TODO
+ assertThat(rule.getDataSourceNames(), is(Sets.newHashSet("ds_0",
"ds_1")));
+ Map<String, ShardingAlgorithm> shardingAlgorithmMap =
rule.getShardingAlgorithms();
+ assertNotNull(shardingAlgorithmMap);
+ InlineShardingAlgorithm databaseShardingAlgorithm =
InlineShardingAlgorithm.class.cast(shardingAlgorithmMap.get("databaseShardingAlgorithm"));
+
assertThat(databaseShardingAlgorithm.getProps().getProperty("algorithm.expression"),
is("ds_$->{user_id % 2}"));
+ InlineShardingAlgorithm orderTableShardingAlgorithm =
InlineShardingAlgorithm.class.cast(shardingAlgorithmMap.get("orderTableShardingAlgorithm"));
+
assertThat(orderTableShardingAlgorithm.getProps().getProperty("algorithm.expression"),
is("t_order_$->{order_id % 2}"));
+ Collection<TableRule> tableRules = rule.getTableRules();
+ assertNotNull(tableRules);
+ assertThat(tableRules.size(), equalTo(1));
+ TableRule tableRule = tableRules.iterator().next();
+ assertThat(tableRule.getLogicTable(), is("t_order"));
+ List<DataNode> dataNodes = Arrays.asList(new
DataNode("ds_0.t_order_0"),
+ new DataNode("ds_0.t_order_1"), new
DataNode("ds_1.t_order_0"), new DataNode("ds_1.t_order_1"));
+ assertThat(tableRule.getActualDataNodes(), is(dataNodes));
+ assertThat(tableRule.getActualDatasourceNames(),
is(Sets.newHashSet("ds_0", "ds_1")));
+ assertThat(tableRule.getDataNodeGroups(),
is(DataNodeUtil.getDataNodeGroups(dataNodes)));
+ assertThat(tableRule.getDatasourceToTablesMap(),
is(ImmutableMap.of("ds_1",
+ Sets.newHashSet("t_order_0", "t_order_1"), "ds_0",
Sets.newHashSet("t_order_0", "t_order_1"))));
+ ShardingStrategy databaseShardingStrategy =
tableRule.getDatabaseShardingStrategy();
+ assertNotNull(databaseShardingStrategy);
+ assertThat(databaseShardingStrategy.getShardingColumns(),
is(Sets.newTreeSet(Collections.singleton("user_id"))));
+
assertThat(databaseShardingStrategy.getShardingAlgorithm().getProps().getProperty("algorithm.expression"),
is("ds_$->{user_id % 2}"));
+ ShardingStrategy tableShardingStrategy =
tableRule.getTableShardingStrategy();
+ assertNotNull(tableShardingStrategy);
+ assertThat(tableShardingStrategy.getShardingColumns(),
is(Sets.newTreeSet(Collections.singleton("order_id"))));
+
assertThat(tableShardingStrategy.getShardingAlgorithm().getProps().getProperty("algorithm.expression"),
is("t_order_$->{order_id % 2}"));
}
private void assertMasterSlaveRule(final MasterSlaveRule rule) {
- // TODO
+ assertThat(rule.getDataSourceMapper(),
is(Collections.singletonMap("ds_ms", Arrays.asList("ds_master", "ds_slave_0",
"ds_slave_1"))));
+ MasterSlaveDataSourceRule masterSlaveDataSourceRule =
rule.getSingleDataSourceRule();
+ assertNotNull(masterSlaveDataSourceRule);
+ assertThat(masterSlaveDataSourceRule.getName(), is("ds_ms"));
+ assertThat(masterSlaveDataSourceRule.getMasterDataSourceName(),
is("ds_master"));
+ assertThat(masterSlaveDataSourceRule.getSlaveDataSourceNames(),
is(Arrays.asList("ds_slave_0", "ds_slave_1")));
+ assertThat(masterSlaveDataSourceRule.getLoadBalancer(),
instanceOf(RandomMasterSlaveLoadBalanceAlgorithm.class));
+ assertThat(masterSlaveDataSourceRule.getDataSourceMapper(),
is(Collections.singletonMap("ds_ms", Arrays.asList("ds_master", "ds_slave_0",
"ds_slave_1"))));
}
private void assertEncryptRule(final EncryptRule rule) {
- // TODO
+ assertThat(rule.getEncryptTableNames(),
is(Sets.newLinkedHashSet(Arrays.asList("t_order"))));
+ assertThat(rule.getCipherColumn("t_order", "pwd"), is("pwd_cipher"));
+ assertThat(rule.getAssistedQueryColumns("t_order"),
is(Collections.singletonList("pwd_assisted_query_cipher")));
+ assertThat(rule.getLogicAndCipherColumns("t_order"),
is(Collections.singletonMap("pwd", "pwd_cipher")));
+ assertThat(rule.getLogicColumnOfCipher("t_order", "pwd_cipher"),
is("pwd"));
+ assertThat(rule.getEncryptValues("t_order", "pwd",
Collections.singletonList("pwd_plain")),
is(Collections.singletonList("V/RkV1+dVv80Y3csT3cR4g==")));
+ assertThat(rule.getAssistedQueryAndPlainColumns("t_order"),
is(Arrays.asList("pwd_assisted_query_cipher", "pwd_plain")));
}
private void assertShadowRule(final ShadowRule rule) {
- // TODO
+ assertThat(rule.getColumn(), is("shadow"));
+ assertThat(rule.getShadowMappings(), is(Collections.singletonMap("ds",
"shadow_ds")));
}
@Test
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application-common.properties
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application-common.properties
index b84d543..78c2097 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application-common.properties
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application-common.properties
@@ -20,7 +20,12 @@ spring.shardingsphere.datasource.names=ds_${0..1}
spring.shardingsphere.datasource.ds_0.type=org.apache.shardingsphere.test.MockedDataSource
spring.shardingsphere.datasource.ds_1.type=org.apache.shardingsphere.test.MockedDataSource
-# TODO add master-slave config
+spring.shardingsphere.rules.master-slave.load-balancers.random.type=RANDOM
+
+spring.shardingsphere.rules.master-slave.data-sources.ds_ms.master-data-source-name=ds_master
+spring.shardingsphere.rules.master-slave.data-sources.ds_ms.slave-data-source-names=ds_slave_0,ds_slave_1
+spring.shardingsphere.rules.master-slave.data-sources.ds_ms.load-balancer-name=random
+
spring.shardingsphere.rules.sharding.sharding-algorithms.databaseShardingAlgorithm.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.databaseShardingAlgorithm.props.algorithm.expression=ds_$->{user_id
% 2}
@@ -39,10 +44,12 @@
spring.shardingsphere.rules.encrypt.encryptors.aesEncryptor.type=AES
spring.shardingsphere.rules.encrypt.encryptors.aesEncryptor.props.aes.key.value=123456
spring.shardingsphere.rules.encrypt.tables.t_order.columns.pwd.cipher-column=pwd_cipher
+spring.shardingsphere.rules.encrypt.tables.t_order.columns.pwd.assisted-query-column=pwd_assisted_query_cipher
spring.shardingsphere.rules.encrypt.tables.t_order.columns.pwd.plain-column=pwd_plain
spring.shardingsphere.rules.encrypt.tables.t_order.columns.pwd.encryptor-name=aesEncryptor
-# TODO add shadow config
+spring.shardingsphere.rules.shadow.column=shadow
+spring.shardingsphere.rules.shadow.shadowMappings.ds=shadow_ds
spring.shardingsphere.props.sql.show=true
spring.shardingsphere.props.executor.size=10