This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 97dd038e9c0 Upgrade junit 5 for ShardingRouteCacheableCheckerTest
(#24554)
97dd038e9c0 is described below
commit 97dd038e9c0c2edd97f7def33aeed14398ebb834
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Mar 11 21:26:38 2023 +0800
Upgrade junit 5 for ShardingRouteCacheableCheckerTest (#24554)
* Upgrade junit 5 for ShardingRouteCacheableCheckerTest
* Upgrade junit 5 for ShardingRouteCacheableCheckerTest
---
.../checker/ShardingRouteCacheableCheckerTest.java | 117 ++++++++++-----------
1 file changed, 54 insertions(+), 63 deletions(-)
diff --git
a/features/sharding/plugin/cache/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
b/features/sharding/plugin/cache/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
index a33194983f4..7d3d2820ff5 100644
---
a/features/sharding/plugin/cache/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
+++
b/features/sharding/plugin/cache/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
@@ -17,10 +17,8 @@
package org.apache.shardingsphere.sharding.cache.checker;
-import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.binder.QueryContext;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -49,10 +47,11 @@ import
org.apache.shardingsphere.test.util.PropertiesBuilder;
import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
import
org.apache.shardingsphere.timeservice.api.config.TimeServiceRuleConfiguration;
import org.apache.shardingsphere.timeservice.core.rule.TimeServiceRule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Types;
import java.util.Arrays;
@@ -61,73 +60,31 @@ import java.util.Collections;
import java.util.List;
import java.util.Properties;
import java.util.function.Function;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
-@RunWith(Parameterized.class)
-@RequiredArgsConstructor
public final class ShardingRouteCacheableCheckerTest {
private static final String DATABASE_NAME = "sharding_db";
private static final String SCHEMA_NAME = "public";
- private final String sql;
-
- private final List<Object> parameters;
-
- private final boolean expectedProbablyCacheable;
-
- private final List<Integer>
expectedShardingConditionParameterMarkerIndexes;
-
- @Parameters(name = "probably cacheable: {2}, SQL: {0}")
- public static Iterable<Object[]> parameters() {
- Collection<Object[]> probablyCacheableCases = Arrays.asList(
- new Object[]{"insert into t_broadcast_table
(broadcast_table_id, broadcast_table_col1) values (?, ?)", Arrays.asList(1,
"foo"), true, Collections.emptyList()},
- new Object[]{"insert into t_warehouse (id) values (?)",
Collections.singletonList(1), true, Collections.singletonList(0)},
- new Object[]{"select * from t_warehouse where id = ?",
Collections.singletonList(1), true, Collections.singletonList(0)},
- new Object[]{"select * from t_warehouse where id in (?, ?,
?)", Arrays.asList(1, 2, 3), true, Arrays.asList(0, 1, 2)},
- new Object[]{"select * from t_warehouse where id between ? and
?", Arrays.asList(1, 10), true, Arrays.asList(0, 1)},
- new Object[]{"select * from t_warehouse where id between ? and
? limit ? offset ?", Arrays.asList(1, 10, 100, 50), true, Arrays.asList(0, 1)},
- new Object[]{"update t_broadcast_table set
broadcast_table_col1 = ?", Collections.singletonList(0), true,
Collections.emptyList()},
- new Object[]{"update t_broadcast_table set
broadcast_table_col1 = ? where broadcast_table_id = ?", Arrays.asList(0, 1),
true, Collections.emptyList()},
- new Object[]{"update t_warehouse set warehouse_name = ? where
id = ?", Arrays.asList("foo", 1), true, Collections.singletonList(1)},
- new Object[]{"delete from t_broadcast_table",
Collections.emptyList(), true, Collections.emptyList()},
- new Object[]{"delete from t_warehouse where id = ?",
Collections.singletonList(1), true, Collections.singletonList(0)});
- Collection<Object[]> nonCacheableCases = Arrays.asList(
- new Object[]{"create table t_warehouse (id int4 not null
primary key)", Collections.emptyList(), false, Collections.emptyList()},
- new Object[]{"insert into t_warehouse (id) select warehouse_id
from t_order", Collections.emptyList(), false, Collections.emptyList()},
- new Object[]{"insert into t_broadcast_table
(broadcast_table_id, broadcast_table_col1) values (?, ?), (?, ?)",
Arrays.asList(1, "foo", 2, "bar"), false, Collections.emptyList()},
- new Object[]{"insert into t_warehouse (id) values (?), (?)",
Arrays.asList(1, 2), false, Collections.emptyList()},
- new Object[]{"insert into t_non_sharding_table (id) values
(?)", Collections.singletonList(1), false, Collections.emptyList()},
- new Object[]{"insert into t_non_cacheable_database_sharding
(id) values (?)", Collections.singletonList(1), false, Collections.emptyList()},
- new Object[]{"insert into t_non_cacheable_table_sharding (id)
values (?)", Collections.singletonList(1), false, Collections.emptyList()},
- new Object[]{"insert into t_warehouse (id) values (now())",
Collections.emptyList(), false, Collections.emptyList()},
- new Object[]{"select * from t_broadcast_table where
broadcast_table_id = ?", Collections.singletonList(1), false,
Collections.emptyList()},
- new Object[]{"select * from t_warehouse w join t_order o on
w.id = o.warehouse_id where w.id = ?", Collections.singletonList(1), false,
Collections.emptyList()},
- new Object[]{"update t_warehouse set warehouse_name = ? where
id = (select max(warehouse_id) from t_order)",
Collections.singletonList("foo"), false, Collections.emptyList()},
- new Object[]{"delete from t_order where warehouse_id in (1, 2,
now())", Collections.emptyList(), false, Collections.emptyList()},
- new Object[]{"delete from t_order where warehouse_id between
now() and now()", Collections.emptyList(), false, Collections.emptyList()},
- new Object[]{"delete from t_order o where o.warehouse_id in
(select w.id from t_warehouse w)", Collections.emptyList(), false,
Collections.emptyList()});
- return Stream.of(probablyCacheableCases.stream(),
nonCacheableCases.stream()).flatMap(Function.identity()).collect(Collectors.toList());
- }
-
- @Test
- public void assertCheckCacheable() {
- ShardingRule shardingRule = prepareShardingRule();
- ShardingCacheRule shardingCacheRule =
prepareShardingCacheRule(shardingRule);
- TimeServiceRule timeServiceRule = prepareTimeServiceRule();
- ShardingSphereDatabase database = prepareDatabase(shardingRule,
shardingCacheRule, timeServiceRule);
- ShardingRouteCacheableCheckResult actual = new
ShardingRouteCacheableChecker(shardingCacheRule).check(database,
prepareQueryContext(database, sql, parameters));
+ @ParameterizedTest(name = "probably cacheable: {2}, SQL: {0}")
+ @ArgumentsSource(TestCaseArgumentsProvider.class)
+ public void assertCheckCacheable(final String sql, final List<Object>
parameters, final boolean expectedProbablyCacheable, final List<Integer>
expectedShardingConditionParameterMarkerIndexes) {
+ ShardingRule shardingRule = createShardingRule();
+ ShardingCacheRule shardingCacheRule =
createShardingCacheRule(shardingRule);
+ TimeServiceRule timeServiceRule = createTimeServiceRule();
+ ShardingSphereDatabase database = createDatabase(shardingRule,
shardingCacheRule, timeServiceRule);
+ ShardingRouteCacheableCheckResult actual = new
ShardingRouteCacheableChecker(shardingCacheRule).check(database,
createQueryContext(database, sql, parameters));
assertThat(actual.isProbablyCacheable(),
is(expectedProbablyCacheable));
assertThat(actual.getShardingConditionParameterMarkerIndexes(),
is(expectedShardingConditionParameterMarkerIndexes));
}
- private ShardingRule prepareShardingRule() {
+ private ShardingRule createShardingRule() {
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
ruleConfig.getBroadcastTables().add("t_broadcast_table");
ruleConfig.getBindingTableGroups().add(new
ShardingTableReferenceRuleConfiguration("foo", "t_order,t_order_item"));
@@ -148,16 +105,16 @@ public final class ShardingRouteCacheableCheckerTest {
return new ShardingRule(ruleConfig, Arrays.asList("ds_0", "ds_1"), new
InstanceContext(mock(ComputeNodeInstance.class), props -> 0, null, null, null,
null));
}
- private ShardingCacheRule prepareShardingCacheRule(final ShardingRule
shardingRule) {
+ private ShardingCacheRule createShardingCacheRule(final ShardingRule
shardingRule) {
return new ShardingCacheRule(new ShardingCacheRuleConfiguration(100,
new ShardingCacheOptions(true, 0, 0)), shardingRule,
new TimeServiceRule(new TimeServiceRuleConfiguration("System",
new Properties())));
}
- private TimeServiceRule prepareTimeServiceRule() {
+ private TimeServiceRule createTimeServiceRule() {
return new TimeServiceRule(new TimeServiceRuleConfiguration("System",
new Properties()));
}
- private ShardingSphereDatabase prepareDatabase(final ShardingRule
shardingRule, final ShardingCacheRule shardingCacheRule, final TimeServiceRule
timeServiceRule) {
+ private ShardingSphereDatabase createDatabase(final ShardingRule
shardingRule, final ShardingCacheRule shardingCacheRule, final TimeServiceRule
timeServiceRule) {
ShardingSphereSchema schema = new ShardingSphereSchema();
schema.getTables().put("t_broadcast_table", new
ShardingSphereTable("t_broadcast_table", Arrays.asList(
new ShardingSphereColumn("broadcast_table_id", Types.INTEGER,
true, false, false, true, false),
@@ -179,9 +136,8 @@ public final class ShardingRouteCacheableCheckerTest {
Collections.singletonMap(SCHEMA_NAME, schema));
}
- private QueryContext prepareQueryContext(final ShardingSphereDatabase
database, final String sql, final List<Object> params) {
- SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(createShardingSphereMetaData(database),
params, parse(sql), DATABASE_NAME);
- return new QueryContext(sqlStatementContext, sql, params);
+ private QueryContext createQueryContext(final ShardingSphereDatabase
database, final String sql, final List<Object> params) {
+ return new
QueryContext(SQLStatementContextFactory.newInstance(createShardingSphereMetaData(database),
params, parse(sql), DATABASE_NAME), sql, params);
}
private ShardingSphereMetaData createShardingSphereMetaData(final
ShardingSphereDatabase database) {
@@ -192,4 +148,39 @@ public final class ShardingRouteCacheableCheckerTest {
CacheOption cacheOption = new CacheOption(0, 0);
return new SQLStatementParserEngine("PostgreSQL", cacheOption,
cacheOption, false).parse(sql, false);
}
+
+ private static class TestCaseArgumentsProvider implements
ArgumentsProvider {
+
+ @Override
+ public Stream<? extends Arguments> provideArguments(final
ExtensionContext extensionContext) {
+ Collection<? extends Arguments> probablyCacheableCases =
Arrays.asList(
+ Arguments.of("insert into t_broadcast_table
(broadcast_table_id, broadcast_table_col1) values (?, ?)", Arrays.asList(1,
"foo"), true, Collections.emptyList()),
+ Arguments.of("insert into t_warehouse (id) values (?)",
Collections.singletonList(1), true, Collections.singletonList(0)),
+ Arguments.of("select * from t_warehouse where id = ?",
Collections.singletonList(1), true, Collections.singletonList(0)),
+ Arguments.of("select * from t_warehouse where id in (?, ?,
?)", Arrays.asList(1, 2, 3), true, Arrays.asList(0, 1, 2)),
+ Arguments.of("select * from t_warehouse where id between ?
and ?", Arrays.asList(1, 10), true, Arrays.asList(0, 1)),
+ Arguments.of("select * from t_warehouse where id between ?
and ? limit ? offset ?", Arrays.asList(1, 10, 100, 50), true, Arrays.asList(0,
1)),
+ Arguments.of("update t_broadcast_table set
broadcast_table_col1 = ?", Collections.singletonList(0), true,
Collections.emptyList()),
+ Arguments.of("update t_broadcast_table set
broadcast_table_col1 = ? where broadcast_table_id = ?", Arrays.asList(0, 1),
true, Collections.emptyList()),
+ Arguments.of("update t_warehouse set warehouse_name = ?
where id = ?", Arrays.asList("foo", 1), true, Collections.singletonList(1)),
+ Arguments.of("delete from t_broadcast_table",
Collections.emptyList(), true, Collections.emptyList()),
+ Arguments.of("delete from t_warehouse where id = ?",
Collections.singletonList(1), true, Collections.singletonList(0)));
+ Collection<? extends Arguments> nonCacheableCases = Arrays.asList(
+ Arguments.of("create table t_warehouse (id int4 not null
primary key)", Collections.emptyList(), false, Collections.emptyList()),
+ Arguments.of("insert into t_warehouse (id) select
warehouse_id from t_order", Collections.emptyList(), false,
Collections.emptyList()),
+ Arguments.of("insert into t_broadcast_table
(broadcast_table_id, broadcast_table_col1) values (?, ?), (?, ?)",
Arrays.asList(1, "foo", 2, "bar"), false, Collections.emptyList()),
+ Arguments.of("insert into t_warehouse (id) values (?),
(?)", Arrays.asList(1, 2), false, Collections.emptyList()),
+ Arguments.of("insert into t_non_sharding_table (id) values
(?)", Collections.singletonList(1), false, Collections.emptyList()),
+ Arguments.of("insert into
t_non_cacheable_database_sharding (id) values (?)",
Collections.singletonList(1), false, Collections.emptyList()),
+ Arguments.of("insert into t_non_cacheable_table_sharding
(id) values (?)", Collections.singletonList(1), false, Collections.emptyList()),
+ Arguments.of("insert into t_warehouse (id) values
(now())", Collections.emptyList(), false, Collections.emptyList()),
+ Arguments.of("select * from t_broadcast_table where
broadcast_table_id = ?", Collections.singletonList(1), false,
Collections.emptyList()),
+ Arguments.of("select * from t_warehouse w join t_order o
on w.id = o.warehouse_id where w.id = ?", Collections.singletonList(1), false,
Collections.emptyList()),
+ Arguments.of("update t_warehouse set warehouse_name = ?
where id = (select max(warehouse_id) from t_order)",
Collections.singletonList("foo"), false, Collections.emptyList()),
+ Arguments.of("delete from t_order where warehouse_id in
(1, 2, now())", Collections.emptyList(), false, Collections.emptyList()),
+ Arguments.of("delete from t_order where warehouse_id
between now() and now()", Collections.emptyList(), false,
Collections.emptyList()),
+ Arguments.of("delete from t_order o where o.warehouse_id
in (select w.id from t_warehouse w)", Collections.emptyList(), false,
Collections.emptyList()));
+ return Stream.of(probablyCacheableCases.stream(),
nonCacheableCases.stream()).flatMap(Function.identity());
+ }
+ }
}