summaryrefslogtreecommitdiff
path: root/shaping/test/gtest_shaper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'shaping/test/gtest_shaper.cpp')
-rw-r--r--shaping/test/gtest_shaper.cpp369
1 files changed, 153 insertions, 216 deletions
diff --git a/shaping/test/gtest_shaper.cpp b/shaping/test/gtest_shaper.cpp
index 49b9a06..cde8aef 100644
--- a/shaping/test/gtest_shaper.cpp
+++ b/shaping/test/gtest_shaper.cpp
@@ -1,7 +1,7 @@
-#include <fieldstat.h>
#include <gtest/gtest.h>
#include <cjson/cJSON.h>
#include <sys/queue.h>
+#include <fieldstat/fieldstat_easy.h>
#include "log.h"
#include "shaper.h"
@@ -12,15 +12,11 @@
#include "stub.h"
#define SHAPING_SESSION_QUEUE_LEN 128
-#define SHAPING_STAT_FILE_NAME "/tmp/shaping_metrics.json"
-#define SHAPING_GLOBAL_STAT_FILE_NAME "shaping_global_metric"
#define FIELDSTAT_AUTO_TIME_MAX 999999000
char profile_type_primary[] = "primary";
char profile_type_borrow[] = "borrow";
-char line[4096];
-
static struct stub_packet* packet_new(unsigned long long income_time, unsigned int length, unsigned char dir)
{
struct stub_packet *packet;
@@ -104,12 +100,13 @@ static int judge_packet_eq(struct stub_pkt_queue *expec_queue, struct stub_pkt_q
return 0;
}
-static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int priority,
+static void shaping_stat_judge(char *file_line, int json_array_idx, int rule_id, int profile_id, int priority,
unsigned long long tx_pkts, unsigned long long tx_bytes,
unsigned long long drop_pkts, long long queue_len, long long max_latency,
unsigned char direction, char profile_type[])
{
cJSON *json = NULL;
+ cJSON *json_array_element = NULL;
cJSON *fields_json = NULL;
cJSON *tags_json = NULL;
cJSON *tmp_obj = NULL;
@@ -118,36 +115,41 @@ static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int
json = cJSON_Parse(file_line);
ASSERT_TRUE(json != NULL);
- tmp_obj = cJSON_GetObjectItem(json, "name");
+ ASSERT_EQ(json->type, cJSON_Array);
+ ASSERT_GT(cJSON_GetArraySize(json), json_array_idx);
+
+ json_array_element = cJSON_GetArrayItem(json, json_array_idx);
+
+ tmp_obj = cJSON_GetObjectItem(json_array_element, "name");
ASSERT_TRUE(tmp_obj != NULL);
- EXPECT_STREQ("traffic_shaping_rule_hits", tmp_obj->valuestring);
+ EXPECT_STREQ("shaping_stat", tmp_obj->valuestring);
/******************parse tags***********************************/
- tags_json = cJSON_GetObjectItem(json, "tags");
+ tags_json = cJSON_GetObjectItem(json_array_element, "tags");
ASSERT_TRUE(tags_json != NULL);
tmp_obj = cJSON_GetObjectItem(tags_json, "vsys_id");
ASSERT_TRUE(tmp_obj != NULL);
- EXPECT_EQ(atoi(tmp_obj->valuestring), STUB_TEST_VSYS_ID);
+ EXPECT_EQ(tmp_obj->valueint, STUB_TEST_VSYS_ID);
tmp_obj = cJSON_GetObjectItem(tags_json, "rule_id");
ASSERT_TRUE(tmp_obj != NULL);
- EXPECT_EQ(rule_id, atoi(tmp_obj->valuestring));
+ EXPECT_EQ(rule_id, tmp_obj->valueint);
tmp_obj = cJSON_GetObjectItem(tags_json, "profile_id");
ASSERT_TRUE(tmp_obj != NULL);
- EXPECT_EQ(profile_id, atoi(tmp_obj->valuestring));
+ EXPECT_EQ(profile_id, tmp_obj->valueint);
tmp_obj = cJSON_GetObjectItem(tags_json, "priority");
ASSERT_TRUE(tmp_obj != NULL);
- EXPECT_EQ(priority, atoi(tmp_obj->valuestring));
+ EXPECT_EQ(priority, tmp_obj->valueint);
tmp_obj = cJSON_GetObjectItem(tags_json, "profile_type");
ASSERT_TRUE(tmp_obj != NULL);
EXPECT_STREQ(tmp_obj->valuestring, profile_type);
/******************parse fields**********************************/
- fields_json = cJSON_GetObjectItem(json, "fields");
+ fields_json = cJSON_GetObjectItem(json_array_element, "fields");
ASSERT_TRUE(fields_json != NULL);
snprintf(attr_name, sizeof(attr_name), "%s_pkts", direction == SHAPING_DIR_OUT ? "out" : "in");
@@ -165,17 +167,19 @@ static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int
ASSERT_TRUE(tmp_obj != NULL);
EXPECT_EQ(drop_pkts, tmp_obj->valueint);
- if (max_latency != -1) {
+ //TODO: api to parse histogram
+ /*if (max_latency != -1) {
snprintf(attr_name, sizeof(attr_name), "%s_max_latency_us", direction == SHAPING_DIR_OUT ? "out" : "in");
tmp_obj = cJSON_GetObjectItem(fields_json, attr_name);
ASSERT_TRUE(tmp_obj != NULL);
EXPECT_EQ(max_latency, tmp_obj->valueint);
- }
+ }*/
snprintf(attr_name, sizeof(attr_name), "%s_queue_len", direction == SHAPING_DIR_OUT ? "out" : "in");
tmp_obj = cJSON_GetObjectItem(fields_json, attr_name);
- ASSERT_TRUE(tmp_obj != NULL);
- EXPECT_EQ(queue_len, tmp_obj->valueint);
+ if (tmp_obj != NULL) {
+ EXPECT_EQ(queue_len, tmp_obj->valueint);
+ }
cJSON_Delete(json);
@@ -184,14 +188,11 @@ static void shaping_stat_judge(char *file_line, int rule_id, int profile_id, int
static int shaping_global_stat_field_get(cJSON *metrics, const char *field_name)
{
- int metrics_size = cJSON_GetArraySize(metrics);
+ cJSON *tmp_obj = NULL;
- for (int i = 0; i < metrics_size; i++) {
- cJSON *tmp = cJSON_GetArrayItem(metrics, i);
- char *column_name = cJSON_GetObjectItem(tmp, "name")->valuestring;
- if (strcmp(column_name, field_name) == 0) {
- return cJSON_GetObjectItem(tmp, "diff")->valueint;
- }
+ tmp_obj = cJSON_GetObjectItem(metrics, field_name);
+ if (tmp_obj != NULL) {
+ return tmp_obj->valueint;
}
return -1;
@@ -200,9 +201,12 @@ static int shaping_global_stat_field_get(cJSON *metrics, const char *field_name)
static void shaping_global_stat_judge(char *file_line, int tx_pkts, int tx_bytes, int drop_pkts, int drop_bytes, int queueing_pkts, int queueing_bytes)
{
cJSON *metrics = NULL;
+ cJSON *json_array_element = NULL;
cJSON *json = cJSON_Parse(file_line);
- metrics = cJSON_GetObjectItem(json, "metrics");
+ json_array_element = cJSON_GetArrayItem(json, 0);
+
+ metrics = cJSON_GetObjectItem(json_array_element, "fields");
EXPECT_EQ(tx_pkts, shaping_global_stat_field_get(metrics, "all_tx_pkts"));
EXPECT_EQ(tx_bytes, shaping_global_stat_field_get(metrics, "all_tx_bytes"));
@@ -266,11 +270,17 @@ TEST(single_session, udp_tx_in_order)
}
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
- shaper_global_stat_refresh(ctx);
+ char *global_stat_str = NULL;
+ size_t global_stat_str_len = 0;
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]);
+
+ fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len);
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
@@ -278,24 +288,14 @@ TEST(single_session, udp_tx_in_order)
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
//judge shaping metric
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_stat_judge(line, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts
//judge shaping global metric
- stat_file = fopen(SHAPING_GLOBAL_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_global_stat_judge(line, 100, 10000, 0, 0, 0, 0);
- fclose(stat_file);
+ shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0);
+
+ free(global_stat_str);
+ free(stat_str);
}
/*session1 match rule1
@@ -355,7 +355,6 @@ TEST(bidirectional, udp_tx_in_order)
ASSERT_TRUE(TAILQ_EMPTY(&expec_tx_queue_in));
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
@@ -410,11 +409,17 @@ TEST(max_min_host_fairness_profile, udp_tx_in_order)
}
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
- shaper_global_stat_refresh(ctx);
+ char *global_stat_str = NULL;
+ size_t global_stat_str_len = 0;
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]);
+
+ fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len);
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
@@ -422,24 +427,14 @@ TEST(max_min_host_fairness_profile, udp_tx_in_order)
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
//judge shaping metric
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_stat_judge(line, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);//max latency is last 10 pkts
//judge shaping global metric
- stat_file = fopen(SHAPING_GLOBAL_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_global_stat_judge(line, 100, 10000, 0, 0, 0, 0);
- fclose(stat_file);
+ shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0);
+
+ free(global_stat_str);
+ free(stat_str);
}
/*session1 match rule1
@@ -482,9 +477,13 @@ TEST(single_session, tcp_tx_in_order)
/***********send stat data here********************/
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
shaper_stat_refresh(&ctx->thread_ctx[0], sf, 1);
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
- sleep(2);//wait telegraf generate metric
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 20, 2000, 0, 10, 0, SHAPING_DIR_OUT, profile_type_primary);//*test statistics
+ free(stat_str);
stub_refresh_token_bucket(0);
@@ -502,10 +501,9 @@ TEST(single_session, tcp_tx_in_order)
ASSERT_EQ(0, judge_packet_eq(&expec_tx_queue, actual_tx_queue, 10));
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
@@ -513,20 +511,8 @@ TEST(single_session, tcp_tx_in_order)
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_stat_judge(line, 0, 0, 1, 20, 2000, 0, 10, 0, SHAPING_DIR_OUT, profile_type_primary);
-
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_stat_judge(line, 0, 0, 1, 10, 1000, 0, 0, 31000, SHAPING_DIR_OUT, profile_type_primary);
-
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 30, 3000, 0, 0, 31000, SHAPING_DIR_OUT, profile_type_primary);
+ free(stat_str);
}
/*session1 match rule1
@@ -581,10 +567,12 @@ TEST(single_session, udp_diff_direction)
ASSERT_TRUE(TAILQ_EMPTY(actual_tx_queue));
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
@@ -592,18 +580,9 @@ TEST(single_session, udp_diff_direction)
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_stat_judge(line, 0, 0, 1, 20, 2000, 0, 0, 21000, SHAPING_DIR_OUT, profile_type_primary);
-
- shaping_stat_judge(line, 0, 0, 1, 20, 2000, 0, 0, 0, SHAPING_DIR_IN, profile_type_primary);
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 20, 2000, 0, 0, 21000, SHAPING_DIR_OUT, profile_type_primary);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 20, 2000, 0, 0, 0, SHAPING_DIR_IN, profile_type_primary);
+ free(stat_str);
}
/*session1 match rule1, rule2, rule3
@@ -660,33 +639,28 @@ TEST(single_session, udp_multi_rules)
}
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 0
- shaping_stat_judge(line, 0, 0, 1, 100, 10000, 0, 0, 507000, SHAPING_DIR_OUT, profile_type_primary);
+ //profile_id 0
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 507000, SHAPING_DIR_OUT, profile_type_primary);
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 1
- shaping_stat_judge(line, 1, 1, 1, 100, 10000, 0, 0, 1000, SHAPING_DIR_OUT, profile_type_primary);
+ //profile_id 1
+ shaping_stat_judge(stat_str, 1, 1, 1, 1, 100, 10000, 0, 0, 1000, SHAPING_DIR_OUT, profile_type_primary);
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 2
- shaping_stat_judge(line, 2, 2, 1, 100, 10000, 0, 0, 91000, SHAPING_DIR_OUT, profile_type_primary);//max latency is first queued pkt
+ //profile_id 2
+ shaping_stat_judge(stat_str, 2, 2, 2, 1, 100, 10000, 0, 0, 91000, SHAPING_DIR_OUT, profile_type_primary);//max latency is first queued pkt
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ free(stat_str);
}
/*session1 match rule1
@@ -735,30 +709,25 @@ TEST(single_session, udp_borrow)
}
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 1, primary
- shaping_stat_judge(line, 1, 1, 1, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);
+ //profile_id 1, primary
+ shaping_stat_judge(stat_str, 0, 1, 1, 1, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 2, borrow
- shaping_stat_judge(line, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
+ //profile_id 2, borrow
+ shaping_stat_judge(stat_str, 1, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ free(stat_str);
}
/*session1 match rule1
@@ -810,35 +779,28 @@ TEST(single_session, udp_borrow_same_priority_9)
}
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
+ //profile_id 1, primary
+ shaping_stat_judge(stat_str, 0, 1, 1, 9, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 1, primary
- shaping_stat_judge(line, 1, 1, 9, 0, 0, 0, 0, 171000, SHAPING_DIR_OUT, profile_type_primary);
+ //profile_id 2, borrow
+ shaping_stat_judge(stat_str, 1, 1, 2, 9, 0, 0, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
-#if 0 //fieldstat don't output a row when all values is zero
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 2, borrow
- shaping_stat_judge(line, 1, 2, 9, 0, 0, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
-#endif
+ //profile_id 3, borrow
+ shaping_stat_judge(stat_str, 2, 1, 3, 9, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 3, borrow
- shaping_stat_judge(line, 1, 3, 9, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
-
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ free(stat_str);
}
/*session1 match rule1
@@ -885,7 +847,6 @@ TEST(single_session_async, udp_close_before_async_exec)
ASSERT_EQ(0, judge_packet_eq(&expec_tx_queue, actual_tx_queue, 10));
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
@@ -980,33 +941,28 @@ TEST(two_session_diff_priority_same_profile, udp_borrow_in_order)
shaping_flow_free(&ctx->thread_ctx[0], sf1);
shaping_flow_free(&ctx->thread_ctx[0], sf2);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 1, primary
- shaping_stat_judge(line, 1, 1, 1, 0, 0, 0, 0, 1471000, SHAPING_DIR_OUT, profile_type_primary);
+ //profile_id 1, primary
+ shaping_stat_judge(stat_str, 0, 1, 1, 1, 0, 0, 0, 0, 1471000, SHAPING_DIR_OUT, profile_type_primary);
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 2, borrow
- shaping_stat_judge(line, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
+ //profile_id 2, borrow
+ shaping_stat_judge(stat_str, 1, 1, 2, 2, 100, 10000, 0, 0, 0, SHAPING_DIR_OUT, profile_type_borrow);
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//profile_id 2, primary
- shaping_stat_judge(line, 2, 2, 1, 100, 10000, 0, 0, 191000, SHAPING_DIR_OUT, profile_type_primary);
+ //profile_id 2, primary
+ shaping_stat_judge(stat_str, 2, 2, 2, 1, 100, 10000, 0, 0, 191000, SHAPING_DIR_OUT, profile_type_primary);
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ free(stat_str);
}
/*session1 match rule1; session2 match rule2
@@ -1089,7 +1045,6 @@ TEST(two_session_diff_priority_same_profile, two_thread_udp_tx_in_order)
shaping_flow_free(&ctx->thread_ctx[0], sf1);
shaping_flow_free(&ctx->thread_ctx[1], sf2);
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
@@ -1191,7 +1146,6 @@ TEST(two_session_diff_priority_same_profile, profile_timer_test)
shaping_flow_free(&ctx->thread_ctx[0], sf1);
shaping_flow_free(&ctx->thread_ctx[1], sf2);
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
@@ -1279,7 +1233,6 @@ TEST(two_session_diff_priority_same_profile, one_direction_dont_block_another)
shaping_flow_free(&ctx->thread_ctx[0], sf1);
shaping_flow_free(&ctx->thread_ctx[1], sf2);
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
@@ -1355,7 +1308,6 @@ TEST(two_sessions, priority_non_block)
shaping_flow_free(&ctx->thread_ctx[0], sf1);
shaping_flow_free(&ctx->thread_ctx[1], sf2);
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
@@ -1430,7 +1382,6 @@ TEST(two_sessions, borrow_when_primary_profile_priority_blocked)
shaping_flow_free(&ctx->thread_ctx[0], sf1);
shaping_flow_free(&ctx->thread_ctx[1], sf2);
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
@@ -1511,7 +1462,6 @@ TEST(two_sessions, primary_profile_priority_blocked_by_borrow_profile)
shaping_flow_free(&ctx->thread_ctx[0], sf1);
shaping_flow_free(&ctx->thread_ctx[1], sf2);
- fieldstat_global_disable_prometheus_endpoint();
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
@@ -1560,35 +1510,31 @@ TEST(statistics, udp_drop_pkt)
}
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
- shaper_global_stat_refresh(ctx);
+ char *global_stat_str = NULL;
+ size_t global_stat_str_len = 0;
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]);
+
+ fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len);
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
- FILE *stat_file;
-
//judge shaping metric
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_stat_judge(line, 0, 0, 1, SHAPING_SESSION_QUEUE_LEN+10, (SHAPING_SESSION_QUEUE_LEN+10)*100, 100, 0, 228000, SHAPING_DIR_OUT, profile_type_primary);//every queued pkt's latency is max
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, SHAPING_SESSION_QUEUE_LEN+10, (SHAPING_SESSION_QUEUE_LEN+10)*100, 100, 0, 228000, SHAPING_DIR_OUT, profile_type_primary);//every queued pkt's latency is max
//judge shaping global metric
- stat_file = fopen(SHAPING_GLOBAL_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_global_stat_judge(line, SHAPING_SESSION_QUEUE_LEN+10, (SHAPING_SESSION_QUEUE_LEN+10)*100, 100, 10000, 0, 0);
- fclose(stat_file);
+ shaping_global_stat_judge(global_stat_str, SHAPING_SESSION_QUEUE_LEN+10, (SHAPING_SESSION_QUEUE_LEN+10)*100, 100, 10000, 0, 0);
+
+ free(global_stat_str);
+ free(stat_str);
}
/*session1 match rule1
@@ -1604,7 +1550,6 @@ TEST(statistics, udp_queueing_pkt)
int priority[] = {1};
int profile_num[] = {1};
int profile_id[][MAX_REF_PROFILE] = {{0}};
- FILE *stat_file;
TAILQ_INIT(&expec_tx_queue);
stub_init();
@@ -1624,17 +1569,23 @@ TEST(statistics, udp_queueing_pkt)
/***********send stat data here********************/
+ char *global_stat_str = NULL;
+ size_t global_stat_str_len = 0;
+ char *stat_str = NULL;
+ size_t stat_str_len = 0;
+
+ shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]);
shaper_stat_refresh(&ctx->thread_ctx[0], sf, 1);
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
- shaper_global_stat_refresh(ctx);
- sleep(2);//wait telegraf generate metric
- /*******judge global metric********/
- stat_file = fopen(SHAPING_GLOBAL_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_global_stat_judge(line, 10, 1000, 0, 0, 90, 9000);
- fclose(stat_file);
+ fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len);
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
+
+ /*******judge metric********/
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 10, 1000, 0, 90, 0, SHAPING_DIR_OUT, profile_type_primary);
+ shaping_global_stat_judge(global_stat_str, 10, 1000, 0, 0, 90, 9000);
+
+ free(global_stat_str);
+ free(stat_str);
//first 10 packets
ASSERT_EQ(0, judge_packet_eq(&expec_tx_queue, actual_tx_queue, 10));
@@ -1649,39 +1600,25 @@ TEST(statistics, udp_queueing_pkt)
}
shaping_flow_free(&ctx->thread_ctx[0], sf);
- fieldstat_global_disable_prometheus_endpoint();
/***********send stat data here********************/
- fieldstat_dynamic_passive_output(ctx->stat->instance);//send metric manualy
- shaper_global_stat_refresh(ctx);
+ shaper_thread_global_stat_refresh(&ctx->thread_ctx[0]);
+ fieldstat_easy_output(ctx->global_stat->instance, &global_stat_str, &global_stat_str_len);
+ fieldstat_easy_output(ctx->thread_ctx[0].stat->instance, &stat_str, &stat_str_len);
shaper_thread_resource_clear();
shaping_engine_destroy(ctx);
stub_clear_matched_shaping_rules();
/*******test statistics***********/
- sleep(2);//wait telegraf to output
-
//judge shaping metric
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
-
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//stat data first sent
- shaping_stat_judge(line, 0, 0, 1, 10, 1000, 0, 90, 0, SHAPING_DIR_OUT, profile_type_primary);
-
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));//stat data last sent
- shaping_stat_judge(line, 0, 0, 1, 90, 9000, 0, 0, 90000, SHAPING_DIR_OUT, profile_type_primary);
-
- fclose(stat_file);
- stat_file = fopen(SHAPING_STAT_FILE_NAME, "w");//clear stat file
- fclose(stat_file);
+ shaping_stat_judge(stat_str, 0, 0, 0, 1, 100, 10000, 0, 0, 90000, SHAPING_DIR_OUT, profile_type_primary);
//judge global metric
- stat_file = fopen(SHAPING_GLOBAL_STAT_FILE_NAME, "r");
- memset(line, 0, sizeof(line));
- ASSERT_TRUE(NULL != fgets(line, sizeof(line), stat_file));
- shaping_global_stat_judge(line, 90, 9000, 0, 0, -90, -9000);
- fclose(stat_file);
+ shaping_global_stat_judge(global_stat_str, 100, 10000, 0, 0, 0, 0);
+
+ free(global_stat_str);
+ free(stat_str);
}
int main(int argc, char **argv)