summaryrefslogtreecommitdiff
path: root/test/src/gtest_master.cpp
diff options
context:
space:
mode:
author刘学利 <[email protected]>2023-02-07 02:51:03 +0000
committer刘学利 <[email protected]>2023-02-07 02:51:03 +0000
commitccf02881faee0879ad36ee09ee5e32de8758a731 (patch)
treefcd06da2d070c10f05ee96898b40765ad3fd8f6c /test/src/gtest_master.cpp
parent5328511bfb1f8e116e6fa87703c7f251a5ac4a7e (diff)
TSG-13520,TSG-13356: 支持通过tsg_pull_shaping_result函数获取命中的shaping策略,增加common_shaping_rule_ids日志字段,支持通过bridge接口及时通知命中的shaping策略,增加gtest测试用例v5.10.0
Diffstat (limited to 'test/src/gtest_master.cpp')
-rw-r--r--test/src/gtest_master.cpp223
1 files changed, 223 insertions, 0 deletions
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 <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "gtest_common.h"
+#include "tsg_rule.h"
+#include "tsg_entry.h"
+#include <gtest/gtest.h>
+
+TEST(TSGMaster, ShapingSetRuleIds)
+{
+ const struct streaminfo a_stream={0};
+ struct Maat_rule_t 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;
+ }
+
+ tsg_notify_hited_shaping_result(&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);
+ 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_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT]);
+ 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++)
+ {
+ 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; i<shaping_label->shaping_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; i<MAX_RESULT_NUM; i++)
+ {
+ shaping_result[i].action=TSG_ACTION_SHAPING;
+ shaping_result[i].config_id=TSG_ACTION_SHAPING+i;
+ }
+
+ stream_bridge_register_data_sync_cb(g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], 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_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT]);
+ 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++)
+ {
+ 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; i<shaping_label->shaping_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; i<MAX_RESULT_NUM; i++)
+ {
+ shaping_result[i].action=TSG_ACTION_SHAPING;
+ shaping_result[i].config_id=TSG_ACTION_SHAPING+(i%4);
+ }
+
+ stream_bridge_register_data_sync_cb(g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], shaping_duplicate_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);
+ }
+
+ 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_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++)
+ {
+ 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; i<MAX_RESULT_NUM/2; i++)
+ {
+ shaping_result[i].action=TSG_ACTION_SHAPING;
+ shaping_result[i].config_id=TSG_ACTION_SHAPING+i;
+ }
+
+ stream_bridge_register_data_sync_cb(g_tsg_para.bridge_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT], shaping_duplicate_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);
+ }
+
+ 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_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++)
+ {
+ 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; 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_id[BRIDGE_TYPE_NOTIFY_SHAPING_RESULT]);
+ 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++)
+ {
+ 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();
+}
+