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 6ae7b539d6e Add comprehensive test coverage for
PostgreSQLStatisticsAppender (#37017)
6ae7b539d6e is described below
commit 6ae7b539d6e63cd7caf1640b3d335398faa212dc
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Nov 6 01:04:41 2025 +0800
Add comprehensive test coverage for PostgreSQLStatisticsAppender (#37017)
* Add more test cases on PostgreSQLStatisticsAppender
* Add comprehensive test coverage for PostgreSQLStatisticsAppender
- Add assertAppendWithSchemaNotExists() test to cover when
database.containsSchema() returns false
- Add assertAppendWithTableNotExists() test to cover when
tableNames.contains() returns false
- Include corresponding mock helper methods for test scenarios
- Achieve 100% branch coverage for lines 49 and 58
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* Add more test cases on PostgreSQLStatisticsAppender
---------
Co-authored-by: Claude <[email protected]>
---
.../dialect/PostgreSQLStatisticsAppender.java | 2 +-
.../dialect/PostgreSQLStatisticsAppenderTest.java | 52 ++++++++++++++++++++--
2 files changed, 50 insertions(+), 4 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
index 258dee64bc0..ed5ce1836cd 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppender.java
@@ -46,7 +46,7 @@ public final class PostgreSQLStatisticsAppender implements
DialectStatisticsAppe
public void append(final DatabaseStatistics databaseStatistics, final
ShardingSphereDatabase database) {
for (Entry<String, Collection<String>> entry :
INIT_DATA_SCHEMA_TABLES.entrySet()) {
SchemaStatistics schemaStatistics = new SchemaStatistics();
- if (null != database.getSchema(entry.getKey())) {
+ if (database.containsSchema(entry.getKey())) {
initTables(database.getSchema(entry.getKey()),
entry.getValue(), schemaStatistics);
databaseStatistics.putSchemaStatistics(entry.getKey(),
schemaStatistics);
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
index 79dd4d9c41b..a9b1d5986d5 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLStatisticsAppenderTest.java
@@ -17,15 +17,21 @@
package org.apache.shardingsphere.infra.metadata.statistics.builder.dialect;
+import
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import org.apache.shardingsphere.infra.metadata.statistics.DatabaseStatistics;
+import
org.apache.shardingsphere.infra.metadata.statistics.builder.DialectStatisticsAppender;
import
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereDefaultStatisticsBuilder;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.junit.jupiter.api.Test;
+import java.util.Arrays;
import java.util.Collections;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
@@ -33,20 +39,23 @@ import static org.mockito.Mockito.when;
class PostgreSQLStatisticsAppenderTest {
+ private final DialectStatisticsAppender statisticsAppender =
DatabaseTypedSPILoader.getService(DialectStatisticsAppender.class,
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"));
+
@Test
void assertAppend() {
ShardingSphereDatabase database = mockDatabase();
DatabaseStatistics databaseStatistics = new
ShardingSphereDefaultStatisticsBuilder().build(database);
- new PostgreSQLStatisticsAppender().append(databaseStatistics,
database);
+ statisticsAppender.append(databaseStatistics, database);
assertTrue(databaseStatistics.containsSchemaStatistics("pg_catalog"));
assertTrue(databaseStatistics.getSchemaStatistics("pg_catalog").containsTableStatistics("pg_class"));
}
private ShardingSphereDatabase mockDatabase() {
ShardingSphereDatabase result = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
- when(result.getName()).thenReturn("logic_db");
+ when(result.getName()).thenReturn("foo_db");
ShardingSphereSchema schema = mockSchema();
- when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
+ when(result.getAllSchemas()).thenReturn(Arrays.asList(schema,
mock(ShardingSphereSchema.class)));
+ when(result.containsSchema("pg_catalog")).thenReturn(true);
when(result.getSchema("pg_catalog")).thenReturn(schema);
return result;
}
@@ -59,4 +68,41 @@ class PostgreSQLStatisticsAppenderTest {
when(result.getAllTables()).thenReturn(Collections.singleton(table));
return result;
}
+
+ @Test
+ void assertAppendWithSchemaNotExists() {
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+ when(database.getName()).thenReturn("foo_db");
+ DatabaseStatistics databaseStatistics = new
ShardingSphereDefaultStatisticsBuilder().build(database);
+ statisticsAppender.append(databaseStatistics, database);
+ assertFalse(databaseStatistics.containsSchemaStatistics("pg_catalog"));
+ }
+
+ @Test
+ void assertAppendWithTableNotExists() {
+ ShardingSphereDatabase database = mockDatabaseWithUnmatchedTables();
+ DatabaseStatistics databaseStatistics = new
ShardingSphereDefaultStatisticsBuilder().build(database);
+ statisticsAppender.append(databaseStatistics, database);
+ assertTrue(databaseStatistics.containsSchemaStatistics("pg_catalog"));
+
assertFalse(databaseStatistics.getSchemaStatistics("pg_catalog").containsTableStatistics("pg_class"));
+ }
+
+ private ShardingSphereDatabase mockDatabaseWithUnmatchedTables() {
+ ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
+ when(result.getName()).thenReturn("foo_db");
+ ShardingSphereSchema schema = mockSchemaWithUnmatchedTables();
+ when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
+ when(result.containsSchema("pg_catalog")).thenReturn(true);
+ when(result.getSchema("pg_catalog")).thenReturn(schema);
+ return result;
+ }
+
+ private ShardingSphereSchema mockSchemaWithUnmatchedTables() {
+ ShardingSphereSchema result = mock(ShardingSphereSchema.class);
+ when(result.getName()).thenReturn("pg_catalog");
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+ when(table.getName()).thenReturn("foo_tbl");
+ when(result.getAllTables()).thenReturn(Collections.singleton(table));
+ return result;
+ }
}