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);
     }
 }

Reply via email to