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]

Reply via email to