提交 c0047eb1 编写于 作者: 马晓光

add spring boot start orchestration test case for broadcast table

上级 6a0d686d
......@@ -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<TableRule>) 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<TableRule>) 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<TableRule>) 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<TableRule>) 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> T getFieldValue(final String fieldName, final Class<?> fieldClass, final Object target) {
......
......@@ -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
......
......@@ -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<String>) shardingRule.getBroadcastTables()).get(0), is("t_config1"));
assertThat(((LinkedList<String>) shardingRule.getBroadcastTables()).get(1), is("t_config2"));
}
@Test
public void assertPropsDataSource() {
OrchestrationSpringShardingDataSource shardingDataSource = applicationContext.getBean("propsDataSourceOrchestration", OrchestrationSpringShardingDataSource.class);
......
......@@ -89,6 +89,37 @@
</sharding:sharding-rule>
</sharding:data-source>
<sharding:data-source id="broadcastTableRuleDatasource">
<sharding:sharding-rule data-source-names="dbtbl_0,dbtbl_1" >
<sharding:table-rules>
<sharding:table-rule logic-table="t_order" />
<sharding:table-rule logic-table="t_order_item" />
</sharding:table-rules>
<sharding:binding-table-rules>
<sharding:binding-table-rule logic-tables="t_order, t_order_item" />
</sharding:binding-table-rules>
<sharding:broadcast-table-rules>
<sharding:broadcast-table-rule tables="t_config" />
</sharding:broadcast-table-rules>
</sharding:sharding-rule>
</sharding:data-source>
<sharding:data-source id="multiBroadcastTableRulesDatasource">
<sharding:sharding-rule data-source-names="dbtbl_0,dbtbl_1" >
<sharding:table-rules>
<sharding:table-rule logic-table="t_order" />
<sharding:table-rule logic-table="t_order_item" />
</sharding:table-rules>
<sharding:binding-table-rules>
<sharding:binding-table-rule logic-tables="t_order, t_order_item" />
</sharding:binding-table-rules>
<sharding:broadcast-table-rules>
<sharding:broadcast-table-rule tables="t_config1" />
<sharding:broadcast-table-rule tables="t_config2" />
</sharding:broadcast-table-rules>
</sharding:sharding-rule>
</sharding:data-source>
<sharding:data-source id="propsDataSource">
<sharding:sharding-rule data-source-names="dbtbl_0,dbtbl_1">
<sharding:table-rules>
......
......@@ -17,4 +17,6 @@
<orchestraion:sharding-data-source id="tableRuleWithAttributesDataSourceOrchestration" data-source-ref="tableRuleWithAttributesDataSource" registry-center-ref="regCenter" />
<orchestraion:sharding-data-source id="bindingTableRuleDatasourceOrchestration" data-source-ref="bindingTableRuleDatasource" registry-center-ref="regCenter" />
<orchestraion:sharding-data-source id="multiBindingTableRulesDatasourceOrchestration" data-source-ref="multiBindingTableRulesDatasource" registry-center-ref="regCenter" />
<orchestraion:sharding-data-source id="broadcastTableRuleDatasourceOrchestration" data-source-ref="broadcastTableRuleDatasource" registry-center-ref="regCenter" />
<orchestraion:sharding-data-source id="multiBroadcastTableRulesDatasourceOrchestration" data-source-ref="multiBroadcastTableRulesDatasource" registry-center-ref="regCenter" />
</beans>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册