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 c0df5af0516 Enhance test coverage for infra-common module core
components (#36983)
c0df5af0516 is described below
commit c0df5af0516cac0e17daad357ae69429cdde27ed
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Nov 1 13:21:28 2025 +0800
Enhance test coverage for infra-common module core components (#36983)
* Enhance test coverage for infra-common module core components
- Add ShardingSphereDatabaseFactoryTest with precise assertions using
Hamcrest matchers
- Add MetaDataReviseEngineTest with comprehensive schema revision testing
- Add ColumnReviseEngineTest with column metadata revision validation
- Add PostgreSQL table statistics collector tests for pg_class and
pg_namespace
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* Refactor ShardingSphereStatisticsCollector
* Refactor ShardingSphereStatisticsCollector
---------
Co-authored-by: Claude <[email protected]>
---
.../ShardingSphereDatabaseFactoryTest.java | 58 ++++++++++++++++
.../schema/reviser/MetaDataReviseEngineTest.java | 62 +++++++++++++++++
.../reviser/column/ColumnReviseEngineTest.java | 66 ++++++++++++++++++
...tgreSQLPgClassTableStatisticsCollectorTest.java | 79 ++++++++++++++++++++++
...SQLPgNamespaceTableStatisticsCollectorTest.java | 72 ++++++++++++++++++++
5 files changed, 337 insertions(+)
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactoryTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactoryTest.java
new file mode 100644
index 00000000000..e564fb4da24
--- /dev/null
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactoryTest.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shardingsphere.infra.metadata.database;
+
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundException;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.junit.jupiter.api.Test;
+
+import java.util.Collections;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+
+class ShardingSphereDatabaseFactoryTest {
+
+ private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
+
+ @Test
+ void assertCreateSystemDatabase() {
+ ShardingSphereDatabase actual =
ShardingSphereDatabaseFactory.create("system_db", databaseType, new
ConfigurationProperties(new Properties()));
+ assertThat(actual.getName(), is("system_db"));
+ assertThat(actual.getProtocolType(), is(databaseType));
+ assertTrue(actual.getRuleMetaData().getRules().isEmpty());
+ }
+
+ @Test
+ void assertCreateDatabaseWithComputeNodeInstanceContext() {
+ assertThrows(ServiceProviderNotFoundException.class, () ->
ShardingSphereDatabaseFactory.create(null, mock(), mock(), new
ConfigurationProperties(new Properties()), mock()));
+ }
+
+ @Test
+ void assertCreateDatabaseWithSchemas() {
+ ShardingSphereDatabase actual =
ShardingSphereDatabaseFactory.create("foo_db", databaseType, mock(), mock(),
Collections.emptyList());
+ assertThat(actual.getName(), is("foo_db"));
+ assertThat(actual.getProtocolType(), is(databaseType));
+ }
+}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEngineTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEngineTest.java
new file mode 100644
index 00000000000..57682e0d4b4
--- /dev/null
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEngineTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shardingsphere.infra.metadata.database.schema.reviser;
+
+import
org.apache.shardingsphere.database.connector.core.metadata.data.model.SchemaMetaData;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import org.junit.jupiter.api.Test;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class MetaDataReviseEngineTest {
+
+ private final MetaDataReviseEngine engine = new
MetaDataReviseEngine(Collections.emptyList());
+
+ @Test
+ void assertRevise() {
+ Map<String, ShardingSphereSchema> actual =
engine.revise(Collections.singletonMap("foo_schema", new
SchemaMetaData("foo_schema", Collections.emptyList())),
createBuilderMaterial());
+ assertThat(actual.size(), is(1));
+ ShardingSphereSchema schema = actual.get("foo_schema");
+ assertThat(schema.getName(), is("foo_schema"));
+ assertTrue(schema.getAllTables().isEmpty());
+ assertTrue(schema.getAllViews().isEmpty());
+ }
+
+ @Test
+ void assertReviseWithEmptySchemaMetaDataMap() {
+ Map<String, ShardingSphereSchema> actual =
engine.revise(Collections.emptyMap(), createBuilderMaterial());
+ assertThat(actual.size(), is(1));
+ ShardingSphereSchema schema = actual.get("default_schema");
+ assertThat(schema.getName(), is("default_schema"));
+ assertTrue(schema.getAllTables().isEmpty());
+ assertTrue(schema.getAllViews().isEmpty());
+ assertTrue(schema.isEmpty());
+ }
+
+ private GenericSchemaBuilderMaterial createBuilderMaterial() {
+ return new GenericSchemaBuilderMaterial(Collections.emptyMap(),
Collections.emptyList(), new ConfigurationProperties(new Properties()),
"default_schema");
+ }
+}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/column/ColumnReviseEngineTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/column/ColumnReviseEngineTest.java
new file mode 100644
index 00000000000..53868c0ebec
--- /dev/null
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/column/ColumnReviseEngineTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
org.apache.shardingsphere.infra.metadata.database.schema.reviser.column;
+
+import
org.apache.shardingsphere.database.connector.core.metadata.data.model.ColumnMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.reviser.MetaDataReviseEntry;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class ColumnReviseEngineTest {
+
+ @Mock
+ private ShardingSphereRule rule;
+
+ @Mock
+ private MetaDataReviseEntry<ShardingSphereRule> reviseEntry;
+
+ @Test
+ void assertRevise() {
+ String tableName = "foo_tbl";
+ when(reviseEntry.getColumnExistedReviser(rule,
tableName)).thenReturn(Optional.empty());
+ when(reviseEntry.getColumnNameReviser(rule,
tableName)).thenReturn(Optional.empty());
+ when(reviseEntry.getColumnGeneratedReviser(rule,
tableName)).thenReturn(Optional.empty());
+ ColumnMetaData columnMetaData = new ColumnMetaData("foo_col", 1, true,
false, true, false, false, false);
+ Collection<ColumnMetaData> actual = new ColumnReviseEngine<>(rule,
reviseEntry).revise(tableName, Collections.singleton(columnMetaData));
+ assertThat(actual.size(), is(1));
+ ColumnMetaData revisedColumn = actual.iterator().next();
+ assertThat(revisedColumn.getName(), is("foo_col"));
+ assertThat(revisedColumn.getDataType(), is(1));
+ assertTrue(revisedColumn.isPrimaryKey());
+ assertFalse(revisedColumn.isGenerated());
+ assertTrue(revisedColumn.isCaseSensitive());
+ assertFalse(revisedColumn.isVisible());
+ assertFalse(revisedColumn.isUnsigned());
+ assertFalse(revisedColumn.isNullable());
+ }
+}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/collector/postgresql/table/PostgreSQLPgClassTableStatisticsCollectorTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/collector/postgresql/table/PostgreSQLPgClassTableStatisticsCollectorTest.java
new file mode 100644
index 00000000000..c0e62d59134
--- /dev/null
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/collector/postgresql/table/PostgreSQLPgClassTableStatisticsCollectorTest.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
org.apache.shardingsphere.infra.metadata.statistics.collector.postgresql.table;
+
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import
org.apache.shardingsphere.infra.metadata.statistics.collector.postgresql.PostgreSQLTableStatisticsCollector;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class PostgreSQLPgClassTableStatisticsCollectorTest {
+
+ private final PostgreSQLTableStatisticsCollector collector =
TypedSPILoader.getService(PostgreSQLTableStatisticsCollector.class,
"pg_catalog.pg_class");
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ShardingSphereMetaData metaData;
+
+ @Test
+ void assertCollectWithPublicSchemaExists() throws SQLException {
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+ when(table.getName()).thenReturn("foo_tbl");
+
when(metaData.getDatabase("foo_db").getSchema("public").getAllTables()).thenReturn(Collections.singleton(table));
+ Collection<Map<String, Object>> actual = collector.collect("foo_db",
"pg_catalog", "pg_class", metaData);
+ assertThat(actual.size(), is(1));
+ Map<String, Object> rowData = actual.iterator().next();
+ assertThat(rowData.get("oid"), is(0L));
+ assertThat(rowData.get("relnamespace"), is(0L));
+ assertThat(rowData.get("relname"), is("foo_tbl"));
+ assertThat(rowData.get("relkind"), is("r"));
+ }
+
+ @Test
+ void assertCollectWithPublicSchemaNotExists() throws SQLException {
+
when(metaData.getDatabase("foo_db").getSchema("public")).thenReturn(null);
+ Collection<Map<String, Object>> actual = collector.collect("foo_db",
"pg_catalog", "pg_class", metaData);
+ assertTrue(actual.isEmpty());
+ }
+
+ @Test
+ void assertGetSchemaName() {
+ assertThat(collector.getSchemaName(), is("pg_catalog"));
+ }
+
+ @Test
+ void assertGetTableName() {
+ assertThat(collector.getTableName(), is("pg_class"));
+ }
+}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/collector/postgresql/table/PostgreSQLPgNamespaceTableStatisticsCollectorTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/collector/postgresql/table/PostgreSQLPgNamespaceTableStatisticsCollectorTest.java
new file mode 100644
index 00000000000..c5a6ea88a56
--- /dev/null
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/collector/postgresql/table/PostgreSQLPgNamespaceTableStatisticsCollectorTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
org.apache.shardingsphere.infra.metadata.statistics.collector.postgresql.table;
+
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.statistics.collector.postgresql.PostgreSQLTableStatisticsCollector;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class PostgreSQLPgNamespaceTableStatisticsCollectorTest {
+
+ private final PostgreSQLTableStatisticsCollector collector =
TypedSPILoader.getService(PostgreSQLTableStatisticsCollector.class,
"pg_catalog.pg_namespace");
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ShardingSphereMetaData metaData;
+
+ @SuppressWarnings("unchecked")
+ @Test
+ void assertCollectWithMultipleSchemas() throws SQLException {
+ when(metaData.getDatabase("foo_db").getAllSchemas())
+ .thenReturn(Arrays.asList(new ShardingSphereSchema("public"),
new ShardingSphereSchema("foo_schema"), new
ShardingSphereSchema("bar_schema")));
+ Collection<Map<String, Object>> actual = collector.collect("foo_db",
"pg_catalog", "pg_namespace", metaData);
+ assertThat(actual.size(), is(3));
+ Map<String, Object>[] results = actual.toArray(new Map[0]);
+ assertThat(results[0].get("oid"), is(0L));
+ assertThat(results[0].get("nspname"), is("public"));
+ assertThat(results[1].get("oid"), is(1L));
+ assertThat(results[1].get("nspname"), is("foo_schema"));
+ assertThat(results[2].get("oid"), is(2L));
+ assertThat(results[2].get("nspname"), is("bar_schema"));
+ }
+
+ @Test
+ void assertGetSchemaName() {
+ assertThat(collector.getSchemaName(), is("pg_catalog"));
+ }
+
+ @Test
+ void assertGetTableName() {
+ assertThat(collector.getTableName(), is("pg_namespace"));
+ }
+}