Copilot commented on code in PR #4202:
URL: https://github.com/apache/flink-cdc/pull/4202#discussion_r2875939394
##########
flink-cdc-connect/flink-cdc-pipeline-connectors/flink-cdc-pipeline-connector-postgres/src/test/java/org/apache/flink/cdc/connectors/postgres/factory/PostgresDataSourceFactoryTest.java:
##########
@@ -305,6 +310,34 @@ public void testTableValidationWithOriginalBugScenario() {
.hasMessageContaining("Cannot find any table by the option
'tables'");
}
+ @Test
+ public void testSupportedMetadataColumns() {
+ Map<String, String> options = new HashMap<>();
+ options.put(HOSTNAME.key(), POSTGRES_CONTAINER.getHost());
+ options.put(
+ PG_PORT.key(),
String.valueOf(POSTGRES_CONTAINER.getMappedPort(POSTGRESQL_PORT)));
+ options.put(USERNAME.key(), TEST_USER);
+ options.put(PASSWORD.key(), TEST_PASSWORD);
+ options.put(TABLES.key(), POSTGRES_CONTAINER.getDatabaseName() +
".inventory.prod\\.*");
+ options.put(SLOT_NAME.key(), slotName);
+ Factory.Context context = new
MockContext(Configuration.fromMap(options));
+
+ PostgresDataSourceFactory factory = new PostgresDataSourceFactory();
+ PostgresDataSource dataSource = (PostgresDataSource)
factory.createDataSource(context);
+
+ SupportedMetadataColumn[] metadataColumns =
dataSource.supportedMetadataColumns();
+ assertThat(metadataColumns).hasSize(4);
+ assertThat(metadataColumns[0]).isInstanceOf(OpTsMetadataColumn.class);
+ assertThat(metadataColumns[0].getName()).isEqualTo("op_ts");
+
assertThat(metadataColumns[1]).isInstanceOf(TableNameMetadataColumn.class);
+ assertThat(metadataColumns[1].getName()).isEqualTo("table_name");
+
assertThat(metadataColumns[2]).isInstanceOf(DatabaseNameMetadataColumn.class);
+ assertThat(metadataColumns[2].getName()).isEqualTo("database_name");
+
assertThat(metadataColumns[3]).isInstanceOf(SchemaNameMetadataColumn.class);
+ assertThat(metadataColumns[3].getName()).isEqualTo("schema_name");
+
Review Comment:
`supportedMetadataColumns()` returns an array but its element ordering is
not part of the `DataSource` contract; asserting on fixed indices makes this
test brittle to harmless reordering. Consider asserting by (name -> class)
mapping or using assertions that are order-insensitive (e.g., extract
`getName()` and verify it contains exactly the expected set, and separately
verify each expected name maps to the expected implementation).
```suggestion
// Verify that the set of metadata column names is exactly as
expected, ignoring order.
List<String> metadataNames =
Arrays.stream(metadataColumns)
.map(SupportedMetadataColumn::getName)
.collect(Collectors.toList());
assertThat(metadataNames)
.containsExactlyInAnyOrder(
"op_ts", "table_name", "database_name",
"schema_name");
// Verify that each metadata column name maps to the expected
implementation class.
Map<String, Class<?>> metadataTypesByName =
Arrays.stream(metadataColumns)
.collect(
Collectors.toMap(
SupportedMetadataColumn::getName,
SupportedMetadataColumn::getClass));
assertThat(metadataTypesByName.get("op_ts"))
.isEqualTo(OpTsMetadataColumn.class);
assertThat(metadataTypesByName.get("table_name"))
.isEqualTo(TableNameMetadataColumn.class);
assertThat(metadataTypesByName.get("database_name"))
.isEqualTo(DatabaseNameMetadataColumn.class);
assertThat(metadataTypesByName.get("schema_name"))
.isEqualTo(SchemaNameMetadataColumn.class);
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]