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 31f11d0db82 Add more test cases on
FirebirdNonFixedLengthColumnSizeLoaderTest (#38119)
31f11d0db82 is described below
commit 31f11d0db8279baba639ecd539268c008cea0735
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Feb 21 20:37:45 2026 +0800
Add more test cases on FirebirdNonFixedLengthColumnSizeLoaderTest (#38119)
* Add more test cases on FirebirdNonFixedLengthColumnSizeLoaderTest
* Add more test cases on FirebirdNonFixedLengthColumnSizeLoaderTest
---
...FirebirdNonFixedLengthColumnSizeLoaderTest.java | 94 ++++++++++++++++------
1 file changed, 68 insertions(+), 26 deletions(-)
diff --git
a/database/connector/dialect/firebird/src/test/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/loader/FirebirdNonFixedLengthColumnSizeLoaderTest.java
b/database/connector/dialect/firebird/src/test/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/loader/FirebirdNonFixedLengthColumnSizeLoaderTest.java
index 4a63bd3be98..3b472ab8dc1 100644
---
a/database/connector/dialect/firebird/src/test/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/loader/FirebirdNonFixedLengthColumnSizeLoaderTest.java
+++
b/database/connector/dialect/firebird/src/test/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/loader/FirebirdNonFixedLengthColumnSizeLoaderTest.java
@@ -20,9 +20,11 @@ package
org.apache.shardingsphere.database.connector.firebird.metadata.data.load
import
org.apache.shardingsphere.database.connector.core.metadata.data.loader.MetaDataLoaderMaterial;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -32,20 +34,20 @@ import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
-import java.util.Collection;
import java.util.Collections;
import java.util.Map;
+import java.util.stream.Stream;
-import static org.hamcrest.Matchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasKey;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
-import static org.junit.jupiter.api.Assertions.assertFalse;
@ExtendWith(MockitoExtension.class)
class FirebirdNonFixedLengthColumnSizeLoaderTest {
- private static final Collection<String> TABLES =
Collections.singleton("test_table");
+ private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "Firebird");
@Mock
private DataSource dataSource;
@@ -59,33 +61,73 @@ class FirebirdNonFixedLengthColumnSizeLoaderTest {
@Mock
private ResultSet columnsResultSet;
- private MetaDataLoaderMaterial material;
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("recordedColumnSizeArguments")
+ void assertLoadWithColumnMetadata(final String name, final int dataType,
final String columnName, final int columnSize, final Map<String, Integer>
expected) throws SQLException {
+ mockLoadPrerequisites();
+ when(columnsResultSet.next()).thenReturn(true, false);
+ when(columnsResultSet.getString("TABLE_NAME")).thenReturn("FOO_TBL");
+ when(columnsResultSet.getInt("DATA_TYPE")).thenReturn(dataType);
+ when(columnsResultSet.getString("COLUMN_NAME")).thenReturn(columnName);
+ when(columnsResultSet.getInt("COLUMN_SIZE")).thenReturn(columnSize);
+ MetaDataLoaderMaterial material = new
MetaDataLoaderMaterial(Collections.singleton("foo_tbl"), "logic_ds",
dataSource, databaseType, "schema");
+ Map<String, Map<String, Integer>> actual = new
FirebirdNonFixedLengthColumnSizeLoader(material).load();
+ assertThat(actual, hasKey("foo_tbl"));
+ assertThat(actual.get("foo_tbl"), is(expected));
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("emptyColumnMetadataArguments")
+ void assertLoadWithEmptyColumnMetadata(final String name, final String
tableName, final Integer dataType, final boolean stubColumnName, final String
columnName,
+ final boolean stubColumnSize, final
Integer columnSize, final boolean stubWasNull, final Boolean wasNull) throws
SQLException {
+ mockLoadPrerequisites();
+ when(columnsResultSet.next()).thenReturn(true, false);
+ when(columnsResultSet.getString("TABLE_NAME")).thenReturn(tableName);
+ if (null != dataType) {
+ when(columnsResultSet.getInt("DATA_TYPE")).thenReturn(dataType);
+ }
+ if (stubColumnName) {
+
when(columnsResultSet.getString("COLUMN_NAME")).thenReturn(columnName);
+ }
+ if (stubColumnSize) {
+
when(columnsResultSet.getInt("COLUMN_SIZE")).thenReturn(columnSize);
+ }
+ if (stubWasNull) {
+ when(columnsResultSet.wasNull()).thenReturn(wasNull);
+ }
+ MetaDataLoaderMaterial material = new
MetaDataLoaderMaterial(Collections.singleton("foo_tbl"), "logic_ds",
dataSource, databaseType, "schema");
+ Map<String, Map<String, Integer>> actual = new
FirebirdNonFixedLengthColumnSizeLoader(material).load();
+ assertThat(actual, hasKey("foo_tbl"));
+ assertTrue(actual.get("foo_tbl").isEmpty());
+ }
+
+ @Test
+ void assertLoadWithNoTables() throws SQLException {
+ MetaDataLoaderMaterial material = new
MetaDataLoaderMaterial(Collections.emptyList(), "logic_ds", dataSource,
databaseType, "schema");
+ assertTrue(new
FirebirdNonFixedLengthColumnSizeLoader(material).load().isEmpty());
+ }
- @BeforeEach
- void setUp() throws SQLException {
- DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "Firebird");
- material = new MetaDataLoaderMaterial(TABLES, "logic_ds", dataSource,
databaseType, "schema");
+ private void mockLoadPrerequisites() throws SQLException {
when(dataSource.getConnection()).thenReturn(connection);
when(connection.getMetaData()).thenReturn(databaseMetaData);
when(connection.getCatalog()).thenReturn("catalog");
when(connection.getSchema()).thenReturn("schema");
- when(databaseMetaData.getColumns("catalog", "schema", "TEST_TABLE",
"%")).thenReturn(columnsResultSet);
+ when(databaseMetaData.getColumns("catalog", "schema", "FOO_TBL",
"%")).thenReturn(columnsResultSet);
}
- @Test
- void assertLoadReturnsNonFixedLengthSizes() throws SQLException {
- when(columnsResultSet.next()).thenReturn(true, true, false);
-
when(columnsResultSet.getString("TABLE_NAME")).thenReturn("TEST_TABLE",
"TEST_TABLE");
- when(columnsResultSet.getInt("DATA_TYPE")).thenReturn(Types.CHAR,
Types.VARBINARY);
- when(columnsResultSet.getString("COLUMN_NAME")).thenReturn("char_col",
"varbinary_col");
- when(columnsResultSet.getInt("COLUMN_SIZE")).thenReturn(128, 64);
- when(columnsResultSet.wasNull()).thenReturn(false, false);
- Map<String, Map<String, Integer>> actual = new
FirebirdNonFixedLengthColumnSizeLoader(material).load();
- assertThat(actual, hasKey("test_table"));
- Map<String, Integer> actualTableSizes = actual.get("test_table");
- assertThat(actualTableSizes.size(), is(2));
- assertThat(actualTableSizes.get("CHAR_COL"), is(128));
- assertFalse(actualTableSizes.containsKey("BIGINT_COL"));
- assertThat(actualTableSizes.get("VARBINARY_COL"), is(64));
+ private static Stream<Arguments> recordedColumnSizeArguments() {
+ return Stream.of(
+ Arguments.of("records char column size", Types.CHAR,
"char_col", 128, Collections.singletonMap("CHAR_COL", 128)),
+ Arguments.of("records varchar column size", Types.VARCHAR,
"varchar_col", 96, Collections.singletonMap("VARCHAR_COL", 96)),
+ Arguments.of("records varbinary column size", Types.VARBINARY,
"varbinary_col", 64, Collections.singletonMap("VARBINARY_COL", 64)));
+ }
+
+ private static Stream<Arguments> emptyColumnMetadataArguments() {
+ return Stream.of(
+ Arguments.of("skips mismatched table metadata", "BAR_TBL",
null, false, null, false, null, false, null),
+ Arguments.of("skips fixed length type", "FOO_TBL",
Types.BIGINT, false, null, false, null, false, null),
+ Arguments.of("skips null column name", "FOO_TBL", Types.CHAR,
true, null, false, null, false, null),
+ Arguments.of("skips null column size", "FOO_TBL", Types.CHAR,
true, "char_col", true, 128, true, true),
+ Arguments.of("skips non-positive column size", "FOO_TBL",
Types.CHAR, true, "char_col", true, 0, true, false));
}
}