diff --git a/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlShardingRuleConfiguration.java b/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlShardingRuleConfiguration.java index f005783e7cb43bd1e64f046105f4152e621b6934..308fca6cbb32e6f8aec0cdd4b3f475f6c82fde6a 100644 --- a/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlShardingRuleConfiguration.java +++ b/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlShardingRuleConfiguration.java @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; @@ -60,14 +61,14 @@ public class YamlShardingRuleConfiguration { private Properties props = new Properties(); /** - * Get sharding rule configuration from yaml. + * Get sharding rule configuration. * - * @return sharding rule configuration from yaml + * @return sharding rule configuration */ public ShardingRuleConfiguration getShardingRuleConfiguration() { ShardingRuleConfiguration result = new ShardingRuleConfiguration(); result.setDefaultDataSourceName(defaultDataSourceName); - for (Map.Entry entry : tables.entrySet()) { + for (Entry entry : tables.entrySet()) { YamlTableRuleConfiguration tableRuleConfig = entry.getValue(); tableRuleConfig.setLogicTable(entry.getKey()); result.getTableRuleConfigs().add(tableRuleConfig.build()); @@ -81,13 +82,13 @@ public class YamlShardingRuleConfiguration { } result.setDefaultKeyGeneratorClass(defaultKeyGeneratorClass); Collection masterSlaveRuleConfigs = new LinkedList<>(); - for (Map.Entry each : masterSlaveRules.entrySet()) { + for (Entry entry : masterSlaveRules.entrySet()) { MasterSlaveRuleConfiguration msRuleConfig = new MasterSlaveRuleConfiguration(); - msRuleConfig.setName(each.getKey()); - msRuleConfig.setMasterDataSourceName(each.getValue().getMasterDataSourceName()); - msRuleConfig.setSlaveDataSourceNames(each.getValue().getSlaveDataSourceNames()); - msRuleConfig.setLoadBalanceAlgorithmType(each.getValue().getLoadBalanceAlgorithmType()); - msRuleConfig.setLoadBalanceAlgorithmClassName(each.getValue().getLoadBalanceAlgorithmClassName()); + msRuleConfig.setName(entry.getKey()); + msRuleConfig.setMasterDataSourceName(entry.getValue().getMasterDataSourceName()); + msRuleConfig.setSlaveDataSourceNames(entry.getValue().getSlaveDataSourceNames()); + msRuleConfig.setLoadBalanceAlgorithmType(entry.getValue().getLoadBalanceAlgorithmType()); + msRuleConfig.setLoadBalanceAlgorithmClassName(entry.getValue().getLoadBalanceAlgorithmClassName()); masterSlaveRuleConfigs.add(msRuleConfig); } result.setMasterSlaveRuleConfigs(masterSlaveRuleConfigs); diff --git a/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlTableRuleConfiguration.java b/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlTableRuleConfiguration.java index 8b1a07ae50e67d6e2ae655eb661c7bb5ada6ee4e..4638c2e6039f2208d190b4ea347005a6c3a55842 100644 --- a/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlTableRuleConfiguration.java +++ b/sharding-core/src/main/java/io/shardingjdbc/core/yaml/sharding/YamlTableRuleConfiguration.java @@ -55,7 +55,6 @@ public class YamlTableRuleConfiguration { TableRuleConfiguration result = new TableRuleConfiguration(); result.setLogicTable(logicTable); result.setActualDataNodes(actualDataNodes); - result.setLogicTable(logicTable); if (null != databaseStrategy) { result.setDatabaseShardingStrategyConfig(databaseStrategy.build()); } diff --git a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/AllYamlTests.java b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/AllYamlTests.java index ad001c45377e691726cfa229a825152738bc09ac..2d71ed3e6467456f5f8e29a7db79b476bc656314 100644 --- a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/AllYamlTests.java +++ b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/AllYamlTests.java @@ -20,6 +20,9 @@ package io.shardingjdbc.core.yaml; import io.shardingjdbc.core.yaml.masterslave.YamlMasterSlaveConfigurationTest; import io.shardingjdbc.core.yaml.masterslave.YamlMasterSlaveRuleConfigurationTest; import io.shardingjdbc.core.yaml.sharding.YamlShardingConfigurationTest; +import io.shardingjdbc.core.yaml.sharding.YamlShardingRuleConfigurationTest; +import io.shardingjdbc.core.yaml.sharding.YamlShardingStrategyConfigurationTest; +import io.shardingjdbc.core.yaml.sharding.YamlTableRuleConfigurationTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @@ -27,6 +30,9 @@ import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ YamlShardingConfigurationTest.class, + YamlShardingRuleConfigurationTest.class, + YamlTableRuleConfigurationTest.class, + YamlShardingStrategyConfigurationTest.class, YamlMasterSlaveConfigurationTest.class, YamlMasterSlaveRuleConfigurationTest.class }) diff --git a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/masterslave/YamlMasterSlaveRuleConfigurationTest.java b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/masterslave/YamlMasterSlaveRuleConfigurationTest.java index a00015088c3ab8ebc577dc1008c47416ee90a876..262b11c2aa923bbdaffe84f234bfc229e60cc9a3 100644 --- a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/masterslave/YamlMasterSlaveRuleConfigurationTest.java +++ b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/masterslave/YamlMasterSlaveRuleConfigurationTest.java @@ -32,8 +32,7 @@ public final class YamlMasterSlaveRuleConfigurationTest { @Test public void assertGetMasterSlaveRuleConfiguration() { - MasterSlaveRuleConfiguration actual = createYamlMasterSlaveRuleConfig().getMasterSlaveRuleConfiguration(); - assertMasterSlaveRuleConfig(actual); + assertMasterSlaveRuleConfig(createYamlMasterSlaveRuleConfig().getMasterSlaveRuleConfiguration()); } private YamlMasterSlaveRuleConfiguration createYamlMasterSlaveRuleConfig() { diff --git a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingConfigurationTest.java b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingConfigurationTest.java index 3f29b3f08acd22359bc45097c3a64464d755dc77..8d07162bb637bc439168833b2318334a824afe6f 100644 --- a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingConfigurationTest.java +++ b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingConfigurationTest.java @@ -104,6 +104,7 @@ public final class YamlShardingConfigurationTest { assertThat(actual.getShardingRule().getTables().get("t_order").getTableStrategy().getInline().getAlgorithmExpression(), is("t_order_${order_id % 2}")); assertThat(actual.getShardingRule().getTables().get("t_order").getKeyGeneratorColumnName(), is("order_id")); assertThat(actual.getShardingRule().getTables().get("t_order").getKeyGeneratorClass(), is("io.shardingjdbc.core.keygen.DefaultKeyGenerator")); + assertThat(actual.getShardingRule().getTables().get("t_order").getLogicIndex(), is("order_index")); } private void assertTOrderItem(final YamlShardingConfiguration actual) { diff --git a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingRuleConfigurationTest.java b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingRuleConfigurationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..2b09d9e70de571fdb2a851d25ef89b450920d9d1 --- /dev/null +++ b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingRuleConfigurationTest.java @@ -0,0 +1,115 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *

+ */ + +package io.shardingjdbc.core.yaml.sharding; + +import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithmType; +import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration; +import io.shardingjdbc.core.api.config.ShardingRuleConfiguration; +import io.shardingjdbc.core.api.config.TableRuleConfiguration; +import io.shardingjdbc.core.api.config.strategy.NoneShardingStrategyConfiguration; +import io.shardingjdbc.core.keygen.DefaultKeyGenerator; +import io.shardingjdbc.core.yaml.masterslave.YamlMasterSlaveRuleConfiguration; +import io.shardingjdbc.core.yaml.sharding.strategy.YamlNoneShardingStrategyConfiguration; +import org.hamcrest.CoreMatchers; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + +public final class YamlShardingRuleConfigurationTest { + + @Test + public void assertGetShardingRuleConfigurationWithoutDefaultStrategy() { + ShardingRuleConfiguration actual = createYamlShardingRuleConfigWithoutDefaultStrategy().getShardingRuleConfiguration(); + assertShardingRuleConfig(actual); + assertWithoutDefaultStrategy(actual); + } + + @Test + public void assertGetShardingRuleConfigurationWithDefaultStrategy() { + ShardingRuleConfiguration actual = createYamlShardingRuleConfigWithDefaultStrategy().getShardingRuleConfiguration(); + assertShardingRuleConfig(actual); + assertWithDefaultStrategy(actual); + } + + private YamlShardingRuleConfiguration createYamlShardingRuleConfigWithoutDefaultStrategy() { + YamlShardingRuleConfiguration result = new YamlShardingRuleConfiguration(); + result.setDefaultDataSourceName("default_ds"); + result.getTables().put("t_order", new YamlTableRuleConfiguration()); + result.getTables().put("t_order_item", new YamlTableRuleConfiguration()); + result.getBindingTables().add("t_order, t_order_item"); + result.setDefaultKeyGeneratorClass(DefaultKeyGenerator.class.getName()); + result.getMasterSlaveRules().put("master_slave_ds", createYamlMasterSlaveRuleConfig()); + return result; + } + + private YamlShardingRuleConfiguration createYamlShardingRuleConfigWithDefaultStrategy() { + YamlShardingRuleConfiguration result = createYamlShardingRuleConfigWithoutDefaultStrategy(); + YamlShardingStrategyConfiguration yamlShardingStrategyConfig = new YamlShardingStrategyConfiguration(); + yamlShardingStrategyConfig.setNone(new YamlNoneShardingStrategyConfiguration()); + result.setDefaultDatabaseStrategy(yamlShardingStrategyConfig); + result.setDefaultTableStrategy(yamlShardingStrategyConfig); + return result; + } + + private YamlMasterSlaveRuleConfiguration createYamlMasterSlaveRuleConfig() { + YamlMasterSlaveRuleConfiguration result = new YamlMasterSlaveRuleConfiguration(); + result.setName("master_slave_ds"); + result.setMasterDataSourceName("master_ds"); + result.setSlaveDataSourceNames(Arrays.asList("slave_ds_0", "slave_ds_1")); + result.setLoadBalanceAlgorithmType(MasterSlaveLoadBalanceAlgorithmType.ROUND_ROBIN); + result.setLoadBalanceAlgorithmClassName("TestLoadBalanceAlgorithmClassName"); + return result; + } + + private void assertShardingRuleConfig(final ShardingRuleConfiguration actual) { + assertThat(actual.getDefaultDataSourceName(), is("default_ds")); + assertThat(actual.getTableRuleConfigs().size(), is(2)); + Iterator tableRuleConfigIterator = actual.getTableRuleConfigs().iterator(); + assertThat(tableRuleConfigIterator.next().getLogicTable(), is("t_order")); + assertThat(tableRuleConfigIterator.next().getLogicTable(), is("t_order_item")); + assertThat(actual.getBindingTableGroups().size(), is(1)); + assertThat(actual.getBindingTableGroups().iterator().next(), is("t_order, t_order_item")); + assertThat(actual.getDefaultKeyGeneratorClass(), is(DefaultKeyGenerator.class.getName())); + assertMasterSlaveRuleConfig(actual.getMasterSlaveRuleConfigs().iterator().next()); + } + + private void assertMasterSlaveRuleConfig(final MasterSlaveRuleConfiguration actual) { + assertThat(actual.getName(), is("master_slave_ds")); + assertThat(actual.getMasterDataSourceName(), is("master_ds")); + assertThat(actual.getSlaveDataSourceNames(), CoreMatchers.>is(Arrays.asList("slave_ds_0", "slave_ds_1"))); + assertThat(actual.getLoadBalanceAlgorithmType(), is(MasterSlaveLoadBalanceAlgorithmType.ROUND_ROBIN)); + assertThat(actual.getLoadBalanceAlgorithmClassName(), is("TestLoadBalanceAlgorithmClassName")); + } + + private void assertWithoutDefaultStrategy(final ShardingRuleConfiguration actual) { + assertNull(actual.getDefaultDatabaseShardingStrategyConfig()); + assertNull(actual.getDefaultTableShardingStrategyConfig()); + } + + private void assertWithDefaultStrategy(final ShardingRuleConfiguration actual) { + assertThat(actual.getDefaultDatabaseShardingStrategyConfig(), instanceOf(NoneShardingStrategyConfiguration.class)); + assertThat(actual.getDefaultTableShardingStrategyConfig(), instanceOf(NoneShardingStrategyConfiguration.class)); + } +} diff --git a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingStrategyConfigurationTest.java b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingStrategyConfigurationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ca9336fcdd5d9e76dd1b07f54ddbf0d37a63a9e0 --- /dev/null +++ b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlShardingStrategyConfigurationTest.java @@ -0,0 +1,143 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *

+ */ + +package io.shardingjdbc.core.yaml.sharding; + +import io.shardingjdbc.core.api.config.strategy.ComplexShardingStrategyConfiguration; +import io.shardingjdbc.core.api.config.strategy.HintShardingStrategyConfiguration; +import io.shardingjdbc.core.api.config.strategy.InlineShardingStrategyConfiguration; +import io.shardingjdbc.core.api.config.strategy.NoneShardingStrategyConfiguration; +import io.shardingjdbc.core.api.config.strategy.StandardShardingStrategyConfiguration; +import io.shardingjdbc.core.yaml.sharding.strategy.YamlComplexShardingStrategyConfiguration; +import io.shardingjdbc.core.yaml.sharding.strategy.YamlHintShardingStrategyConfiguration; +import io.shardingjdbc.core.yaml.sharding.strategy.YamlInlineShardingStrategyConfiguration; +import io.shardingjdbc.core.yaml.sharding.strategy.YamlNoneShardingStrategyConfiguration; +import io.shardingjdbc.core.yaml.sharding.strategy.YamlStandardShardingStrategyConfiguration; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + +public final class YamlShardingStrategyConfigurationTest { + + @Test + public void assertBuildWithStandard() { + assertStandardShardingStrategyConfig((StandardShardingStrategyConfiguration) createStandardShardingStrategyConfig().build()); + } + + private YamlShardingStrategyConfiguration createStandardShardingStrategyConfig() { + YamlStandardShardingStrategyConfiguration standardShardingStrategyConfig = new YamlStandardShardingStrategyConfiguration(); + standardShardingStrategyConfig.setShardingColumn("order_id"); + standardShardingStrategyConfig.setPreciseAlgorithmClassName("TestPreciseAlgorithmClass"); + standardShardingStrategyConfig.setRangeAlgorithmClassName("TestRangeAlgorithmClass"); + YamlShardingStrategyConfiguration result = new YamlShardingStrategyConfiguration(); + result.setStandard(standardShardingStrategyConfig); + return result; + } + + private void assertStandardShardingStrategyConfig(final StandardShardingStrategyConfiguration actual) { + assertThat(actual.getShardingColumn(), is("order_id")); + assertThat(actual.getPreciseAlgorithmClassName(), is("TestPreciseAlgorithmClass")); + assertThat(actual.getRangeAlgorithmClassName(), is("TestRangeAlgorithmClass")); + } + + @Test + public void assertBuildWithComplex() { + assertComplexShardingStrategyConfig((ComplexShardingStrategyConfiguration) createComplexShardingStrategyConfig().build()); + } + + private YamlShardingStrategyConfiguration createComplexShardingStrategyConfig() { + YamlComplexShardingStrategyConfiguration complexShardingStrategyConfig = new YamlComplexShardingStrategyConfiguration(); + complexShardingStrategyConfig.setShardingColumns("user_id, order_id"); + complexShardingStrategyConfig.setAlgorithmClassName("TestAlgorithmClass"); + YamlShardingStrategyConfiguration result = new YamlShardingStrategyConfiguration(); + result.setComplex(complexShardingStrategyConfig); + return result; + } + + private void assertComplexShardingStrategyConfig(final ComplexShardingStrategyConfiguration actual) { + assertThat(actual.getShardingColumns(), is("user_id, order_id")); + assertThat(actual.getAlgorithmClassName(), is("TestAlgorithmClass")); + } + + @Test + public void assertBuildWithHint() { + assertHintShardingStrategyConfig((HintShardingStrategyConfiguration) createHintShardingStrategyConfig().build()); + } + + private YamlShardingStrategyConfiguration createHintShardingStrategyConfig() { + YamlHintShardingStrategyConfiguration hintShardingStrategyConfig = new YamlHintShardingStrategyConfiguration(); + hintShardingStrategyConfig.setAlgorithmClassName("TestAlgorithmClass"); + YamlShardingStrategyConfiguration result = new YamlShardingStrategyConfiguration(); + result.setHint(hintShardingStrategyConfig); + return result; + } + + private void assertHintShardingStrategyConfig(final HintShardingStrategyConfiguration actual) { + assertThat(actual.getAlgorithmClassName(), is("TestAlgorithmClass")); + } + + @Test + public void assertBuildWithInline() { + assertInlineShardingStrategyConfig((InlineShardingStrategyConfiguration) createInlineShardingStrategyConfig().build()); + } + + private YamlShardingStrategyConfiguration createInlineShardingStrategyConfig() { + YamlInlineShardingStrategyConfiguration inlineShardingStrategyConfig = new YamlInlineShardingStrategyConfiguration(); + inlineShardingStrategyConfig.setShardingColumn("order_id"); + inlineShardingStrategyConfig.setAlgorithmExpression("t_order_${order_id % 2}"); + YamlShardingStrategyConfiguration result = new YamlShardingStrategyConfiguration(); + result.setInline(inlineShardingStrategyConfig); + return result; + } + + private void assertInlineShardingStrategyConfig(final InlineShardingStrategyConfiguration actual) { + assertThat(actual.getShardingColumn(), is("order_id")); + assertThat(actual.getAlgorithmExpression(), is("t_order_${order_id % 2}")); + } + + @Test + public void assertBuildWithNone() { + assertNoneShardingStrategyConfig((NoneShardingStrategyConfiguration) createNoneShardingStrategyConfig().build()); + } + + private YamlShardingStrategyConfiguration createNoneShardingStrategyConfig() { + YamlNoneShardingStrategyConfiguration noneShardingStrategyConfig = new YamlNoneShardingStrategyConfiguration(); + YamlShardingStrategyConfiguration result = new YamlShardingStrategyConfiguration(); + result.setNone(noneShardingStrategyConfig); + return result; + } + + private void assertNoneShardingStrategyConfig(final NoneShardingStrategyConfiguration actual) { + assertThat(actual, instanceOf(NoneShardingStrategyConfiguration.class)); + } + + @Test + public void assertBuildWithNull() { + assertNull(new YamlShardingStrategyConfiguration().build()); + } + + @Test(expected = IllegalArgumentException.class) + public void assertBuildWithMultipleSHardingStrategies() { + YamlShardingStrategyConfiguration actual = new YamlShardingStrategyConfiguration(); + actual.setStandard(new YamlStandardShardingStrategyConfiguration()); + actual.setComplex(new YamlComplexShardingStrategyConfiguration()); + actual.build(); + } +} diff --git a/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlTableRuleConfigurationTest.java b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlTableRuleConfigurationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..407eea0c40e84ed0a1ada11e505bd71f8f98220e --- /dev/null +++ b/sharding-core/src/test/java/io/shardingjdbc/core/yaml/sharding/YamlTableRuleConfigurationTest.java @@ -0,0 +1,88 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *

+ */ + +package io.shardingjdbc.core.yaml.sharding; + +import io.shardingjdbc.core.api.config.TableRuleConfiguration; +import io.shardingjdbc.core.api.config.strategy.NoneShardingStrategyConfiguration; +import io.shardingjdbc.core.keygen.DefaultKeyGenerator; +import io.shardingjdbc.core.yaml.sharding.strategy.YamlNoneShardingStrategyConfiguration; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + +public final class YamlTableRuleConfigurationTest { + + @Test(expected = NullPointerException.class) + public void assertBuildWithoutLogicTable() { + new YamlTableRuleConfiguration().build(); + } + + @Test + public void assertBuildWithoutShardingStrategy() { + TableRuleConfiguration actual = createYamlTableRuleConfig().build(); + assertTableRuleConfig(actual); + assertWithoutShardingStrategy(actual); + } + + @Test + public void assertBuildWithShardingStrategy() { + TableRuleConfiguration actual = createYamlTableRuleConfigWithShardingStrategy().build(); + assertTableRuleConfig(actual); + assertWithShardingStrategy(actual); + } + + private YamlTableRuleConfiguration createYamlTableRuleConfig() { + YamlTableRuleConfiguration result = new YamlTableRuleConfiguration(); + result.setLogicTable("t_order"); + result.setActualDataNodes("ds_${0..1}.t_order_${0..1}"); + result.setKeyGeneratorColumnName("order_id"); + result.setKeyGeneratorClass(DefaultKeyGenerator.class.getName()); + result.setLogicIndex("order_index"); + return result; + } + + private YamlTableRuleConfiguration createYamlTableRuleConfigWithShardingStrategy() { + YamlTableRuleConfiguration result = createYamlTableRuleConfig(); + YamlShardingStrategyConfiguration yamlShardingStrategyConfig = new YamlShardingStrategyConfiguration(); + yamlShardingStrategyConfig.setNone(new YamlNoneShardingStrategyConfiguration()); + result.setDatabaseStrategy(yamlShardingStrategyConfig); + result.setTableStrategy(yamlShardingStrategyConfig); + return result; + } + + private void assertTableRuleConfig(final TableRuleConfiguration actual) { + assertThat(actual.getLogicTable(), is("t_order")); + assertThat(actual.getActualDataNodes(), is("ds_${0..1}.t_order_${0..1}")); + assertThat(actual.getKeyGeneratorColumnName(), is("order_id")); + assertThat(actual.getKeyGeneratorClass(), is(DefaultKeyGenerator.class.getName())); + assertThat(actual.getLogicIndex(), is("order_index")); + } + + private void assertWithoutShardingStrategy(final TableRuleConfiguration actual) { + assertNull(actual.getDatabaseShardingStrategyConfig()); + assertNull(actual.getTableShardingStrategyConfig()); + } + + private void assertWithShardingStrategy(final TableRuleConfiguration actual) { + assertThat(actual.getDatabaseShardingStrategyConfig(), instanceOf(NoneShardingStrategyConfiguration.class)); + assertThat(actual.getTableShardingStrategyConfig(), instanceOf(NoneShardingStrategyConfiguration.class)); + } +} diff --git a/sharding-core/src/test/resources/yaml/sharding-rule.yaml b/sharding-core/src/test/resources/yaml/sharding-rule.yaml index 8636b2c0c2a38bc15f0f4c9cb5e1399ffed1e6a4..59ffc8c6b600988c36a97766f802591a0a6134f1 100644 --- a/sharding-core/src/test/resources/yaml/sharding-rule.yaml +++ b/sharding-core/src/test/resources/yaml/sharding-rule.yaml @@ -63,6 +63,7 @@ shardingRule: algorithmExpression: t_order_${order_id % 2} keyGeneratorColumnName: order_id keyGeneratorClass: io.shardingjdbc.core.keygen.DefaultKeyGenerator + logicIndex: order_index t_order_item: actualDataNodes: ds_${0..1}.t_order_item_${0..1} tableStrategy: