diff options
| author | root <[email protected]> | 2024-01-11 03:06:37 +0000 |
|---|---|---|
| committer | root <[email protected]> | 2024-01-11 03:06:37 +0000 |
| commit | 20ff111d734e1538a0b6e5f585f1989b47e38187 (patch) | |
| tree | 0d4f46a3947839dff9401b5073ec2f201d01f355 /shaping/test | |
| parent | 9a54fa318e5f744c2e545e25f6eff9bac4722de0 (diff) | |
TSG-18497: 报文排队时同时计算primary profile和borrow profile的队列长度,但是borrow profile的队列长度只更新到swarmkv 优先级信息中,不更新到队列长度统计中
Diffstat (limited to 'shaping/test')
| -rw-r--r-- | shaping/test/gtest_shaper.cpp | 80 | ||||
| -rw-r--r-- | shaping/test/stub.h | 1 |
2 files changed, 79 insertions, 2 deletions
diff --git a/shaping/test/gtest_shaper.cpp b/shaping/test/gtest_shaper.cpp index d72a410..4b0cda6 100644 --- a/shaping/test/gtest_shaper.cpp +++ b/shaping/test/gtest_shaper.cpp @@ -1591,7 +1591,7 @@ TEST(two_sessions, priority_non_block) profile_a(id 0): limit 1000 profile_b(id 1): limit 1000 */ -TEST(two_sessions, priority_block_borrow) +TEST(two_sessions, borrow_when_primary_profile_priority_blocked) { struct stub_pkt_queue expec_tx_queue1; struct stub_pkt_queue expec_tx_queue2; @@ -1653,6 +1653,82 @@ TEST(two_sessions, priority_block_borrow) stub_clear_matched_shaping_rules(); } +/*session1 match rule1; session2 match rule2 + rule1: + priority:1 + primary profile_a: (priority 1) + borrow profile_b: (priority 2) + rule2: + priority:5 + primary profile_b: (priority 5) + +profile_a(id 0): limit 0 +profile_b(id 1): limit 1000 +*/ +TEST(two_sessions, primary_profile_priority_blocked_by_borrow_profile) +{ + struct stub_pkt_queue expec_tx_queue1; + struct stub_pkt_queue expec_tx_queue2; + struct stub_pkt_queue *actual_tx_queue; + struct shaping_ctx *ctx = NULL; + struct shaping_flow *sf1 = NULL; + struct shaping_flow *sf2 = NULL; + long long rule_ids[] = {1, 2}; + long long rule_id1[] = {1}; + long long rule_id2[] = {2}; + int profile_nums[] = {2, 1}; + int prioritys[] = {1, 5}; + int profile_id[][MAX_REF_PROFILE] = {{0, 1}, {1}}; + + + TAILQ_INIT(&expec_tx_queue1); + TAILQ_INIT(&expec_tx_queue2); + stub_init(); + + ctx = shaping_engine_init(); + ASSERT_TRUE(ctx != NULL); + sf1 = shaping_flow_new(&ctx->thread_ctx[0]); + ASSERT_TRUE(sf1 != NULL); + sf2 = shaping_flow_new(&ctx->thread_ctx[1]); + ASSERT_TRUE(sf2 != NULL); + + stub_set_matched_shaping_rules(2, rule_ids, prioritys, profile_nums, profile_id); + + stub_set_token_bucket_avl_per_sec(0, 0, SHAPING_DIR_OUT); + stub_set_token_bucket_avl_per_sec(1, 1000, SHAPING_DIR_OUT); + actual_tx_queue = stub_get_tx_queue(); + shaper_rules_update(&ctx->thread_ctx[0], sf1, rule_id1, 1); + shaper_rules_update(&ctx->thread_ctx[1], sf2, rule_id2, 1); + + /*******send packets***********/ + send_packets(&ctx->thread_ctx[0], sf1, 100, 100, SHAPING_DIR_OUT, &expec_tx_queue1, 1, 0); + send_packets(&ctx->thread_ctx[1], sf2, 100, 100, SHAPING_DIR_OUT, &expec_tx_queue2, 1, 0); + + ASSERT_EQ(0, judge_packet_eq(&expec_tx_queue1, actual_tx_queue, 10)); + while (!TAILQ_EMPTY(&expec_tx_queue1)) { + stub_refresh_token_bucket(1); + polling_entry(ctx->thread_ctx[0].sp, ctx->thread_ctx[0].stat, &ctx->thread_ctx[0]); + polling_entry(ctx->thread_ctx[1].sp, ctx->thread_ctx[1].stat, &ctx->thread_ctx[1]);//blocked by priority, sf1 has priority 2 for profile_b(id 1) + stub_curr_time_ns_inc(STUB_TIME_INC_FOR_HMGET); + + ASSERT_EQ(0, judge_packet_eq(&expec_tx_queue1, actual_tx_queue, 1)); + } + + while (!TAILQ_EMPTY(&expec_tx_queue2)) { + stub_refresh_token_bucket(1); + polling_entry(ctx->thread_ctx[1].sp, ctx->thread_ctx[1].stat, &ctx->thread_ctx[1]); + + ASSERT_EQ(0, judge_packet_eq(&expec_tx_queue2, actual_tx_queue, 1)); + } + + 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(); +} + /*session1 match rule1 rule1: profile_a @@ -1877,6 +1953,6 @@ TEST(statistics, udp_queueing_pkt) int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); - //testing::GTEST_FLAG(filter) = "single_session.dup_primary_profile"; + //testing::GTEST_FLAG(filter) = "two_sessions.primary_profile_priority_blocked_by_borrow_profile"; return RUN_ALL_TESTS(); }
\ No newline at end of file diff --git a/shaping/test/stub.h b/shaping/test/stub.h index f7119d2..e4c0476 100644 --- a/shaping/test/stub.h +++ b/shaping/test/stub.h @@ -10,6 +10,7 @@ #define STUB_MAAT_SHAPING_PROFILE_TABLE_ID 1 #define STUB_TIME_INC_FOR_PACKET 1000000 +#define STUB_TIME_INC_FOR_HMGET 10000000 #define STUB_TEST_VSYS_ID 2333 |
