From ccf02881faee0879ad36ee09ee5e32de8758a731 Mon Sep 17 00:00:00 2001 From: 刘学利 Date: Tue, 7 Feb 2023 02:51:03 +0000 Subject: TSG-13520,TSG-13356: 支持通过tsg_pull_shaping_result函数获取命中的shaping策略,增加common_shaping_rule_ids日志字段,支持通过bridge接口及时通知命中的shaping策略,增加gtest测试用例 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/src/gtest_master.cpp | 223 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 test/src/gtest_master.cpp (limited to 'test/src/gtest_master.cpp') diff --git a/test/src/gtest_master.cpp b/test/src/gtest_master.cpp new file mode 100644 index 0000000..7b5026b --- /dev/null +++ b/test/src/gtest_master.cpp @@ -0,0 +1,223 @@ +#include +#include +#include + +#include "gtest_common.h" +#include "tsg_rule.h" +#include "tsg_entry.h" +#include + +TEST(TSGMaster, ShapingSetRuleIds) +{ + const struct streaminfo a_stream={0}; + struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + + for(int i=0; ishaping_result_num); + for(int i=0; ishaping_result_num; 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); + } + + free_shaping_result(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], (void *)shaping_label); + stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], NULL); + EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT])); +} + +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; ishaping_result_num; 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); + } + + return 0; +} + +TEST(TSGMaster, ShapingPolicyNotify) +{ + const struct streaminfo a_stream={0}; + struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + + for(int i=0; ishaping_result_num); + for(int i=0; ishaping_result_num; 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); + } + + free_shaping_result(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], (void *)shaping_label); + stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], NULL); + EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT])); +} + +int shaping_policy_notify_null_cb(const struct streaminfo *stream, int bridge_id, void *data) +{ + EXPECT_EQ(nullptr, data); + return 0; +} + +TEST(TSGMaster, ShapingPolicyNotifyNULL) +{ + const struct streaminfo a_stream={0}; + struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + + stream_bridge_register_data_sync_cb(g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], shaping_policy_notify_null_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_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT]); + EXPECT_EQ(nullptr, shaping_label); +} + +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; ishaping_result_num; 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); + } + + return 0; +} + +TEST(TSGMaster, ShapingDuplicatePolicyNotify) +{ + const struct streaminfo a_stream={0}; + struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + + for(int i=0; ishaping_result_num); + for(int i=0; ishaping_result_num; 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); + } + + free_shaping_result(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], (void *)shaping_label); + stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], NULL); + EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT])); +} + +TEST(TSGMaster, ShapingDuplicatePolicyMultipleNotify) +{ + const struct streaminfo a_stream={0}; + struct Maat_rule_t shaping_result[MAX_RESULT_NUM]={0}; + + for(int i=0; ishaping_result_num); + for(int i=0; ishaping_result_num; 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); + } + + // 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; ishaping_result_num); + for(int i=0; ishaping_result_num; 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); + } + + free_shaping_result(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], (void *)shaping_label); + stream_bridge_async_data_put(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], NULL); + EXPECT_EQ(nullptr, stream_bridge_async_data_get(&a_stream, g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT])); +} + +int main(int argc, char *argv[]) +{ + TSG_MASTER_INIT(); + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} + -- cgit v1.2.3