You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2026/03/15 13:24:54 UTC
(shardingsphere) branch master updated: Add more test cases on SystemSchemaUtilsTest (#38448)
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 a3f94678f09 Add more test cases on SystemSchemaUtilsTest (#38448)
a3f94678f09 is described below
commit a3f94678f0931b2a39a5cd6fc29aa7df6e1ad8ce
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Mar 15 21:24:47 2026 +0800
Add more test cases on SystemSchemaUtilsTest (#38448)
* Add more test cases on SystemSchemaUtilsTest
* Add more test cases on SystemSchemaUtilsTest
---
.../schema/util/SystemSchemaUtilsTest.java | 146 +++++++++------------
1 file changed, 59 insertions(+), 87 deletions(-)
diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtilsTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtilsTest.java
index e5e1e7d3d86..e16f556985b 100644
--- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtilsTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtilsTest.java
@@ -22,117 +22,89 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ExpressionProjectionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
-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.stream.Stream;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
class SystemSchemaUtilsTest {
- @Test
- void assertContainsSystemSchemaForMySQL() {
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "MySQL");
- ShardingSphereDatabase informationSchemaDatabase = mockDatabase("information_schema", false);
- assertTrue(SystemSchemaUtils.containsSystemSchema(databaseType, Arrays.asList("information_schema", "mysql"), informationSchemaDatabase));
- ShardingSphereDatabase shardingSchemaDatabase = mockDatabase("sharding_db", false);
- assertFalse(SystemSchemaUtils.containsSystemSchema(databaseType, Collections.singletonList("sharding_db"), shardingSchemaDatabase));
- ShardingSphereDatabase customizedInformationSchemaDatabase = mockDatabase("information_schema", true);
- assertFalse(SystemSchemaUtils.containsSystemSchema(databaseType, Arrays.asList("information_schema", "mysql"), customizedInformationSchemaDatabase));
- }
-
- @Test
- void assertContainsSystemSchemaForPostgreSQL() {
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
- ShardingSphereDatabase informationSchemaDatabase = mockDatabase("information_schema", false);
- assertTrue(SystemSchemaUtils.containsSystemSchema(databaseType, Arrays.asList("information_schema", "pg_catalog"), informationSchemaDatabase));
- ShardingSphereDatabase shardingSchemaDatabase = mockDatabase("sharding_db", false);
- assertFalse(SystemSchemaUtils.containsSystemSchema(databaseType, Collections.singletonList("sharding_db"), shardingSchemaDatabase));
- ShardingSphereDatabase customizedInformationSchemaDatabase = mockDatabase("information_schema", true);
- assertTrue(SystemSchemaUtils.containsSystemSchema(databaseType, Arrays.asList("information_schema", "pg_catalog"), customizedInformationSchemaDatabase));
- }
+ private static final DatabaseType MYSQL_DATABASE_TYPE = TypedSPILoader.getService(DatabaseType.class, "MySQL");
- @Test
- void assertContainsSystemSchemaForOpenGaussSQL() {
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "openGauss");
- ShardingSphereDatabase informationSchemaDatabase = mockDatabase("information_schema", false);
- assertTrue(SystemSchemaUtils.containsSystemSchema(databaseType, Arrays.asList("information_schema", "pg_catalog"), informationSchemaDatabase));
- ShardingSphereDatabase shardingSchemaDatabase = mockDatabase("sharding_db", false);
- assertFalse(SystemSchemaUtils.containsSystemSchema(databaseType, Collections.singletonList("sharding_db"), shardingSchemaDatabase));
- ShardingSphereDatabase customizedInformationSchemaDatabase = mockDatabase("information_schema", true);
- assertTrue(SystemSchemaUtils.containsSystemSchema(databaseType, Arrays.asList("information_schema", "pg_catalog"), customizedInformationSchemaDatabase));
- ShardingSphereDatabase customizedGaussDBDatabase = mockDatabase("gaussdb", true);
- assertFalse(SystemSchemaUtils.containsSystemSchema(databaseType, Collections.emptyList(), customizedGaussDBDatabase));
- }
+ private static final DatabaseType POSTGRESQL_DATABASE_TYPE = TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
- @Test
- void assertIsSystemSchemaWithUnCompleteDatabase() {
- ShardingSphereDatabase informationSchemaDatabase = mockDatabase("information_schema", false);
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "MySQL");
- when(informationSchemaDatabase.getProtocolType()).thenReturn(databaseType);
- assertTrue(SystemSchemaUtils.isSystemSchema(informationSchemaDatabase));
- }
+ private static final DatabaseType OPEN_GAUSS_DATABASE_TYPE = TypedSPILoader.getService(DatabaseType.class, "openGauss");
- @Test
- void assertIsSystemSchemaWithCompleteDatabaseAndDefaultSchema() {
- ShardingSphereDatabase pgCatalogDatabase = mockDatabase("pg_catalog", true);
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
- when(pgCatalogDatabase.getProtocolType()).thenReturn(databaseType);
- assertTrue(SystemSchemaUtils.isSystemSchema(pgCatalogDatabase));
- }
+ private static final DatabaseType FIXTURE_DATABASE_TYPE = TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
- @Test
- void assertIsSystemSchemaWithEmptyDatabase() {
- ShardingSphereDatabase userDatabase = mockDatabase("foo_db", true);
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
- when(userDatabase.getProtocolType()).thenReturn(databaseType);
- assertFalse(SystemSchemaUtils.isSystemSchema(userDatabase));
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("containsSystemSchemaArguments")
+ void assertContainsSystemSchema(final String name, final DatabaseType databaseType, final Collection<String> schemaNames,
+ final String databaseName, final boolean complete, final boolean expectedContainsSystemSchema) {
+ assertThat(SystemSchemaUtils.containsSystemSchema(databaseType, schemaNames, mockDatabase(databaseName, complete, databaseType)), is(expectedContainsSystemSchema));
}
- @Test
- void assertIsSystemSchemaWithoutDefaultSchema() {
- ShardingSphereDatabase userDatabase = mockDatabase("foo_db", false);
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
- when(userDatabase.getProtocolType()).thenReturn(databaseType);
- assertFalse(SystemSchemaUtils.isSystemSchema(userDatabase));
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("isSystemSchemaArguments")
+ void assertIsSystemSchema(final String name, final DatabaseType databaseType, final String databaseName, final boolean complete, final boolean expectedSystemSchema) {
+ assertThat(SystemSchemaUtils.isSystemSchema(mockDatabase(databaseName, complete, databaseType)), is(expectedSystemSchema));
}
- @Test
- void assertIsDriverQuerySystemCatalogWithoutOption() {
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "MySQL");
- ExpressionProjectionSegment projection = new ExpressionProjectionSegment(0, 10, "version()");
- assertFalse(SystemSchemaUtils.isDriverQuerySystemCatalog(databaseType, Collections.singleton(projection)));
+ private ShardingSphereDatabase mockDatabase(final String databaseName, final boolean complete, final DatabaseType databaseType) {
+ ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
+ when(result.getName()).thenReturn(databaseName);
+ when(result.isComplete()).thenReturn(complete);
+ when(result.getProtocolType()).thenReturn(databaseType);
+ return result;
}
- @Test
- void assertIsDriverQuerySystemCatalogWithMultipleProjections() {
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "openGauss");
- ExpressionProjectionSegment projection1 = new ExpressionProjectionSegment(0, 10, "version()");
- ExpressionProjectionSegment projection2 = new ExpressionProjectionSegment(11, 20, "current_database()");
- assertFalse(SystemSchemaUtils.isDriverQuerySystemCatalog(databaseType, Arrays.asList(projection1, projection2)));
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("isDriverQuerySystemCatalogArguments")
+ void assertIsDriverQuerySystemCatalog(final String name, final DatabaseType databaseType, final Collection<ProjectionSegment> projections, final boolean expectedDriverQuerySystemCatalog) {
+ assertThat(SystemSchemaUtils.isDriverQuerySystemCatalog(databaseType, projections), is(expectedDriverQuerySystemCatalog));
}
- @Test
- void assertIsDriverQuerySystemCatalogWithNonExpressionProjection() {
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "openGauss");
- assertFalse(SystemSchemaUtils.isDriverQuerySystemCatalog(databaseType, Collections.singleton(mock(ProjectionSegment.class))));
+ private static Stream<Arguments> containsSystemSchemaArguments() {
+ return Stream.of(
+ Arguments.of("returns true when input schema names contain a MySQL system schema", MYSQL_DATABASE_TYPE,
+ Arrays.asList("information_schema", "mysql"), "information_schema", false, true),
+ Arguments.of("returns false immediately for a complete MySQL database without default schema", MYSQL_DATABASE_TYPE,
+ Collections.emptyList(), "information_schema", true, false),
+ Arguments.of("returns true when incomplete MySQL database name is a system schema", MYSQL_DATABASE_TYPE,
+ Collections.emptyList(), "information_schema", false, true),
+ Arguments.of("returns false when schema names do not contain a MySQL system schema", MYSQL_DATABASE_TYPE,
+ Collections.singletonList("sharding_db"), "sharding_db", false, false),
+ Arguments.of("returns false when PostgreSQL falls back to database name with default schema", POSTGRESQL_DATABASE_TYPE,
+ Collections.emptyList(), "pg_catalog", true, false));
}
- @Test
- void assertIsDriverQuerySystemCatalogWithValidExpression() {
- DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "openGauss");
- ExpressionProjectionSegment projection = new ExpressionProjectionSegment(0, 10, "version()");
- assertTrue(SystemSchemaUtils.isDriverQuerySystemCatalog(databaseType, Collections.singleton(projection)));
+ private static Stream<Arguments> isSystemSchemaArguments() {
+ return Stream.of(
+ Arguments.of("returns true for an incomplete MySQL system database", MYSQL_DATABASE_TYPE, "information_schema", false, true),
+ Arguments.of("returns true for a complete PostgreSQL system schema", POSTGRESQL_DATABASE_TYPE, "pg_catalog", true, true),
+ Arguments.of("returns false for a complete MySQL database without default schema", MYSQL_DATABASE_TYPE, "information_schema", true, false),
+ Arguments.of("returns false for a non-system fixture database", FIXTURE_DATABASE_TYPE, "foo_db", false, false));
}
- private ShardingSphereDatabase mockDatabase(final String databaseName, final boolean isComplete) {
- ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
- when(result.getName()).thenReturn(databaseName);
- when(result.isComplete()).thenReturn(isComplete);
- return result;
+ private static Stream<Arguments> isDriverQuerySystemCatalogArguments() {
+ return Stream.of(
+ Arguments.of("returns false when multiple projections are present", OPEN_GAUSS_DATABASE_TYPE,
+ Arrays.asList(new ExpressionProjectionSegment(0, "version()".length(), "version()"), new ExpressionProjectionSegment(0, "current_database()".length(), "current_database()")),
+ false),
+ Arguments.of("returns false when the only projection is not an expression", OPEN_GAUSS_DATABASE_TYPE,
+ Collections.singletonList(mock(ProjectionSegment.class)), false),
+ Arguments.of("returns false when the database type does not define system catalog expressions", MYSQL_DATABASE_TYPE,
+ Collections.singletonList(new ExpressionProjectionSegment(0, "version()".length(), "version()")), false),
+ Arguments.of("returns true when openGauss projection matches a system catalog expression", OPEN_GAUSS_DATABASE_TYPE,
+ Collections.singletonList(new ExpressionProjectionSegment(0, "version()".length(), "version()")), true));
}
}