From c0047eb18b80f4791e6dae8353395ca3cc94abe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=99=93=E5=85=89?= Date: Fri, 16 Nov 2018 21:34:30 +0800 Subject: [PATCH] add spring boot start orchestration test case for broadcast table --- .../OrchestrationSpringBootShardingTest.java | 82 +++++++++++++++++++ .../resources/application-sharding.properties | 2 + .../OrchestrationShardingNamespaceTest.java | 16 ++++ .../namespace/shardingDataSourceNamespace.xml | 31 +++++++ .../META-INF/rdb/shardingOrchestration.xml | 2 + 5 files changed, 133 insertions(+) diff --git a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootShardingTest.java b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootShardingTest.java index 03db347deb..19bd9e52a3 100644 --- a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootShardingTest.java +++ b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootShardingTest.java @@ -20,6 +20,10 @@ package io.shardingsphere.shardingjdbc.spring.boot.type; import io.shardingsphere.api.ConfigMapContext; import io.shardingsphere.core.constant.properties.ShardingProperties; import io.shardingsphere.core.constant.properties.ShardingPropertiesConstant; +import io.shardingsphere.core.routing.strategy.inline.InlineShardingStrategy; +import io.shardingsphere.core.rule.DataNode; +import io.shardingsphere.core.rule.ShardingRule; +import io.shardingsphere.core.rule.TableRule; import io.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; import io.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource; import io.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationShardingDataSource; @@ -37,9 +41,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import javax.sql.DataSource; import java.lang.reflect.Field; +import java.util.LinkedList; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -76,6 +82,82 @@ public class OrchestrationSpringBootShardingTest { assertThat((Integer) shardingProperties.getValue(ShardingPropertiesConstant.EXECUTOR_SIZE), is(100)); } + @Test + public void assertWithShardingDataSourceNames() { + ShardingDataSource shardingDataSource = getFieldValue("dataSource", OrchestrationShardingDataSource.class, dataSource); + ShardingContext shardingContext = getFieldValue("shardingContext", ShardingDataSource.class, shardingDataSource); + ShardingRule shardingRule = shardingContext.getShardingRule(); + assertThat(shardingRule.getShardingDataSourceNames().getDataSourceNames().size(), is(3)); + assertTrue(shardingRule.getShardingDataSourceNames().getDataSourceNames().contains("ds")); + assertTrue(shardingRule.getShardingDataSourceNames().getDataSourceNames().contains("ds_0")); + assertTrue(shardingRule.getShardingDataSourceNames().getDataSourceNames().contains("ds_1")); + } + + @Test + public void assertWithTableRules() { + ShardingDataSource shardingDataSource = getFieldValue("dataSource", OrchestrationShardingDataSource.class, dataSource); + ShardingContext shardingContext = getFieldValue("shardingContext", ShardingDataSource.class, shardingDataSource); + ShardingRule shardingRule = shardingContext.getShardingRule(); + assertThat(shardingRule.getTableRules().size(), is(2)); + TableRule tableRule1 = ((LinkedList) shardingRule.getTableRules()).get(0); + assertThat(tableRule1.getLogicTable(), is("t_order_item")); + assertThat(tableRule1.getActualDataNodes().size(), is(4)); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_0", "t_order_item_0"))); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_0", "t_order_item_1"))); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_1", "t_order_item_0"))); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_1", "t_order_item_1"))); + assertThat(tableRule1.getTableShardingStrategy(), instanceOf(InlineShardingStrategy.class)); + assertThat(tableRule1.getTableShardingStrategy().getShardingColumns().iterator().next(), is("order_id")); + assertThat(tableRule1.getGenerateKeyColumn(), is("order_item_id")); + TableRule tableRule2 = ((LinkedList) shardingRule.getTableRules()).get(1); + assertThat(tableRule2.getLogicTable(), is("t_order")); + assertThat(tableRule2.getActualDataNodes().size(), is(4)); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_0", "t_order_0"))); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_0", "t_order_1"))); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_1", "t_order_0"))); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_1", "t_order_1"))); + assertThat(tableRule1.getTableShardingStrategy(), instanceOf(InlineShardingStrategy.class)); + assertThat(tableRule1.getTableShardingStrategy().getShardingColumns().iterator().next(), is("order_id")); + assertThat(tableRule2.getGenerateKeyColumn(), is("order_id")); + } + + @Test + public void assertWithBindingTableRules() { + ShardingDataSource shardingDataSource = getFieldValue("dataSource", OrchestrationShardingDataSource.class, dataSource); + ShardingContext shardingContext = getFieldValue("shardingContext", ShardingDataSource.class, shardingDataSource); + ShardingRule shardingRule = shardingContext.getShardingRule(); + assertThat(shardingRule.getBindingTableRules().size(), is(2)); + TableRule tableRule1 = ((LinkedList) shardingRule.getTableRules()).get(0); + assertThat(tableRule1.getLogicTable(), is("t_order_item")); + assertThat(tableRule1.getActualDataNodes().size(), is(4)); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_0", "t_order_item_0"))); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_0", "t_order_item_1"))); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_1", "t_order_item_0"))); + assertTrue(tableRule1.getActualDataNodes().contains(new DataNode("ds_1", "t_order_item_1"))); + assertThat(tableRule1.getTableShardingStrategy(), instanceOf(InlineShardingStrategy.class)); + assertThat(tableRule1.getTableShardingStrategy().getShardingColumns().iterator().next(), is("order_id")); + assertThat(tableRule1.getGenerateKeyColumn(), is("order_item_id")); + TableRule tableRule2 = ((LinkedList) shardingRule.getTableRules()).get(1); + assertThat(tableRule2.getLogicTable(), is("t_order")); + assertThat(tableRule2.getActualDataNodes().size(), is(4)); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_0", "t_order_0"))); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_0", "t_order_1"))); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_1", "t_order_0"))); + assertTrue(tableRule2.getActualDataNodes().contains(new DataNode("ds_1", "t_order_1"))); + assertThat(tableRule1.getTableShardingStrategy(), instanceOf(InlineShardingStrategy.class)); + assertThat(tableRule1.getTableShardingStrategy().getShardingColumns().iterator().next(), is("order_id")); + assertThat(tableRule2.getGenerateKeyColumn(), is("order_id")); + } + + @Test + public void assertWithBroadcastTables() { + ShardingDataSource shardingDataSource = getFieldValue("dataSource", OrchestrationShardingDataSource.class, dataSource); + ShardingContext shardingContext = getFieldValue("shardingContext", ShardingDataSource.class, shardingDataSource); + ShardingRule shardingRule = shardingContext.getShardingRule(); + assertThat(shardingRule.getBroadcastTables().size(), is(1)); + assertThat(shardingRule.getBroadcastTables().iterator().next(), is("t_config")); + } + @SuppressWarnings("unchecked") @SneakyThrows private T getFieldValue(final String fieldName, final Class fieldClass, final Object target) { diff --git a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties index 7fb44159f5..4a966149b1 100644 --- a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties +++ b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties @@ -31,6 +31,8 @@ sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds_${0..1}.t sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item_${order_id % 2} sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id +sharding.jdbc.config.sharding.binding-tables=t_order,t_order_item +sharding.jdbc.config.sharding.broadcast-tables=t_config sharding.jdbc.config.config-map.key1=value1 diff --git a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationShardingNamespaceTest.java b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationShardingNamespaceTest.java index 055fd6600f..42cde6cc34 100644 --- a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationShardingNamespaceTest.java +++ b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationShardingNamespaceTest.java @@ -41,6 +41,7 @@ import javax.sql.DataSource; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedList; import java.util.Map; import static org.hamcrest.CoreMatchers.is; @@ -135,6 +136,21 @@ public class OrchestrationShardingNamespaceTest extends AbstractJUnit4SpringCont assertThat(userRule.getBindingActualTable("dbtbl_1", "t_user", "t_user_detail"), is("t_user")); } + @Test + public void assertBroadcastTableRuleDatasource() { + ShardingRule shardingRule = getShardingRule("broadcastTableRuleDatasourceOrchestration"); + assertThat(shardingRule.getBroadcastTables().size(), is(1)); + assertThat(shardingRule.getBroadcastTables().iterator().next(), is("t_config")); + } + + @Test + public void assertMultiBroadcastTableRulesDatasource() { + ShardingRule shardingRule = getShardingRule("multiBroadcastTableRulesDatasourceOrchestration"); + assertThat(shardingRule.getBroadcastTables().size(), is(2)); + assertThat(((LinkedList) shardingRule.getBroadcastTables()).get(0), is("t_config1")); + assertThat(((LinkedList) shardingRule.getBroadcastTables()).get(1), is("t_config2")); + } + @Test public void assertPropsDataSource() { OrchestrationSpringShardingDataSource shardingDataSource = applicationContext.getBean("propsDataSourceOrchestration", OrchestrationSpringShardingDataSource.class); diff --git a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/shardingDataSourceNamespace.xml b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/shardingDataSourceNamespace.xml index f889ad39c8..ab785fd3ef 100644 --- a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/shardingDataSourceNamespace.xml +++ b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/shardingDataSourceNamespace.xml @@ -89,6 +89,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/shardingOrchestration.xml b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/shardingOrchestration.xml index 271b27d5d1..f12c1596c2 100644 --- a/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/shardingOrchestration.xml +++ b/sharding-jdbc/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/shardingOrchestration.xml @@ -17,4 +17,6 @@ + + -- GitLab