diff options
| author | 刘学利 <[email protected]> | 2023-04-03 08:30:49 +0000 |
|---|---|---|
| committer | 刘学利 <[email protected]> | 2023-04-03 08:30:49 +0000 |
| commit | b696e82879bcecc4559cf9828e00232ca7cc6541 (patch) | |
| tree | 9d397f967881a2ef64f56447fffc8fd834cb8750 /test/src/gtest_master.cpp | |
| parent | 8819217948c6717b1f57114d2c710f1fc612dd9c (diff) | |
TSG-13778 TSG master支持MAAT4
Diffstat (limited to 'test/src/gtest_master.cpp')
| -rw-r--r-- | test/src/gtest_master.cpp | 642 |
1 files changed, 406 insertions, 236 deletions
diff --git a/test/src/gtest_master.cpp b/test/src/gtest_master.cpp index e5b5289..7da2057 100644 --- a/test/src/gtest_master.cpp +++ b/test/src/gtest_master.cpp @@ -3,41 +3,46 @@ #include <unistd.h> #include "gtest_common.h" -#include "tsg_rule.h" #include "tsg_entry.h" +#include "tsg_rule_internal.h" #include <gtest/gtest.h> extern int rd_kafka_get_sendlog_cnt(void); extern const char *rd_kafka_get_sendlog_payload(int idx); +extern int matched_shaping_rules_deal(const struct streaminfo *a_stream, struct maat_rule *shaping_rules, size_t n_shaping_rules, int thread_seq);; +extern int matched_service_chaining_rules_deal(const struct streaminfo *a_stream, struct maat_rule *service_chaining_rules, size_t n_service_chaining_rules, int thread_seq);; + +extern void session_segment_id_free(const struct streaminfo * a_stream, int bridge_id, void * data); + TEST(TSGMaster, SetAPPIDHttp) { - struct streaminfo a_stream={0}; - struct gather_app_result gather_result[ORIGIN_MAX]={0}; + const struct streaminfo a_stream={0}; + struct gather_app_result async_gather_result[ORIGIN_MAX]={0}; - gather_result[ORIGIN_BASIC_PROTOCOL].app_num=1; - gather_result[ORIGIN_BASIC_PROTOCOL].origin=ORIGIN_BASIC_PROTOCOL; - gather_result[ORIGIN_BASIC_PROTOCOL].attributes[0].app_id=67; //HTTP + async_gather_result[ORIGIN_BASIC_PROTOCOL].app_num=1; + async_gather_result[ORIGIN_BASIC_PROTOCOL].origin=ORIGIN_BASIC_PROTOCOL; + async_gather_result[ORIGIN_BASIC_PROTOCOL].attributes[0].app_id=67; //HTTP - tsg_set_xxx_to_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_GATHER_APP_RESULT].id, (void *)gather_result); - struct gather_app_result *get_result=(struct gather_app_result *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_GATHER_APP_RESULT].id); - EXPECT_NE(nullptr, get_result); - EXPECT_EQ(1, get_result[ORIGIN_BASIC_PROTOCOL].app_num); - EXPECT_EQ(67, get_result[ORIGIN_BASIC_PROTOCOL].attributes[0].app_id); - EXPECT_EQ(0, get_result[ORIGIN_BASIC_PROTOCOL].attributes[0].packet_sequence); - EXPECT_EQ(0, get_result[ORIGIN_BASIC_PROTOCOL].attributes[0].surrogate_id); - EXPECT_EQ(ORIGIN_BASIC_PROTOCOL, get_result[ORIGIN_BASIC_PROTOCOL].origin); + session_gather_app_results_async(&a_stream, (void *)async_gather_result); + struct gather_app_result *gather_result=(struct gather_app_result *)session_gather_app_results_get(&a_stream); + EXPECT_NE(nullptr, gather_result); + EXPECT_EQ(1, gather_result[ORIGIN_BASIC_PROTOCOL].app_num); + EXPECT_EQ(67, gather_result[ORIGIN_BASIC_PROTOCOL].attributes[0].app_id); + EXPECT_EQ(0, gather_result[ORIGIN_BASIC_PROTOCOL].attributes[0].packet_sequence); + EXPECT_EQ(0, gather_result[ORIGIN_BASIC_PROTOCOL].attributes[0].surrogate_id); + EXPECT_EQ(ORIGIN_BASIC_PROTOCOL, gather_result[ORIGIN_BASIC_PROTOCOL].origin); struct TLD_handle_t *handle=TLD_create(0); set_app_id(g_tsg_log_instance, handle, (struct streaminfo *)&a_stream); char app_ids[256]={0}; TLD_convert_json(handle, app_ids, sizeof(app_ids)); - EXPECT_STREQ("{\"common_app_full_path\":\"http\",\"common_app_label\":\"http\"}", app_ids); + EXPECT_STREQ("{\"common_app_full_path\":\"http\",\"common_app_label\":\"http\",\"common_app_id\":{\"LPI_L7\":[{\"app_name\":\"http\",\"app_id\":67,\"surrogate_id\":0,\"packet_sequence\":0}]}}", app_ids); - tsg_set_xxx_to_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_GATHER_APP_RESULT].id, NULL); - get_result=(struct gather_app_result *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_GATHER_APP_RESULT].id); - EXPECT_EQ(nullptr, get_result); + session_gather_app_results_async(&a_stream, NULL); + gather_result=(struct gather_app_result *)session_gather_app_results_get(&a_stream); + EXPECT_EQ(nullptr, gather_result); } TEST(TSGMaster, SetAPPIDUnknown) @@ -55,45 +60,53 @@ TEST(TSGMaster, SetAPPIDUnknown) TEST(TSGMaster, ShapingSetRuleIds) { const struct streaminfo a_stream={0}; - struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + struct maat_rule shaping_result[MAX_RESULT_NUM]={0}; for(int i=0; i<MAX_RESULT_NUM; i++) { shaping_result[i].action=TSG_ACTION_SHAPING; - shaping_result[i].config_id=TSG_ACTION_SHAPING+i; + shaping_result[i].rule_id=TSG_ACTION_SHAPING+i; } - tsg_notify_hited_shaping_result(&a_stream, shaping_result, MAX_RESULT_NUM, 0); + matched_shaping_rules_deal(&a_stream, shaping_result, MAX_RESULT_NUM, 0); struct TLD_handle_t *handle=TLD_create(0); - set_shaping_rule_ids(g_tsg_log_instance, handle, (struct streaminfo *)&a_stream); + set_shaping_rule_ids(g_tsg_log_instance, handle, &a_stream); char shaping_rule_ids[256]={0}; TLD_convert_json(handle, shaping_rule_ids, sizeof(shaping_rule_ids)); EXPECT_STREQ("{\"common_shaping_rule_ids\":[32,33,34,35,36,37,38,39]}", shaping_rule_ids); - struct notify_shaping_policy *shaping_label=(struct notify_shaping_policy *)stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id); - EXPECT_NE(nullptr, shaping_label); - EXPECT_EQ(MAX_RESULT_NUM, shaping_label->shaping_result_num); - for(int i=0; i<shaping_label->shaping_result_num; i++) + const struct matched_policy_rules *hited_shaping=session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING); + EXPECT_NE(nullptr, hited_shaping); + EXPECT_EQ(MAX_RESULT_NUM, hited_shaping->n_rules); + for(size_t i=0; i<hited_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_label->shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_label->shaping_result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hited_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hited_shaping->rules[i].rule_id); } - - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, (void *)shaping_label); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id)); + + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(1, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.shaping_sid, segment_ids->sid_list[0]); + + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); + + session_matched_rules_free(&a_stream, TSG_SERVICE_SHAPING, (void *)hited_shaping); + session_matched_rules_async(&a_stream, TSG_SERVICE_SHAPING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING)); } int shaping_policy_notify_cb(const struct streaminfo *stream, int bridge_id, void *data) { - struct notify_shaping_policy *shaping_label=(struct notify_shaping_policy *)data; - EXPECT_NE(nullptr, shaping_label); - EXPECT_EQ(MAX_RESULT_NUM, shaping_label->shaping_result_num); - for(int i=0; i<shaping_label->shaping_result_num; i++) + struct matched_policy_rules *hited_shaping=(struct matched_policy_rules *)data; + EXPECT_NE(nullptr, hited_shaping); + EXPECT_EQ(MAX_RESULT_NUM, hited_shaping->n_rules); + for(size_t i=0; i<hited_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_label->shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_label->shaping_result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hited_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hited_shaping->rules[i].rule_id); } return 0; @@ -102,37 +115,38 @@ int shaping_policy_notify_cb(const struct streaminfo *stream, int bridge_id, voi TEST(TSGMaster, ShapingPolicyNotify) { const struct streaminfo a_stream={0}; - struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + struct maat_rule shaping_result[MAX_RESULT_NUM]={0}; for(int i=0; i<MAX_RESULT_NUM; i++) { shaping_result[i].action=TSG_ACTION_SHAPING; - shaping_result[i].config_id=TSG_ACTION_SHAPING+i; + shaping_result[i].rule_id=TSG_ACTION_SHAPING+i; } - stream_bridge_register_data_sync_cb(g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, shaping_policy_notify_cb); + stream_bridge_register_data_sync_cb(stream_bridge_build("NOTIFY_SHAPING_RESULT", "w"), shaping_policy_notify_cb); - tsg_notify_hited_shaping_result(&a_stream, shaping_result, MAX_RESULT_NUM, 0); - int shaping_result_num=tsg_pull_shaping_result((struct streaminfo *)&a_stream, shaping_result, MAX_RESULT_NUM); - EXPECT_EQ(MAX_RESULT_NUM, shaping_result_num); - for(int i=0; i<shaping_result_num; i++) - { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_result[i].config_id); - } - - struct notify_shaping_policy *shaping_label=(struct notify_shaping_policy *)stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id); - EXPECT_NE(nullptr, shaping_label); - EXPECT_EQ(MAX_RESULT_NUM, shaping_label->shaping_result_num); - for(int i=0; i<shaping_label->shaping_result_num; i++) + matched_shaping_rules_deal(&a_stream, shaping_result, MAX_RESULT_NUM, 0); + + const struct matched_policy_rules *hited_shaping=session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING); + EXPECT_NE(nullptr, hited_shaping); + EXPECT_EQ(MAX_RESULT_NUM, hited_shaping->n_rules); + for(size_t i=0; i<hited_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_label->shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_label->shaping_result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hited_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hited_shaping->rules[i].rule_id); } - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, (void *)shaping_label); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id)); + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(1, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.shaping_sid, segment_ids->sid_list[0]); + + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); + + session_matched_rules_free(&a_stream, TSG_SERVICE_SHAPING, (void *)hited_shaping); + session_matched_rules_async(&a_stream, TSG_SERVICE_SHAPING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING)); } int shaping_policy_notify_null_cb(const struct streaminfo *stream, int bridge_id, void *data) @@ -144,24 +158,24 @@ int shaping_policy_notify_null_cb(const struct streaminfo *stream, int bridge_id TEST(TSGMaster, ShapingPolicyNotifyNULL) { const struct streaminfo a_stream={0}; - struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + struct maat_rule shaping_result[MAX_RESULT_NUM]={0}; - stream_bridge_register_data_sync_cb(g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, shaping_policy_notify_null_cb); + stream_bridge_register_data_sync_cb(stream_bridge_build("NOTIFY_SHAPING_RESULT", "w"), shaping_policy_notify_cb); - tsg_notify_hited_shaping_result(&a_stream, shaping_result, 0, 0); - struct notify_shaping_policy *shaping_label=(struct notify_shaping_policy *)stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id); - EXPECT_EQ(nullptr, shaping_label); + matched_shaping_rules_deal(&a_stream, shaping_result, 0, 0); + const struct matched_policy_rules *hited_shaping=session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING); + EXPECT_EQ(nullptr, hited_shaping); } int shaping_duplicate_policy_notify_cb(const struct streaminfo *stream, int bridge_id, void *data) { - struct notify_shaping_policy *shaping_label=(struct notify_shaping_policy *)data; - EXPECT_NE(nullptr, shaping_label); - EXPECT_EQ(MAX_RESULT_NUM/2, shaping_label->shaping_result_num); - for(int i=0; i<shaping_label->shaping_result_num; i++) + struct matched_policy_rules *hited_shaping=(struct matched_policy_rules *)data; + EXPECT_NE(nullptr, hited_shaping); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_shaping->n_rules); + for(size_t i=0; i<hited_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_label->shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_label->shaping_result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hited_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hited_shaping->rules[i].rule_id); } return 0; @@ -170,126 +184,120 @@ int shaping_duplicate_policy_notify_cb(const struct streaminfo *stream, int brid TEST(TSGMaster, ShapingDuplicatePolicyNotify) { const struct streaminfo a_stream={0}; - struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + struct maat_rule shaping_result[MAX_RESULT_NUM]={0}; for(int i=0; i<MAX_RESULT_NUM; i++) { shaping_result[i].action=TSG_ACTION_SHAPING; - shaping_result[i].config_id=TSG_ACTION_SHAPING+(i%4); + shaping_result[i].rule_id=TSG_ACTION_SHAPING+(i%4); } - stream_bridge_register_data_sync_cb(g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, shaping_duplicate_policy_notify_cb); + stream_bridge_register_data_sync_cb(stream_bridge_build("NOTIFY_SHAPING_RESULT", "w"), shaping_policy_notify_cb); - tsg_notify_hited_shaping_result(&a_stream, shaping_result, MAX_RESULT_NUM, 0); - int shaping_result_num=tsg_pull_shaping_result((struct streaminfo *)&a_stream, shaping_result, MAX_RESULT_NUM); - EXPECT_EQ(MAX_RESULT_NUM/2, shaping_result_num); - for(int i=0; i<shaping_result_num; i++) - { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_result[i].config_id); - } + matched_shaping_rules_deal(&a_stream, shaping_result, MAX_RESULT_NUM, 0); - struct notify_shaping_policy *shaping_label=(struct notify_shaping_policy *)stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id); - EXPECT_NE(nullptr, shaping_label); - EXPECT_EQ(MAX_RESULT_NUM/2, shaping_label->shaping_result_num); - for(int i=0; i<shaping_label->shaping_result_num; i++) + const struct matched_policy_rules *hited_shaping=session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING); + EXPECT_NE(nullptr, hited_shaping); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_shaping->n_rules); + for(size_t i=0; i<hited_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_label->shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_label->shaping_result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hited_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hited_shaping->rules[i].rule_id); } + + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(1, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.shaping_sid, segment_ids->sid_list[0]); - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, (void *)shaping_label); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id)); + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); + + session_matched_rules_free(&a_stream, TSG_SERVICE_SHAPING, (void *)hited_shaping); + session_matched_rules_async(&a_stream, TSG_SERVICE_SHAPING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING)); } TEST(TSGMaster, ShapingDuplicatePolicyMultipleNotify) { const struct streaminfo a_stream={0}; - struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + struct maat_rule shaping_result[MAX_RESULT_NUM]={0}; for(int i=0; i<MAX_RESULT_NUM/2; i++) { shaping_result[i].action=TSG_ACTION_SHAPING; - shaping_result[i].config_id=TSG_ACTION_SHAPING+i; + shaping_result[i].rule_id=TSG_ACTION_SHAPING+i; } - stream_bridge_register_data_sync_cb(g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, shaping_duplicate_policy_notify_cb); + stream_bridge_register_data_sync_cb(stream_bridge_build("NOTIFY_SHAPING_RESULT", "w"), shaping_policy_notify_cb); // First notify - tsg_notify_hited_shaping_result(&a_stream, shaping_result, MAX_RESULT_NUM/2, 0); - int shaping_result_num=tsg_pull_shaping_result((struct streaminfo *)&a_stream, shaping_result, MAX_RESULT_NUM); - EXPECT_EQ(MAX_RESULT_NUM/2, shaping_result_num); - for(int i=0; i<shaping_result_num; i++) - { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_result[i].config_id); - } + matched_shaping_rules_deal(&a_stream, shaping_result, MAX_RESULT_NUM/2, 0); - struct notify_shaping_policy *shaping_label=(struct notify_shaping_policy *)stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id); - EXPECT_NE(nullptr, shaping_label); - EXPECT_EQ(MAX_RESULT_NUM/2, shaping_label->shaping_result_num); - for(int i=0; i<shaping_label->shaping_result_num; i++) + const struct matched_policy_rules *hited_shaping=session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING); + EXPECT_NE(nullptr, hited_shaping); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_shaping->n_rules); + for(size_t i=0; i<hited_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_label->shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_label->shaping_result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hited_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hited_shaping->rules[i].rule_id); } // Second notify - tsg_notify_hited_shaping_result(&a_stream, shaping_result, MAX_RESULT_NUM/2, 0); - shaping_result_num=tsg_pull_shaping_result((struct streaminfo *)&a_stream, shaping_result, MAX_RESULT_NUM); - EXPECT_EQ(MAX_RESULT_NUM/2, shaping_result_num); - for(int i=0; i<shaping_result_num; i++) - { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_result[i].config_id); - } - - shaping_label=(struct notify_shaping_policy *)stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id); - EXPECT_NE(nullptr, shaping_label); - EXPECT_EQ(MAX_RESULT_NUM/2, shaping_label->shaping_result_num); - for(int i=0; i<shaping_label->shaping_result_num; i++) + matched_shaping_rules_deal(&a_stream, shaping_result, MAX_RESULT_NUM/2, 0); + + hited_shaping=session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING); + EXPECT_NE(nullptr, hited_shaping); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_shaping->n_rules); + for(size_t i=0; i<hited_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_SHAPING, shaping_label->shaping_result[i].action); - EXPECT_EQ(TSG_ACTION_SHAPING+i, shaping_label->shaping_result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hited_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hited_shaping->rules[i].rule_id); } - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, (void *)shaping_label); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT].id)); + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(1, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.shaping_sid, segment_ids->sid_list[0]); + + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); + + session_matched_rules_free(&a_stream, TSG_SERVICE_SHAPING, (void *)hited_shaping); + session_matched_rules_async(&a_stream, TSG_SERVICE_SHAPING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING)); } TEST(TSGMaster, SecurityPolicySendlog) { const struct streaminfo a_stream={0}; - struct Maat_rule_t security_result[MAX_RESULT_NUM]={0}; + struct maat_rule matched_policy[MAX_RESULT_NUM]={0}; for(int i=0; i<MAX_RESULT_NUM; i++) { - security_result[i].do_log=1; - security_result[i].action=TSG_ACTION_MONITOR; - security_result[i].config_id=TSG_ACTION_MONITOR+i; + matched_policy[i].do_log=1; + matched_policy[i].action=TSG_ACTION_MONITOR; + matched_policy[i].rule_id=TSG_ACTION_MONITOR+i; } // First notify - tsg_notify_hited_security_result(&a_stream, security_result, MAX_RESULT_NUM, 0); + session_matched_rules_notify(&a_stream, TSG_SERVICE_SECURITY, matched_policy, MAX_RESULT_NUM, 0); - struct policy_priority_label *priority_label=(struct policy_priority_label *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_POLICY_PRIORITY].id); - EXPECT_NE(nullptr, priority_label); - EXPECT_EQ(MAX_RESULT_NUM, priority_label->security_result_num); - for(int i=0; i<priority_label->security_result_num; i++) + const struct matched_policy_rules *hited_security=session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY); + EXPECT_NE(nullptr, hited_security); + EXPECT_EQ(MAX_RESULT_NUM, hited_security->n_rules); + for(size_t i=0; i<hited_security->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_MONITOR, priority_label->security_result[i].action); - EXPECT_EQ(TSG_ACTION_MONITOR+i, priority_label->security_result[i].config_id); + EXPECT_EQ(TSG_ACTION_MONITOR, hited_security->rules[i].action); + EXPECT_EQ(TSG_ACTION_MONITOR+i, hited_security->rules[i].rule_id); } struct TLD_handle_t * handle=TLD_create(0); - struct Maat_rule_t session_record={0, 2, 1, 0, 0, 0, 0, {0}}; - tsg_log_t log_msg={1, &session_record, (struct streaminfo*)&a_stream}; - tsg_send_log(g_tsg_log_instance, handle, &log_msg, 0); + struct maat_rule session_record={0, 0, 2, 1, 0}; + tsg_send_log(g_tsg_log_instance, handle, &a_stream, LOG_TYPE_SESSION_RECORD, &session_record, 1, 0); int sendlog_cnt=rd_kafka_get_sendlog_cnt(); - EXPECT_EQ(8, sendlog_cnt); + EXPECT_EQ(9, sendlog_cnt); //EXPECT_STREQ("{}", rd_kafka_get_sendlog_payload(0)); //EXPECT_STREQ("{}", rd_kafka_get_sendlog_payload(1)); //EXPECT_STREQ("{}", rd_kafka_get_sendlog_payload(2)); @@ -300,169 +308,331 @@ TEST(TSGMaster, SecurityPolicySendlog) //EXPECT_STREQ("{}", rd_kafka_get_sendlog_payload(7)); //EXPECT_STREQ("{}", rd_kafka_get_sendlog_payload(8)); - priority_label=(struct policy_priority_label *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_POLICY_PRIORITY].id); - EXPECT_EQ(nullptr, priority_label); + hited_security=session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY); + EXPECT_EQ(nullptr, hited_security); } -TEST(TSGMaster, SecurityDuplicatePolicyMultipleNotify) +TEST(TSGMaster, ServiceChainingPolicyNotify) { const struct streaminfo a_stream={0}; - struct Maat_rule_t security_result[MAX_RESULT_NUM]={0}; - + struct maat_rule s_chaining_result[MAX_RESULT_NUM]={0}; + for(int i=0; i<MAX_RESULT_NUM/2; i++) { - security_result[i].action=TSG_ACTION_MONITOR; - security_result[i].config_id=TSG_ACTION_MONITOR+i; + s_chaining_result[i].action=TSG_ACTION_S_CHAINING; + s_chaining_result[i].rule_id=TSG_ACTION_S_CHAINING+i; } - - // First notify - tsg_notify_hited_security_result(&a_stream, security_result, MAX_RESULT_NUM/2, 0); - struct policy_priority_label *priority_label=(struct policy_priority_label *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_POLICY_PRIORITY].id); - EXPECT_NE(nullptr, priority_label); - EXPECT_EQ(MAX_RESULT_NUM/2, priority_label->security_result_num); - for(int i=0; i<priority_label->security_result_num; i++) + matched_service_chaining_rules_deal(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); + const struct matched_policy_rules *hited_s_chaining=session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING); + EXPECT_NE(nullptr, hited_s_chaining); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->n_rules); + for(size_t i=0; i<hited_s_chaining->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_MONITOR, priority_label->security_result[i].action); - EXPECT_EQ(TSG_ACTION_MONITOR+i, priority_label->security_result[i].config_id); + EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->rules[i].action); + EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->rules[i].rule_id); } - // Second notify - tsg_notify_hited_security_result(&a_stream, security_result, MAX_RESULT_NUM/2, 0); - - priority_label=(struct policy_priority_label *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_POLICY_PRIORITY].id); - EXPECT_NE(nullptr, priority_label); - EXPECT_EQ(MAX_RESULT_NUM/2, priority_label->security_result_num); - for(int i=0; i<priority_label->security_result_num; i++) - { - EXPECT_EQ(TSG_ACTION_MONITOR, priority_label->security_result[i].action); - EXPECT_EQ(TSG_ACTION_MONITOR+i, priority_label->security_result[i].config_id); - } + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(1, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.service_chaining_sid, segment_ids->sid_list[0]); - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_POLICY_PRIORITY].id, (void *)priority_label); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_POLICY_PRIORITY].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_POLICY_PRIORITY].id)); -} + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); -extern void set_s_chaining_result_to_bridge(const struct streaminfo * a_stream, struct Maat_rule_t * p_result, int p_result_num, int thread_seq); + session_matched_rules_free(&a_stream, TSG_SERVICE_CHAINING, (void *)hited_s_chaining); + session_matched_rules_async(&a_stream, TSG_SERVICE_CHAINING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING)); +} -TEST(TSGMaster, ServiceChainingPolicyNotify) +TEST(TSGMaster, ServiceChainingDuplicatePolicyMultipleNotify) { const struct streaminfo a_stream={0}; - struct Maat_rule_t s_chaining_result[MAX_RESULT_NUM]={0}; + struct maat_rule s_chaining_result[MAX_RESULT_NUM]={0}; + + // first + for(int i=0; i<MAX_RESULT_NUM/2; i++) + { + s_chaining_result[i].action=TSG_ACTION_S_CHAINING; + s_chaining_result[i].rule_id=TSG_ACTION_S_CHAINING+i; + } + matched_service_chaining_rules_deal(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); + const struct matched_policy_rules *hited_s_chaining=session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING); + EXPECT_NE(nullptr, hited_s_chaining); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->n_rules); + for(size_t i=0; i<hited_s_chaining->n_rules; i++) + { + EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->rules[i].action); + EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->rules[i].rule_id); + } + + // second for(int i=0; i<MAX_RESULT_NUM/2; i++) { s_chaining_result[i].action=TSG_ACTION_S_CHAINING; - s_chaining_result[i].config_id=TSG_ACTION_S_CHAINING+i; + s_chaining_result[i].rule_id=TSG_ACTION_S_CHAINING+i; } - set_s_chaining_result_to_bridge(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); - struct tm_hited_result *hited_s_chaining=(struct tm_hited_result *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id); + matched_service_chaining_rules_deal(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); + hited_s_chaining=session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING); EXPECT_NE(nullptr, hited_s_chaining); - EXPECT_EQ(g_tsg_para.service_chaining_sid, hited_s_chaining->sid); - EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->result_num); - for(int i=0; i<hited_s_chaining->result_num; i++) + EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->n_rules); + for(size_t i=0; i<hited_s_chaining->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->result[i].action); - EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->result[i].config_id); + EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->rules[i].action); + EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->rules[i].rule_id); } - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id, (void *)hited_s_chaining); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id)); + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(1, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.service_chaining_sid, segment_ids->sid_list[0]); + + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); + + session_matched_rules_free(&a_stream, TSG_SERVICE_CHAINING, (void *)hited_s_chaining); + session_matched_rules_async(&a_stream, TSG_SERVICE_CHAINING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING)); } -TEST(TSGMaster, ServiceChainingDuplicatePolicyMultipleNotify) +TEST(TSGMaster, ServiceChainingPolicyMultipleNotify) { const struct streaminfo a_stream={0}; - struct Maat_rule_t s_chaining_result[MAX_RESULT_NUM]={0}; + struct maat_rule s_chaining_result[MAX_RESULT_NUM]={0}; // first for(int i=0; i<MAX_RESULT_NUM/2; i++) { s_chaining_result[i].action=TSG_ACTION_S_CHAINING; - s_chaining_result[i].config_id=TSG_ACTION_S_CHAINING+i; + s_chaining_result[i].rule_id=TSG_ACTION_S_CHAINING+i; } - set_s_chaining_result_to_bridge(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); - struct tm_hited_result *hited_s_chaining=(struct tm_hited_result *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id); + matched_service_chaining_rules_deal(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); + const struct matched_policy_rules *hited_s_chaining=session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING); EXPECT_NE(nullptr, hited_s_chaining); - EXPECT_EQ(g_tsg_para.service_chaining_sid, hited_s_chaining->sid); - EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->result_num); - for(int i=0; i<hited_s_chaining->result_num; i++) + EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->n_rules); + for(size_t i=0; i<hited_s_chaining->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->result[i].action); - EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->result[i].config_id); + EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->rules[i].action); + EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->rules[i].rule_id); } // second - for(int i=0; i<MAX_RESULT_NUM/2; i++) + for(int i=MAX_RESULT_NUM/2; i<MAX_RESULT_NUM; i++) { s_chaining_result[i].action=TSG_ACTION_S_CHAINING; - s_chaining_result[i].config_id=TSG_ACTION_S_CHAINING+i; + s_chaining_result[i].rule_id=TSG_ACTION_S_CHAINING+i; } - - tsg_notify_hited_s_chaining_result(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 1); - hited_s_chaining=(struct tm_hited_result *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id); + + matched_service_chaining_rules_deal(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); + hited_s_chaining=session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING); EXPECT_NE(nullptr, hited_s_chaining); - EXPECT_EQ(g_tsg_para.service_chaining_sid, hited_s_chaining->sid); - EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->result_num); - for(int i=0; i<hited_s_chaining->result_num; i++) + EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->n_rules); + for(size_t i=0; i<hited_s_chaining->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->result[i].action); - EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->result[i].config_id); + EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->rules[i].action); + EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->rules[i].rule_id); } - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id, (void *)hited_s_chaining); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id)); + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(1, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.service_chaining_sid, segment_ids->sid_list[0]); + + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); + + session_matched_rules_free(&a_stream, TSG_SERVICE_CHAINING, (void *)hited_s_chaining); + session_matched_rules_async(&a_stream, TSG_SERVICE_CHAINING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING)); } -TEST(TSGMaster, ServiceChainingPolicyMultipleNotify) +TEST(TSGMaster, SecurityDuplicatePolicyMultipleNotify) { const struct streaminfo a_stream={0}; - struct Maat_rule_t s_chaining_result[MAX_RESULT_NUM]={0}; + struct maat_rule matched_policy[MAX_RESULT_NUM]={0}; - // first for(int i=0; i<MAX_RESULT_NUM/2; i++) { - s_chaining_result[i].action=TSG_ACTION_S_CHAINING; - s_chaining_result[i].config_id=TSG_ACTION_S_CHAINING+i; + matched_policy[i].action=TSG_ACTION_MONITOR; + matched_policy[i].rule_id=TSG_ACTION_MONITOR+i; } + + // First notify + session_matched_rules_notify(&a_stream, TSG_SERVICE_SECURITY, matched_policy, MAX_RESULT_NUM/2, 0); - set_s_chaining_result_to_bridge(&a_stream, s_chaining_result, MAX_RESULT_NUM/2, 0); - struct tm_hited_result *hited_s_chaining=(struct tm_hited_result *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id); - EXPECT_NE(nullptr, hited_s_chaining); - EXPECT_EQ(g_tsg_para.service_chaining_sid, hited_s_chaining->sid); - EXPECT_EQ(MAX_RESULT_NUM/2, hited_s_chaining->result_num); - for(int i=0; i<hited_s_chaining->result_num; i++) + const struct matched_policy_rules *hited_security=session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY); + EXPECT_NE(nullptr, hited_security); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_security->n_rules); + for(size_t i=0; i<hited_security->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->result[i].action); - EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->result[i].config_id); + EXPECT_EQ(TSG_ACTION_MONITOR, hited_security->rules[i].action); + EXPECT_EQ(TSG_ACTION_MONITOR+i, hited_security->rules[i].rule_id); } - // second - for(int i=MAX_RESULT_NUM/2; i<MAX_RESULT_NUM; i++) + // Second notify + session_matched_rules_notify(&a_stream, TSG_SERVICE_SECURITY, matched_policy, MAX_RESULT_NUM/2, 0); + + hited_security=session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY); + EXPECT_NE(nullptr, hited_security); + EXPECT_EQ(MAX_RESULT_NUM/2, hited_security->n_rules); + for(size_t i=0; i<hited_security->n_rules; i++) + { + EXPECT_EQ(TSG_ACTION_MONITOR, hited_security->rules[i].action); + EXPECT_EQ(TSG_ACTION_MONITOR+i, hited_security->rules[i].rule_id); + } + + session_matched_rules_free(&a_stream, TSG_SERVICE_SECURITY, (void *)hited_security); + session_matched_rules_async(&a_stream, TSG_SERVICE_SECURITY, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY)); +} + +extern int session_packet_capture_notify(const struct streaminfo *a_stream, struct maat_rule *rules, size_t n_rules, int thread_seq); + +TEST(TSGMaster, SecurityPolicyIntercept) +{ + const struct streaminfo a_stream={0}; + struct maat_rule matched_policy[MAX_RESULT_NUM]={0}; + + matched_policy[1].action=TSG_ACTION_INTERCEPT; + matched_policy[1].rule_id=TSG_ACTION_INTERCEPT; + + // Set Intercept + session_matched_rules_notify(&a_stream, TSG_SERVICE_SECURITY, &matched_policy[1], 1, 0); + + const struct matched_policy_rules *hited_security=session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY); + EXPECT_NE(nullptr, hited_security); + EXPECT_EQ(1, hited_security->n_rules); + EXPECT_EQ(TSG_ACTION_INTERCEPT, hited_security->rules[0].action); + EXPECT_EQ(TSG_ACTION_INTERCEPT, hited_security->rules[0].rule_id); + + session_matched_rules_free(&a_stream, TSG_SERVICE_SECURITY, (void *)hited_security); + session_matched_rules_async(&a_stream, TSG_SERVICE_SECURITY, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY)); +} + + +TEST(TSGMaster, SecurityMultiplePolicyMonitorToIntercept) +{ + const struct streaminfo a_stream={0}; + struct maat_rule matched_policy[MAX_RESULT_NUM]={0}; + + matched_policy[0].action=TSG_ACTION_MONITOR; + matched_policy[0].rule_id=TSG_ACTION_MONITOR; + + matched_policy[1].action=TSG_ACTION_INTERCEPT; + matched_policy[1].rule_id=TSG_ACTION_INTERCEPT; + + // First Monitor, second Intercpt + session_matched_rules_notify(&a_stream, TSG_SERVICE_SECURITY, &matched_policy[0], 1, 0); + + int ret=session_matched_rules_copy(&a_stream, TSG_SERVICE_INTERCEPT, &(matched_policy[2]), 1); + EXPECT_EQ(0, ret); + + ret=session_matched_rules_copy(&a_stream, TSG_SERVICE_SECURITY, &(matched_policy[2]), 1); + EXPECT_EQ(1, ret); + EXPECT_EQ(TSG_ACTION_MONITOR, matched_policy[2].action); + EXPECT_EQ(TSG_ACTION_MONITOR, matched_policy[2].rule_id); + + ret=session_matched_rules_copy(&a_stream, TSG_SERVICE_SECURITY, &(matched_policy[2]), 1); + EXPECT_EQ(1, ret); + EXPECT_EQ(TSG_ACTION_MONITOR, matched_policy[2].action); + EXPECT_EQ(TSG_ACTION_MONITOR, matched_policy[2].rule_id); + + const struct matched_policy_rules *hited_security=session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY); + EXPECT_NE(nullptr, hited_security); + EXPECT_EQ(1, hited_security->n_rules); + EXPECT_EQ(TSG_ACTION_MONITOR, hited_security->rules[0].action); + EXPECT_EQ(TSG_ACTION_MONITOR, hited_security->rules[0].rule_id); + + session_matched_rules_free(&a_stream, TSG_SERVICE_SECURITY, (void *)hited_security); + session_matched_rules_async(&a_stream, TSG_SERVICE_SECURITY, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SECURITY)); + + // Set Intercept + session_matched_rules_notify(&a_stream, TSG_SERVICE_INTERCEPT, &matched_policy[1], 1, 0); + + ret=session_matched_rules_copy(&a_stream, TSG_SERVICE_INTERCEPT, &(matched_policy[2]), 1); + EXPECT_EQ(1, ret); + EXPECT_EQ(TSG_ACTION_INTERCEPT, matched_policy[2].action); + EXPECT_EQ(TSG_ACTION_INTERCEPT, matched_policy[2].rule_id); + + ret=session_matched_rules_copy(&a_stream, TSG_SERVICE_INTERCEPT, &(matched_policy[2]), 1); + EXPECT_EQ(1, ret); + EXPECT_EQ(TSG_ACTION_INTERCEPT, matched_policy[2].action); + EXPECT_EQ(TSG_ACTION_INTERCEPT, matched_policy[2].rule_id); + + const struct matched_policy_rules *hited_intercept=session_matched_rules_get(&a_stream, TSG_SERVICE_INTERCEPT); + EXPECT_NE(nullptr, hited_intercept); + EXPECT_EQ(1, hited_intercept->n_rules); + EXPECT_EQ(TSG_ACTION_INTERCEPT, hited_intercept->rules[0].action); + EXPECT_EQ(TSG_ACTION_INTERCEPT, hited_intercept->rules[0].rule_id); + + session_matched_rules_free(&a_stream, TSG_SERVICE_INTERCEPT, (void *)hited_intercept); + session_matched_rules_async(&a_stream, TSG_SERVICE_INTERCEPT, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_INTERCEPT)); +} + + +TEST(TSGMaster, ShapingAndServiceChainingPolicyNotify) +{ + const struct streaminfo a_stream={0}; + + // service chaining notify + struct maat_rule service_chaining_result[MAX_RESULT_NUM]={0}; + for(int i=0; i<MAX_RESULT_NUM/2; i++) { - s_chaining_result[i].action=TSG_ACTION_S_CHAINING; - s_chaining_result[i].config_id=TSG_ACTION_S_CHAINING+i; + service_chaining_result[i].action=TSG_ACTION_S_CHAINING; + service_chaining_result[i].rule_id=TSG_ACTION_S_CHAINING+i; + } + matched_service_chaining_rules_deal(&a_stream, service_chaining_result, MAX_RESULT_NUM/2, 0); + + const struct matched_policy_rules *hitted_service_chaining=session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING); + EXPECT_NE(nullptr, hitted_service_chaining); + EXPECT_EQ(MAX_RESULT_NUM/2, hitted_service_chaining->n_rules); + for(size_t i=0; i<hitted_service_chaining->n_rules; i++) + { + EXPECT_EQ(TSG_ACTION_S_CHAINING, hitted_service_chaining->rules[i].action); + EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hitted_service_chaining->rules[i].rule_id); + } + + // shping notify + struct maat_rule shaping_result[MAX_RESULT_NUM]={0}; + for(int i=0; i<MAX_RESULT_NUM/2; i++) + { + shaping_result[i].action=TSG_ACTION_SHAPING; + shaping_result[i].rule_id=TSG_ACTION_SHAPING+i; } - tsg_notify_hited_s_chaining_result(&a_stream, &(s_chaining_result[MAX_RESULT_NUM/2]), MAX_RESULT_NUM/2, 1); - hited_s_chaining=(struct tm_hited_result *)tsg_get_xxx_from_bridge(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id); - EXPECT_NE(nullptr, hited_s_chaining); - EXPECT_EQ(g_tsg_para.service_chaining_sid, hited_s_chaining->sid); - EXPECT_EQ(MAX_RESULT_NUM, hited_s_chaining->result_num); - for(int i=0; i<hited_s_chaining->result_num; i++) + matched_shaping_rules_deal(&a_stream, shaping_result, MAX_RESULT_NUM/2, 0); + const struct matched_policy_rules *hitted_shaping=session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING); + EXPECT_NE(nullptr, hitted_shaping); + EXPECT_EQ(MAX_RESULT_NUM/2, hitted_shaping->n_rules); + for(size_t i=0; i<hitted_shaping->n_rules; i++) { - EXPECT_EQ(TSG_ACTION_S_CHAINING, hited_s_chaining->result[i].action); - EXPECT_EQ(TSG_ACTION_S_CHAINING+i, hited_s_chaining->result[i].config_id); + EXPECT_EQ(TSG_ACTION_SHAPING, hitted_shaping->rules[i].action); + EXPECT_EQ(TSG_ACTION_SHAPING+i, hitted_shaping->rules[i].rule_id); } - free_shaping_result(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id, (void *)hited_s_chaining); - stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id, NULL); - EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge[BRIDGE_TYPE_SERVICE_CHAINING].id)); + struct segment_id_list *segment_ids=(struct segment_id_list *)session_control_segment_ids_get(&a_stream); + EXPECT_NE(nullptr, segment_ids); + EXPECT_EQ(2, segment_ids->sz_sidlist); + EXPECT_EQ(g_tsg_para.service_chaining_sid, segment_ids->sid_list[0]); + EXPECT_EQ(g_tsg_para.shaping_sid, segment_ids->sid_list[1]); + + session_segment_id_free(&a_stream, 0, (void *)segment_ids); + session_control_segment_ids_async(&a_stream, NULL); + + session_matched_rules_free(&a_stream, TSG_SERVICE_SHAPING, (void *)hitted_shaping); + session_matched_rules_async(&a_stream, TSG_SERVICE_SHAPING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_SHAPING)); + + session_matched_rules_free(&a_stream, TSG_SERVICE_CHAINING, (void *)hitted_service_chaining); + session_matched_rules_async(&a_stream, TSG_SERVICE_CHAINING, NULL); + EXPECT_EQ(nullptr, session_matched_rules_get(&a_stream, TSG_SERVICE_CHAINING)); } int main(int argc, char *argv[]) |
