@@ -470,6 +470,74 @@ void testOneToOneRouting() throws Exception {
470
470
"DataChangeEvent{tableId=default_namespace.default_schema.routed1, before=[2, 2], after=[2, x], op=UPDATE, meta=()}" );
471
471
}
472
472
473
+ @ Test
474
+ void testIdenticalOneToOneRouting () throws Exception {
475
+ FlinkPipelineComposer composer = FlinkPipelineComposer .ofMiniCluster ();
476
+
477
+ // Setup value source
478
+ Configuration sourceConfig = new Configuration ();
479
+ sourceConfig .set (
480
+ ValuesDataSourceOptions .EVENT_SET_ID ,
481
+ ValuesDataSourceHelper .EventSetId .SINGLE_SPLIT_MULTI_TABLES );
482
+ SourceDef sourceDef =
483
+ new SourceDef (ValuesDataFactory .IDENTIFIER , "Value Source" , sourceConfig );
484
+
485
+ // Setup value sink
486
+ Configuration sinkConfig = new Configuration ();
487
+ sinkConfig .set (ValuesDataSinkOptions .MATERIALIZED_IN_MEMORY , true );
488
+ SinkDef sinkDef = new SinkDef (ValuesDataFactory .IDENTIFIER , "Value Sink" , sinkConfig );
489
+
490
+ // Setup route
491
+ TableId routedTable1 = TABLE_1 ;
492
+ TableId routedTable2 = TABLE_2 ;
493
+ List <RouteDef > routeDef =
494
+ Arrays .asList (
495
+ new RouteDef (TABLE_1 .toString (), routedTable1 .toString (), null , null ),
496
+ new RouteDef (TABLE_2 .toString (), routedTable2 .toString (), null , null ));
497
+
498
+ // Setup pipeline
499
+ Configuration pipelineConfig = new Configuration ();
500
+ pipelineConfig .set (PipelineOptions .PIPELINE_PARALLELISM , 1 );
501
+ PipelineDef pipelineDef =
502
+ new PipelineDef (
503
+ sourceDef , sinkDef , routeDef , Collections .emptyList (), pipelineConfig );
504
+
505
+ // Execute the pipeline
506
+ PipelineExecution execution = composer .compose (pipelineDef );
507
+ execution .execute ();
508
+
509
+ // Check result in ValuesDatabase
510
+ List <String > routed1Results = ValuesDatabase .getResults (routedTable1 );
511
+ assertThat (routed1Results )
512
+ .contains (
513
+ "default_namespace.default_schema.table1:col1=2;newCol3=x" ,
514
+ "default_namespace.default_schema.table1:col1=3;newCol3=" );
515
+ List <String > routed2Results = ValuesDatabase .getResults (routedTable2 );
516
+ assertThat (routed2Results )
517
+ .contains (
518
+ "default_namespace.default_schema.table2:col1=1;col2=1" ,
519
+ "default_namespace.default_schema.table2:col1=2;col2=2" ,
520
+ "default_namespace.default_schema.table2:col1=3;col2=3" );
521
+
522
+ // Check the order and content of all received events
523
+ String [] outputEvents = outCaptor .toString ().trim ().split ("\n " );
524
+ assertThat (outputEvents )
525
+ .containsExactly (
526
+ "CreateTableEvent{tableId=default_namespace.default_schema.table1, schema=columns={`col1` STRING,`col2` STRING}, primaryKeys=col1, options=()}" ,
527
+ "CreateTableEvent{tableId=default_namespace.default_schema.table2, schema=columns={`col1` STRING,`col2` STRING}, primaryKeys=col1, options=()}" ,
528
+ "DataChangeEvent{tableId=default_namespace.default_schema.table1, before=[], after=[1, 1], op=INSERT, meta=()}" ,
529
+ "DataChangeEvent{tableId=default_namespace.default_schema.table1, before=[], after=[2, 2], op=INSERT, meta=()}" ,
530
+ "DataChangeEvent{tableId=default_namespace.default_schema.table1, before=[], after=[3, 3], op=INSERT, meta=()}" ,
531
+ "AddColumnEvent{tableId=default_namespace.default_schema.table1, addedColumns=[ColumnWithPosition{column=`col3` STRING, position=LAST, existedColumnName=null}]}" ,
532
+ "DataChangeEvent{tableId=default_namespace.default_schema.table2, before=[], after=[1, 1], op=INSERT, meta=()}" ,
533
+ "DataChangeEvent{tableId=default_namespace.default_schema.table2, before=[], after=[2, 2], op=INSERT, meta=()}" ,
534
+ "DataChangeEvent{tableId=default_namespace.default_schema.table2, before=[], after=[3, 3], op=INSERT, meta=()}" ,
535
+ "RenameColumnEvent{tableId=default_namespace.default_schema.table1, nameMapping={col2=newCol2, col3=newCol3}}" ,
536
+ "DropColumnEvent{tableId=default_namespace.default_schema.table1, droppedColumnNames=[newCol2]}" ,
537
+ "DataChangeEvent{tableId=default_namespace.default_schema.table1, before=[1, 1], after=[], op=DELETE, meta=()}" ,
538
+ "DataChangeEvent{tableId=default_namespace.default_schema.table1, before=[2, 2], after=[2, x], op=UPDATE, meta=()}" );
539
+ }
540
+
473
541
@ Test
474
542
void testMergingWithRoute () throws Exception {
475
543
FlinkPipelineComposer composer = FlinkPipelineComposer .ofMiniCluster ();
0 commit comments