@@ -1163,6 +1163,8 @@ void test_router_apply_config_success()
11631163 cfl_list_init (& input_routes ._head );
11641164 cfl_list_init (& input_routes .routes );
11651165 input_routes .input_name = flb_sds_create ("dummy" );
1166+ input_routes .plugin_name = flb_sds_create ("dummy" );
1167+ input_routes .has_alias = FLB_FALSE ;
11661168 cfl_list_add (& input_routes ._head , & config .input_routes );
11671169
11681170 memset (& route , 0 , sizeof (route ));
@@ -1188,6 +1190,7 @@ void test_router_apply_config_success()
11881190 flb_sds_destroy (input .alias );
11891191 flb_sds_destroy (output .alias );
11901192 flb_sds_destroy (input_routes .input_name );
1193+ flb_sds_destroy (input_routes .plugin_name );
11911194 flb_sds_destroy (route .name );
11921195 flb_sds_destroy (route_output .name );
11931196}
@@ -1210,6 +1213,8 @@ void test_router_apply_config_missing_output()
12101213 cfl_list_init (& input_routes ._head );
12111214 cfl_list_init (& input_routes .routes );
12121215 input_routes .input_name = flb_sds_create ("dummy" );
1216+ input_routes .plugin_name = flb_sds_create ("dummy" );
1217+ input_routes .has_alias = FLB_FALSE ;
12131218 cfl_list_add (& input_routes ._head , & config .input_routes );
12141219
12151220 memset (& route , 0 , sizeof (route ));
@@ -1234,10 +1239,296 @@ void test_router_apply_config_missing_output()
12341239 flb_sds_destroy (input .alias );
12351240 flb_sds_destroy (output .alias );
12361241 flb_sds_destroy (input_routes .input_name );
1242+ flb_sds_destroy (input_routes .plugin_name );
12371243 flb_sds_destroy (route .name );
12381244 flb_sds_destroy (route_output .name );
12391245}
12401246
1247+ void test_router_apply_config_uses_input_alias ()
1248+ {
1249+ struct flb_config config ;
1250+ struct flb_input_instance input_one ;
1251+ struct flb_input_instance input_two ;
1252+ struct flb_output_instance output_one ;
1253+ struct flb_output_instance output_two ;
1254+ struct flb_input_routes routes_one ;
1255+ struct flb_input_routes routes_two ;
1256+ struct flb_route route_one ;
1257+ struct flb_route route_two ;
1258+ struct flb_route_output route_output_one ;
1259+ struct flb_route_output route_output_two ;
1260+ struct flb_input_plugin input_plugin ;
1261+ struct flb_output_plugin output_plugin_one ;
1262+ struct flb_output_plugin output_plugin_two ;
1263+ struct flb_router_path * path ;
1264+
1265+ memset (& config , 0 , sizeof (config ));
1266+ mk_list_init (& config .inputs );
1267+ mk_list_init (& config .outputs );
1268+ cfl_list_init (& config .input_routes );
1269+
1270+ memset (& input_one , 0 , sizeof (input_one ));
1271+ mk_list_init (& input_one ._head );
1272+ cfl_list_init (& input_one .routes_direct );
1273+ cfl_list_init (& input_one .routes );
1274+ mk_list_init (& input_one .tasks );
1275+ mk_list_init (& input_one .chunks );
1276+ mk_list_init (& input_one .collectors );
1277+ snprintf (input_one .name , sizeof (input_one .name ), "dummy.0" );
1278+ input_one .alias = flb_sds_create ("input_one" );
1279+ input_one .p = & input_plugin ;
1280+ input_one .config = & config ;
1281+ mk_list_add (& input_one ._head , & config .inputs );
1282+
1283+ memset (& input_two , 0 , sizeof (input_two ));
1284+ mk_list_init (& input_two ._head );
1285+ cfl_list_init (& input_two .routes_direct );
1286+ cfl_list_init (& input_two .routes );
1287+ mk_list_init (& input_two .tasks );
1288+ mk_list_init (& input_two .chunks );
1289+ mk_list_init (& input_two .collectors );
1290+ snprintf (input_two .name , sizeof (input_two .name ), "dummy.1" );
1291+ input_two .alias = flb_sds_create ("input_two" );
1292+ input_two .p = & input_plugin ;
1293+ input_two .config = & config ;
1294+ mk_list_add (& input_two ._head , & config .inputs );
1295+
1296+ memset (& input_plugin , 0 , sizeof (input_plugin ));
1297+ input_plugin .name = "dummy" ;
1298+
1299+ memset (& output_one , 0 , sizeof (output_one ));
1300+ mk_list_init (& output_one ._head );
1301+ mk_list_init (& output_one .properties );
1302+ mk_list_init (& output_one .net_properties );
1303+ snprintf (output_one .name , sizeof (output_one .name ), "stdout.0" );
1304+ output_one .alias = flb_sds_create ("print_one" );
1305+ output_one .event_type = FLB_OUTPUT_LOGS ;
1306+ output_one .p = & output_plugin_one ;
1307+ mk_list_add (& output_one ._head , & config .outputs );
1308+
1309+ memset (& output_two , 0 , sizeof (output_two ));
1310+ mk_list_init (& output_two ._head );
1311+ mk_list_init (& output_two .properties );
1312+ mk_list_init (& output_two .net_properties );
1313+ snprintf (output_two .name , sizeof (output_two .name ), "stdout.1" );
1314+ output_two .alias = flb_sds_create ("print_two" );
1315+ output_two .event_type = FLB_OUTPUT_LOGS ;
1316+ output_two .p = & output_plugin_two ;
1317+ mk_list_add (& output_two ._head , & config .outputs );
1318+
1319+ memset (& output_plugin_one , 0 , sizeof (output_plugin_one ));
1320+ output_plugin_one .name = "stdout" ;
1321+ memset (& output_plugin_two , 0 , sizeof (output_plugin_two ));
1322+ output_plugin_two .name = "stdout" ;
1323+
1324+ memset (& routes_one , 0 , sizeof (routes_one ));
1325+ cfl_list_init (& routes_one ._head );
1326+ cfl_list_init (& routes_one .routes );
1327+ routes_one .input_name = flb_sds_create ("input_one" );
1328+ routes_one .plugin_name = flb_sds_create ("dummy" );
1329+ routes_one .has_alias = FLB_TRUE ;
1330+ cfl_list_add (& routes_one ._head , & config .input_routes );
1331+
1332+ memset (& route_one , 0 , sizeof (route_one ));
1333+ cfl_list_init (& route_one ._head );
1334+ cfl_list_init (& route_one .outputs );
1335+ route_one .name = flb_sds_create ("route_one" );
1336+ route_one .signals = FLB_ROUTER_SIGNAL_LOGS ;
1337+ cfl_list_add (& route_one ._head , & routes_one .routes );
1338+
1339+ memset (& route_output_one , 0 , sizeof (route_output_one ));
1340+ cfl_list_init (& route_output_one ._head );
1341+ route_output_one .name = flb_sds_create ("print_one" );
1342+ cfl_list_add (& route_output_one ._head , & route_one .outputs );
1343+
1344+ memset (& routes_two , 0 , sizeof (routes_two ));
1345+ cfl_list_init (& routes_two ._head );
1346+ cfl_list_init (& routes_two .routes );
1347+ routes_two .input_name = flb_sds_create ("input_two" );
1348+ routes_two .plugin_name = flb_sds_create ("dummy" );
1349+ routes_two .has_alias = FLB_TRUE ;
1350+ cfl_list_add (& routes_two ._head , & config .input_routes );
1351+
1352+ memset (& route_two , 0 , sizeof (route_two ));
1353+ cfl_list_init (& route_two ._head );
1354+ cfl_list_init (& route_two .outputs );
1355+ route_two .name = flb_sds_create ("route_two" );
1356+ route_two .signals = FLB_ROUTER_SIGNAL_LOGS ;
1357+ cfl_list_add (& route_two ._head , & routes_two .routes );
1358+
1359+ memset (& route_output_two , 0 , sizeof (route_output_two ));
1360+ cfl_list_init (& route_output_two ._head );
1361+ route_output_two .name = flb_sds_create ("print_two" );
1362+ cfl_list_add (& route_output_two ._head , & route_two .outputs );
1363+
1364+ TEST_CHECK (flb_router_apply_config (& config ) == 0 );
1365+
1366+ TEST_CHECK (cfl_list_size (& input_one .routes_direct ) == 1 );
1367+ path = cfl_list_entry (input_one .routes_direct .next , struct flb_router_path , _head );
1368+ TEST_CHECK (path -> ins == & output_one );
1369+
1370+ TEST_CHECK (cfl_list_size (& input_two .routes_direct ) == 1 );
1371+ path = cfl_list_entry (input_two .routes_direct .next , struct flb_router_path , _head );
1372+ TEST_CHECK (path -> ins == & output_two );
1373+
1374+ flb_router_exit (& config );
1375+
1376+ flb_sds_destroy (input_one .alias );
1377+ flb_sds_destroy (input_two .alias );
1378+ flb_sds_destroy (output_one .alias );
1379+ flb_sds_destroy (output_two .alias );
1380+ flb_sds_destroy (routes_one .input_name );
1381+ flb_sds_destroy (routes_one .plugin_name );
1382+ flb_sds_destroy (routes_two .input_name );
1383+ flb_sds_destroy (routes_two .plugin_name );
1384+ flb_sds_destroy (route_one .name );
1385+ flb_sds_destroy (route_two .name );
1386+ flb_sds_destroy (route_output_one .name );
1387+ flb_sds_destroy (route_output_two .name );
1388+ }
1389+
1390+ void test_router_apply_config_distinct_instances_without_alias ()
1391+ {
1392+ struct flb_config config ;
1393+ struct flb_input_instance input_one ;
1394+ struct flb_input_instance input_two ;
1395+ struct flb_output_instance output_one ;
1396+ struct flb_output_instance output_two ;
1397+ struct flb_input_routes routes_one ;
1398+ struct flb_input_routes routes_two ;
1399+ struct flb_route route_one ;
1400+ struct flb_route route_two ;
1401+ struct flb_route_output route_output_one ;
1402+ struct flb_route_output route_output_two ;
1403+ struct flb_input_plugin input_plugin ;
1404+ struct flb_output_plugin output_plugin_one ;
1405+ struct flb_output_plugin output_plugin_two ;
1406+ struct flb_router_path * path ;
1407+
1408+ memset (& config , 0 , sizeof (config ));
1409+ mk_list_init (& config .inputs );
1410+ mk_list_init (& config .outputs );
1411+ cfl_list_init (& config .input_routes );
1412+
1413+ memset (& input_one , 0 , sizeof (input_one ));
1414+ mk_list_init (& input_one ._head );
1415+ cfl_list_init (& input_one .routes_direct );
1416+ cfl_list_init (& input_one .routes );
1417+ mk_list_init (& input_one .tasks );
1418+ mk_list_init (& input_one .chunks );
1419+ mk_list_init (& input_one .collectors );
1420+ snprintf (input_one .name , sizeof (input_one .name ), "dummy.0" );
1421+ input_one .p = & input_plugin ;
1422+ input_one .config = & config ;
1423+ mk_list_add (& input_one ._head , & config .inputs );
1424+
1425+ memset (& input_two , 0 , sizeof (input_two ));
1426+ mk_list_init (& input_two ._head );
1427+ cfl_list_init (& input_two .routes_direct );
1428+ cfl_list_init (& input_two .routes );
1429+ mk_list_init (& input_two .tasks );
1430+ mk_list_init (& input_two .chunks );
1431+ mk_list_init (& input_two .collectors );
1432+ snprintf (input_two .name , sizeof (input_two .name ), "dummy.1" );
1433+ input_two .p = & input_plugin ;
1434+ input_two .config = & config ;
1435+ mk_list_add (& input_two ._head , & config .inputs );
1436+
1437+ memset (& input_plugin , 0 , sizeof (input_plugin ));
1438+ input_plugin .name = "dummy" ;
1439+
1440+ memset (& output_one , 0 , sizeof (output_one ));
1441+ mk_list_init (& output_one ._head );
1442+ mk_list_init (& output_one .properties );
1443+ mk_list_init (& output_one .net_properties );
1444+ snprintf (output_one .name , sizeof (output_one .name ), "stdout.0" );
1445+ output_one .alias = flb_sds_create ("print_one" );
1446+ output_one .event_type = FLB_OUTPUT_LOGS ;
1447+ output_one .p = & output_plugin_one ;
1448+ mk_list_add (& output_one ._head , & config .outputs );
1449+
1450+ memset (& output_two , 0 , sizeof (output_two ));
1451+ mk_list_init (& output_two ._head );
1452+ mk_list_init (& output_two .properties );
1453+ mk_list_init (& output_two .net_properties );
1454+ snprintf (output_two .name , sizeof (output_two .name ), "stdout.1" );
1455+ output_two .alias = flb_sds_create ("print_two" );
1456+ output_two .event_type = FLB_OUTPUT_LOGS ;
1457+ output_two .p = & output_plugin_two ;
1458+ mk_list_add (& output_two ._head , & config .outputs );
1459+
1460+ memset (& output_plugin_one , 0 , sizeof (output_plugin_one ));
1461+ output_plugin_one .name = "stdout" ;
1462+ memset (& output_plugin_two , 0 , sizeof (output_plugin_two ));
1463+ output_plugin_two .name = "stdout" ;
1464+
1465+ memset (& routes_one , 0 , sizeof (routes_one ));
1466+ cfl_list_init (& routes_one ._head );
1467+ cfl_list_init (& routes_one .routes );
1468+ routes_one .input_name = flb_sds_create ("dummy" );
1469+ routes_one .plugin_name = flb_sds_create ("dummy" );
1470+ routes_one .has_alias = FLB_FALSE ;
1471+ cfl_list_add (& routes_one ._head , & config .input_routes );
1472+
1473+ memset (& route_one , 0 , sizeof (route_one ));
1474+ cfl_list_init (& route_one ._head );
1475+ cfl_list_init (& route_one .outputs );
1476+ route_one .name = flb_sds_create ("route_one" );
1477+ route_one .signals = FLB_ROUTER_SIGNAL_LOGS ;
1478+ cfl_list_add (& route_one ._head , & routes_one .routes );
1479+
1480+ memset (& route_output_one , 0 , sizeof (route_output_one ));
1481+ cfl_list_init (& route_output_one ._head );
1482+ route_output_one .name = flb_sds_create ("print_one" );
1483+ cfl_list_add (& route_output_one ._head , & route_one .outputs );
1484+
1485+ memset (& routes_two , 0 , sizeof (routes_two ));
1486+ cfl_list_init (& routes_two ._head );
1487+ cfl_list_init (& routes_two .routes );
1488+ routes_two .input_name = flb_sds_create ("dummy" );
1489+ routes_two .plugin_name = flb_sds_create ("dummy" );
1490+ routes_two .has_alias = FLB_FALSE ;
1491+ cfl_list_add (& routes_two ._head , & config .input_routes );
1492+
1493+ memset (& route_two , 0 , sizeof (route_two ));
1494+ cfl_list_init (& route_two ._head );
1495+ cfl_list_init (& route_two .outputs );
1496+ route_two .name = flb_sds_create ("route_two" );
1497+ route_two .signals = FLB_ROUTER_SIGNAL_LOGS ;
1498+ cfl_list_add (& route_two ._head , & routes_two .routes );
1499+
1500+ memset (& route_output_two , 0 , sizeof (route_output_two ));
1501+ cfl_list_init (& route_output_two ._head );
1502+ route_output_two .name = flb_sds_create ("print_two" );
1503+ cfl_list_add (& route_output_two ._head , & route_two .outputs );
1504+
1505+ TEST_CHECK (flb_router_apply_config (& config ) == 0 );
1506+
1507+ TEST_CHECK (cfl_list_size (& input_one .routes_direct ) == 1 );
1508+ path = cfl_list_entry (input_one .routes_direct .next , struct flb_router_path , _head );
1509+ TEST_CHECK (path -> ins == & output_one );
1510+
1511+ TEST_CHECK (cfl_list_size (& input_two .routes_direct ) == 1 );
1512+ path = cfl_list_entry (input_two .routes_direct .next , struct flb_router_path , _head );
1513+ TEST_CHECK (path -> ins == & output_two );
1514+
1515+ TEST_CHECK (routes_one .instance == & input_one );
1516+ TEST_CHECK (routes_two .instance == & input_two );
1517+
1518+ flb_router_exit (& config );
1519+
1520+ flb_sds_destroy (output_one .alias );
1521+ flb_sds_destroy (output_two .alias );
1522+ flb_sds_destroy (routes_one .input_name );
1523+ flb_sds_destroy (routes_one .plugin_name );
1524+ flb_sds_destroy (routes_two .input_name );
1525+ flb_sds_destroy (routes_two .plugin_name );
1526+ flb_sds_destroy (route_one .name );
1527+ flb_sds_destroy (route_two .name );
1528+ flb_sds_destroy (route_output_one .name );
1529+ flb_sds_destroy (route_output_two .name );
1530+ }
1531+
12411532void test_router_route_default_precedence ()
12421533{
12431534 struct cfl_list routes ;
@@ -2048,6 +2339,8 @@ TEST_LIST = {
20482339 { "parse_contexts_file" , test_router_config_parse_file_contexts },
20492340 { "apply_config_success" , test_router_apply_config_success },
20502341 { "apply_config_missing_output" , test_router_apply_config_missing_output },
2342+ { "apply_config_uses_input_alias" , test_router_apply_config_uses_input_alias },
2343+ { "apply_config_distinct_instances_without_alias" , test_router_apply_config_distinct_instances_without_alias },
20512344 { "route_default_precedence" , test_router_route_default_precedence },
20522345 { "condition_eval_logs_metadata_context" , test_router_condition_eval_logs_metadata_context },
20532346 { "condition_eval_logs_group_context" , test_router_condition_eval_logs_group_context },
0 commit comments