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 fb3b97c57ea Add more test cases on
BoundaryBasedRangeShardingAlgorithmTest (#38276)
fb3b97c57ea is described below
commit fb3b97c57ea87a33fc22c67efd7271ad3f06090b
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Feb 28 20:27:07 2026 +0800
Add more test cases on BoundaryBasedRangeShardingAlgorithmTest (#38276)
---
.../BoundaryBasedRangeShardingAlgorithmTest.java | 73 +++++++++++++---------
1 file changed, 43 insertions(+), 30 deletions(-)
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithmTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithmTest.java
index a7e9b5f7faf..1df917aaec8 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithmTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithmTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.sharding.algorithm.sharding.range;
import com.google.common.collect.Range;
+import
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmInitializationException;
import org.apache.shardingsphere.infra.datanode.DataNodeInfo;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.util.props.PropertiesBuilder;
@@ -25,65 +26,77 @@ import
org.apache.shardingsphere.infra.util.props.PropertiesBuilder.Property;
import
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
import
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.Properties;
+import java.util.stream.Stream;
-import static org.hamcrest.Matchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
class BoundaryBasedRangeShardingAlgorithmTest {
private static final DataNodeInfo DATA_NODE_INFO = new
DataNodeInfo("t_order_", 1, '0');
- private BoundaryBasedRangeShardingAlgorithm shardingAlgorithm;
+ private static final List<String> AVAILABLE_TARGET_NAMES =
Arrays.asList("t_order_0", "t_order_1", "t_order_2", "t_order_3");
+
+ private final BoundaryBasedRangeShardingAlgorithm shardingAlgorithm =
(BoundaryBasedRangeShardingAlgorithm) TypedSPILoader.getService(
+ ShardingAlgorithm.class, "BOUNDARY_RANGE",
PropertiesBuilder.build(new Property("sharding-ranges", "1,5,10")));
- @BeforeEach
- void setUp() {
- shardingAlgorithm = (BoundaryBasedRangeShardingAlgorithm)
TypedSPILoader.getService(ShardingAlgorithm.class,
- "BOUNDARY_RANGE", PropertiesBuilder.build(new
Property("sharding-ranges", "1,5,10")));
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("preciseShardingValueArguments")
+ void assertPreciseDoSharding(final String name, final Comparable<?>
shardingValue, final String expectedTargetName) {
+ assertThat(shardingAlgorithm.doSharding(AVAILABLE_TARGET_NAMES, new
PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, shardingValue)),
is(expectedTargetName));
}
@Test
- void assertPreciseDoSharding() {
- assertPreciseDoSharding(new PreciseShardingValue<>("t_order",
"order_id", DATA_NODE_INFO, 0L));
+ void assertGetAutoTablesAmount() {
+ assertThat(shardingAlgorithm.getAutoTablesAmount(), is(4));
}
- private void assertPreciseDoSharding(final
PreciseShardingValue<Comparable<?>> shardingValue) {
- List<String> availableTargetNames = Arrays.asList("t_order_0",
"t_order_1", "t_order_2", "t_order_3");
- assertThat(shardingAlgorithm.doSharding(availableTargetNames,
shardingValue), is("t_order_0"));
+ @Test
+ void assertCalculatePartitionRangeWithMissingShardingRanges() {
+ assertThrows(AlgorithmInitializationException.class, () ->
shardingAlgorithm.calculatePartitionRange(new Properties()));
}
@Test
- void assertPreciseDoShardingWithIntShardingValue() {
- assertPreciseDoSharding(new PreciseShardingValue<>("t_order",
"order_id", DATA_NODE_INFO, 0));
+ void assertCalculatePartitionRangeWithInvalidShardingRanges() {
+ assertThrows(AlgorithmInitializationException.class, () ->
shardingAlgorithm.calculatePartitionRange(PropertiesBuilder.build(new
Property("sharding-ranges", "invalid"))));
}
- @Test
- void assertRangeDoSharding() {
- assertRangeDoSharding(new RangeShardingValue<>("t_order", "order_id",
DATA_NODE_INFO, Range.closed(2L, 15L)));
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("rangeShardingValueArguments")
+ void assertRangeDoSharding(final String name, final
RangeShardingValue<Comparable<?>> shardingValue, final List<String>
expectedTargetNames) {
+ Collection<String> actual =
shardingAlgorithm.doSharding(AVAILABLE_TARGET_NAMES, shardingValue);
+ assertThat(actual.size(), is(expectedTargetNames.size()));
+ expectedTargetNames.forEach(each -> assertTrue(actual.contains(each)));
}
- private void assertRangeDoSharding(final RangeShardingValue<Comparable<?>>
shardingValue) {
- List<String> availableTargetNames = Arrays.asList("t_order_0",
"t_order_1", "t_order_2", "t_order_3");
- Collection<String> actual =
shardingAlgorithm.doSharding(availableTargetNames, shardingValue);
- assertThat(actual.size(), is(3));
- assertTrue(actual.contains("t_order_1"));
- assertTrue(actual.contains("t_order_2"));
- assertTrue(actual.contains("t_order_3"));
+ private static Stream<Arguments> preciseShardingValueArguments() {
+ return Stream.of(
+ Arguments.of("precise value below first boundary", 0L,
"t_order_0"),
+ Arguments.of("precise value on first boundary", 1L,
"t_order_1"),
+ Arguments.of("precise value on last boundary", 10L,
"t_order_3"));
}
- @Test
- void assertRangeDoShardingWithIntShardingValue() {
- assertRangeDoSharding(new RangeShardingValue<>("t_order", "order_id",
DATA_NODE_INFO, Range.closed(2, 15)));
+ private static Stream<Arguments> rangeShardingValueArguments() {
+ return Stream.of(
+ Arguments.of("range with both bounds",
createRangeShardingValue(Range.closed(2L, 15L)), Arrays.asList("t_order_1",
"t_order_2", "t_order_3")),
+ Arguments.of("range without lower bound",
createRangeShardingValue(Range.lessThan(0L)),
Collections.singletonList("t_order_0")),
+ Arguments.of("range without upper bound",
createRangeShardingValue(Range.atLeast(10L)),
Collections.singletonList("t_order_3")));
}
- @Test
- void assertGetAutoTablesAmount() {
- assertThat(shardingAlgorithm.getAutoTablesAmount(), is(4));
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static RangeShardingValue<Comparable<?>>
createRangeShardingValue(final Range<? extends Comparable<?>> valueRange) {
+ return new RangeShardingValue<>("t_order", "order_id", DATA_NODE_INFO,
(Range) valueRange);
}
}