diff options
| author | lijia <[email protected]> | 2024-04-25 11:52:01 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2024-04-25 11:52:01 +0800 |
| commit | 7f3986cd556b00de3b4623bf21ccdce46b511000 (patch) | |
| tree | 7ed1ecece8d1ab03f6f0f73336239dc59c6db718 /module_test | |
| parent | 414b9bcf81c482767ee25fc4e1ab427ea933e94b (diff) | |
Fix bug: where enabling 'inject_all_enabled=1' would cause original packet dup check also be enabled
Diffstat (limited to 'module_test')
| -rw-r--r-- | module_test/src/gtest_inline_run.cpp | 2 | ||||
| -rw-r--r-- | module_test/src/gtest_main.cpp | 37 | ||||
| -rw-r--r-- | module_test/src/gtest_sapp_fun.h | 6 | ||||
| -rw-r--r-- | module_test/src/gtest_sapp_tcp.cpp | 70 | ||||
| -rw-r--r-- | module_test/src/gtest_sapp_tcp_plug.cpp | 18 | ||||
| -rw-r--r-- | module_test/src/gtest_sapp_udp.cpp | 43 | ||||
| -rw-r--r-- | module_test/src/gtest_sapp_udp_plug.cpp | 48 |
7 files changed, 155 insertions, 69 deletions
diff --git a/module_test/src/gtest_inline_run.cpp b/module_test/src/gtest_inline_run.cpp index 41b3edc..c8f218b 100644 --- a/module_test/src/gtest_inline_run.cpp +++ b/module_test/src/gtest_inline_run.cpp @@ -515,6 +515,7 @@ void inline_dup_inject_ipv4_tcp_run(void) update_config_file_by_lastline("etc/sapp.toml", "packet_io.polling","enabled", "1"); update_config_file("etc/sapp.toml", "timeout", "3"); /* inline模式必须靠polling结束超时的流 */ update_config_file("etc/sapp.toml", "inject_all_enabled", "1"); + update_config_file("etc/sapp.toml", "first_packets", "6"); update_config_file("etc/gdev.conf", "sendto_gdev_ip", "10.3.36.1"); update_plugin_inf("TCP_ALL", "inline_dup_inject_tcpall_entry"); @@ -538,6 +539,7 @@ void inline_dup_inject_ipv6_tcp_run(void) update_config_file_by_lastline("etc/sapp.toml", "packet_io.polling","enabled", "1"); update_config_file("etc/sapp.toml", "timeout", "3"); /* inline模式必须靠polling结束超时的流 */ update_config_file("etc/sapp.toml", "inject_all_enabled", "1"); + update_config_file("etc/sapp.toml", "first_packets", "16"); update_config_file("etc/gdev.conf", "sendto_gdev_ip", "10.3.36.1"); update_plugin_inf("TCP_ALL", "inline_dup_inject_tcpall_entry"); diff --git a/module_test/src/gtest_main.cpp b/module_test/src/gtest_main.cpp index faaba60..7ca66df 100644 --- a/module_test/src/gtest_main.cpp +++ b/module_test/src/gtest_main.cpp @@ -24,7 +24,7 @@ int g_slient_mode = 0; const char *for_test_sapp_version = "4.2.68_c9193fe"; -static int g_libsapp_devel_res = GTEST_SAPP_ERR; /* 使用lisapp_devel.so在同一个进程内运行的测试结�?*/ +static int g_libsapp_devel_res = GTEST_SAPP_ERR; /* 使用lisapp_devel.so在同一个进程内运行的测试结�??*/ int gtest_set_libsapp_devel_result(int res_value) { g_libsapp_devel_res = res_value; @@ -170,7 +170,7 @@ void call_libsapp_devel_online_mode(void) while(sapp_get_current_state() != SAPP_STATE_PROCESSING){ usleep(100); } - sleep(3); /* TODO: 此处不用超时, 而是靠一个标志位或特定状�?*/ + sleep(3); /* TODO: 此处不用超时, 而是靠一个标志位或特定状�??*/ libsapp_destroy_env(); } @@ -278,13 +278,19 @@ TEST(udp, link_s2c_10pkt) } -#define udp_dup_pkt 1 // for SI symbol view -TEST(udp, dup_pkt) +#define udp_dup_pkt_positive 1 // for SI symbol view +TEST(udp, dup_pkt_positive) { - udp_dup_pkt_identify_run(); + udp_dup_pkt_positive_run(); ASSERT_EQ(GTEST_SAPP_SUCC, gtest_get_libsapp_devel_result()); } +#define udp_dup_pkt_negative 1 // for SI symbol view +TEST(udp, dup_pkt_negative) +{ + udp_dup_pkt_negative_run(); + ASSERT_EQ(GTEST_SAPP_SUCC, gtest_get_libsapp_devel_result()); +} #define udp_cheat_l2tp_dup_dns 1 // for SI symbol view TEST(udp, cheat_l2tp_dup_dns) @@ -453,10 +459,17 @@ TEST(tcp, dumpfile_list) } -#define tcp_dup_pkt 1 // for SI symbol view -TEST(tcp, dup_pkt) +#define tcp_dup_pkt_positive 1 // for SI symbol view +TEST(tcp, dup_pkt_positive) +{ + tcp_dup_pkt_positive_run(); + ASSERT_EQ(GTEST_SAPP_SUCC, gtest_get_libsapp_devel_result()); +} + +#define tcp_dup_pkt_negative 1 // for SI symbol view +TEST(tcp, dup_pkt_negative) { - tcp_dup_pkt_identify_run(); + tcp_dup_pkt_negative_run(); ASSERT_EQ(GTEST_SAPP_SUCC, gtest_get_libsapp_devel_result()); } @@ -1313,7 +1326,7 @@ TEST(timer, simple) /********************* inject rst packet Test ***********************/ #if SAPP_V4 //rst_tcp only support in sapp-v4.0 -#if 0 /* 改成用sapp_benchmark框架测试, 不需要写代码、不用重新编�?*/ +#if 0 /* 改成用sapp_benchmark框架测试, 不需要写代码、不用重新编�??*/ #define inject_rst_packet_test_v4 1 // for SI symbol view TEST(inject, rst_pkt_v4) { @@ -1324,7 +1337,7 @@ TEST(inject, rst_pkt_v4) /********************* inject rst packet Test ***********************/ #define inject_rst_packet_test_v6 1 // for SI symbol view -#if 0 /* 改成用sapp_benchmark框架测试, 不需要写代码、不用重新编�?*/ +#if 0 /* 改成用sapp_benchmark框架测试, 不需要写代码、不用重新编�??*/ TEST(inject, rst_pkt_v6) { MESA_rst_tcp_test_v6_run(); @@ -2031,7 +2044,7 @@ TEST(proxy, simple) #define _proxy_kill_tcp 1 /* TODO: - 使用libsapp_devel实测, 两个用例不能顺序执行, 疑似与解析层dlopen有关�? 暂未定位原因, 待解�?!!! + 使用libsapp_devel实测, 两个用例不能顺序执行, 疑似与解析层dlopen有关�?? 暂未定位原因, 待解�??!!! */ #if 0 TEST(proxy, kill_tcp) @@ -2153,7 +2166,7 @@ TEST(fake_marsio, vlan_flip_and_symmetric_mpls1vs2) #define _fake_marsio_vlan_mac_flip_inject_no_asymmetric 1 TEST(fake_marsio, vlan_mac_flip_inject_no_asymmetric) { - /* 别着�? 不是BUG! + /* 别着�?? 不是BUG! 这个测试用例就是应该错的 !!! */ EXPECT_EXIT(fake_marsio_vlan_mac_flipping_inject_run(0), testing::ExitedWithCode(1), "index:4, mac addr error"); diff --git a/module_test/src/gtest_sapp_fun.h b/module_test/src/gtest_sapp_fun.h index a6ed48b..bb2e2ad 100644 --- a/module_test/src/gtest_sapp_fun.h +++ b/module_test/src/gtest_sapp_fun.h @@ -279,7 +279,8 @@ void tcp_lost_pkt_run(void); void tcp_lost_pkt_manual_run(void); void tcp_raw_entry_run(void); void tcp_dumpfile_list_run(void); -void tcp_dup_pkt_identify_run(void); +void tcp_dup_pkt_positive_run(void); +void tcp_dup_pkt_negative_run(void); void tcp_dropstream_and_unorder_run(void); void tcp_well_known_port_run_v4(void); void tcp_not_use_well_known_port_run_v4(void); @@ -302,7 +303,8 @@ void udp_link_c2s_1pkt_run(void); void udp_link_c2s_10pkt_run(void); void udp_link_s2c_1pkt_run(void); void udp_link_s2c_10pkt_run(void); -void udp_dup_pkt_identify_run(void); +void udp_dup_pkt_positive_run(void); +void udp_dup_pkt_negative_run(void); void cheat_l2tp_dup_dns_run(void); void cheat_gtp_dup_dns_run(void); void udp_well_known_port_run_v4(void); diff --git a/module_test/src/gtest_sapp_tcp.cpp b/module_test/src/gtest_sapp_tcp.cpp index fe6c0d7..59ab500 100644 --- a/module_test/src/gtest_sapp_tcp.cpp +++ b/module_test/src/gtest_sapp_tcp.cpp @@ -59,7 +59,7 @@ void tcp_oos_run(void) } -/* TCP因乱�?? 且最大乱序数不合适导致丢包测�??*/ +/* TCP因乱�?? 且最大乱序数不合适导致丢包测�??*/ void tcp_oos_lost_pkt_run(void) { set_default_config(); @@ -221,7 +221,7 @@ void tcp_lost_pkt_run(void) 33333333333333333333333333333333333333333333333 44444444444444444444444444444444444444444444444 55555555555555555555555555555555555555555555555 - 故意将第3个数据包删除, 测试丢包检测功�?? + 故意将第3个数据包删除, 测试丢包检测功�?? */ void tcp_lost_pkt_manual_run(void) { @@ -251,8 +251,8 @@ void tcp_raw_entry_run(void) } /* - 读取一批pcap文件, 这些小pcap文件实际是通过editcap切割一个原始pcap文件而得�?? - 目的是测�??f --dumpfile-list参数功能. + 读取一批pcap文件, 这些小pcap文件实际是通过editcap切割一个原始pcap文件而得�?? + 目的是测�??f --dumpfile-list参数功能. */ void tcp_dumpfile_list_run(void) { @@ -282,7 +282,7 @@ void tcp_dumpfile_list_run(void) } -void tcp_dup_pkt_identify_run(void) +void tcp_dup_pkt_positive_run(void) { set_default_config(); update_config_file("etc/sapp.toml", "syn_mandatory", "0"); @@ -290,9 +290,27 @@ void tcp_dup_pkt_identify_run(void) update_config_file("etc/sapp.toml", "bloom_capacity", "1000000"); update_config_file("etc/sapp.toml", "bloom_error_rate", "0.00001"); update_config_file("etc/sapp.toml", "bloom_timeout", "10"); - /* tcp层的重复数据包不能在tcp入口测试,因为序号一样肯定被认为是重传而不调用插件,要挂载到TCP_ALL�?? */ - update_plugin_inf("TCP_ALL", "tcpall_dup_pkt_check"); - /* 此pcap包一共有9个包,前两个和后两个是人为制造的重复�?? tcpall插件应该只收�??个包才是对的 */ + /* tcp层的重复数据包不能在tcp入口测试,因为序号一样肯定被认为是重传而不调用插件,要挂载到TCP_ALL�?? */ + update_plugin_inf("TCP_ALL", "tcpall_dup_pkt_positive_check"); + /* 此pcap包一共有9个包,前两个和后两个是人为制造的重复包, tcpall插件应该只收到7个包才是对的 */ + set_pcap_dumpfile("for_gtest_only/duplicate_packet/tcp_no_syn_dup.pcap"); + ASSERT_EQ(file_md5_checksum("dumpfile", "a56bfea74cd5168e9e3cbf1e2c5c17fb"),0); + + call_libsapp_devel_for_dumpfile_topspeed(); +} + +void tcp_dup_pkt_negative_run(void) +{ + set_default_config(); + update_config_file("etc/sapp.toml", "syn_mandatory", "0"); + update_config_file("etc/sapp.toml", "original_ipv4_tcp_enabled", "0"); + update_config_file("etc/sapp.toml", "inject_all_enabled", "1"); + update_config_file("etc/sapp.toml", "bloom_capacity", "1000000"); + update_config_file("etc/sapp.toml", "bloom_error_rate", "0.00001"); + update_config_file("etc/sapp.toml", "bloom_timeout", "10"); + /* tcp层的重复数据包不能在tcp入口测试,因为序号一样肯定被认为是重传而不调用插件,要挂载到TCP_ALL�?? */ + update_plugin_inf("TCP_ALL", "tcpall_dup_pkt_negative_check"); + /* 此pcap包一共有9个包,前两个和后两个是人为制造的重复包, 关闭重复包检查, tcpall插件应该全收到9个包才是对的 */ set_pcap_dumpfile("for_gtest_only/duplicate_packet/tcp_no_syn_dup.pcap"); ASSERT_EQ(file_md5_checksum("dumpfile", "a56bfea74cd5168e9e3cbf1e2c5c17fb"),0); @@ -300,7 +318,7 @@ void tcp_dup_pkt_identify_run(void) } /* - 一个流有乱序包, 但是插件曾经调用过MSO_DROP_STREAM, 理论上什么情况都不应该再调用插件�?? + 一个流有乱序包, 但是插件曾经调用过MSO_DROP_STREAM, 理论上什么情况都不应该再调用插件�?? */ void tcp_dropstream_and_unorder_run(void) { @@ -316,7 +334,7 @@ void tcp_dropstream_and_unorder_run(void) } /* - 期待�??gtest_sapp_hybrid_stream.log 日志内容: + 期待�??gtest_sapp_hybrid_stream.log 日志内容: stream:192.168.36.103.57222>120.241.25.57.36688,c2s_pkt:5,c2s_byte:548,s2c_pkt:4,s2c_byte:20 stream:192.168.36.103.57235>120.241.25.15.36688,c2s_pkt:7,c2s_byte:424,s2c_pkt:5,s2c_byte:40 @@ -462,7 +480,7 @@ void hybrid_pure_tcp_run(void) update_plugin_inf_with_options("./plug/business/gtest_sapp", "gtest", "gtest_sapp_slave_init", "hybrid_tcp_destroy", "TCP", "hybrid_stream_log_entry"); - /* hybrid混合包测试用例不开启重复流量检�??*/ + /* hybrid混合包测试用例不开启重复流量检�??*/ update_config_file("etc/sapp.toml", "inject_all_enabled", "0"); update_config_file("etc/sapp.toml", "original_ipv4_tcp_enabled", "0"); update_config_file("etc/sapp.toml", "original_ipv4_udp_enabled", "0"); @@ -483,7 +501,7 @@ void hybrid_pure_tcp_run(void) /* - 单次读取一批pcap包测�?? 期待�??gtest_sapp_hybrid_stream.log: + 单次读取一批pcap包测�?? 期待�??gtest_sapp_hybrid_stream.log: stream:2001::192:168:40:134.37948>2001::192:168:40:133.22,c2s_pkt:60,c2s_byte:3937,s2c_pkt:41,s2c_byte:4813 stream:2a00:5e80:101:212d:504:7b1:2572:db22.37034>2606:f200:0:7:bad:f00d:d00d:1.80,c2s_pkt:5,c2s_byte:82,s2c_pkt:4,s2c_byte:381 @@ -516,7 +534,7 @@ void hybrid_dataset_run(void) update_config_file("etc/sapp.toml", "reorder_pkt_max", "100"); update_config_file("etc/sapp.toml", "timeout", "0"); - /* hybrid混合包测试用例不开启重复流量检�??*/ + /* hybrid混合包测试用例不开启重复流量检�??*/ update_config_file("etc/sapp.toml", "inject_all_enabled", "0"); update_config_file("etc/sapp.toml", "original_ipv4_tcp_enabled", "0"); update_config_file("etc/sapp.toml", "original_ipv4_udp_enabled", "0"); @@ -535,7 +553,7 @@ void hybrid_dataset_run(void) /* - 带fin包正常结束的tcp四元组重用测�?? 没有TCP_ALL插件. + 带fin包正常结束的tcp四元组重用测�?? 没有TCP_ALL插件. */ void tcp_tuple4_reuse_with_fin_run(void) { @@ -563,7 +581,7 @@ void tcp_tuple4_reuse_with_fin_run(void) } /* - 带fin包正常结束的tcp四元组重用测�?? 还加载了TCP_ALL插件, 此时第一个流结束不会真正free, 而是转到nouse链表. + 带fin包正常结束的tcp四元组重用测�?? 还加载了TCP_ALL插件, 此时第一个流结束不会真正free, 而是转到nouse链表. */ void tcpall_tuple4_reuse_with_fin_run(void) { @@ -595,7 +613,7 @@ void tcpall_tuple4_reuse_with_fin_run(void) /* - 没有正常结束的tcp四元组重用测�?? + 没有正常结束的tcp四元组重用测�?? */ void tcp_tuple4_reuse_no_close_run(void) { @@ -634,7 +652,7 @@ void tcp_well_known_port_run_v4(void) update_plugin_inf("TCP", "tcp_well_known_port_v4_entry"); system("echo [TCP] > ./etc/well_known_port.conf"); system("echo 8088 >> ./etc/well_known_port.conf"); - /* UDP的配置在这里其实没啥�?? 就是顺带测试一下解析配置文件的功能 */ + /* UDP的配置在这里其实没啥�?? 就是顺带测试一下解析配置文件的功能 */ system("echo [UDP] >> ./etc/well_known_port.conf"); system("echo 12345 >> ./etc/well_known_port.conf"); system("echo 54321 >> ./etc/well_known_port.conf"); @@ -648,7 +666,7 @@ void tcp_well_known_port_run_v4(void) /* 测试小端口是客户端的四元组创建流方向, - 此包是带SYN标志�?? 理论上不应该受etc/well_known_port.conf影响, 故意将源端口33720设成服务�?? + 此包是带SYN标志�?? 理论上不应该受etc/well_known_port.conf影响, 故意将源端口33720设成服务�?? */ void tcp_not_use_well_known_port_run_v4(void) { @@ -657,7 +675,7 @@ void tcp_not_use_well_known_port_run_v4(void) update_plugin_inf("TCP", "tcp_should_not_use_well_known_port_v4_entry"); system("echo [TCP] > ./etc/well_known_port.conf"); system("echo 33720 >> ./etc/well_known_port.conf"); - /* UDP的配置在这里其实没啥�?? 就是顺带测试一下解析配置文件的功能 */ + /* UDP的配置在这里其实没啥�?? 就是顺带测试一下解析配置文件的功能 */ system("echo [UDP] >> ./etc/well_known_port.conf"); system("echo 12345 >> ./etc/well_known_port.conf"); system("echo 54321 >> ./etc/well_known_port.conf"); @@ -680,7 +698,7 @@ void tcp_well_known_port_run_v6(void) update_plugin_inf("TCP", "tcp_well_known_port_v6_entry"); system("echo [TCP] > ./etc/well_known_port.conf"); system("echo 55555 >> ./etc/well_known_port.conf"); - /* UDP的配置在这里其实没啥�?? 就是顺带测试一下解析配置文件的功能 */ + /* UDP的配置在这里其实没啥�?? 就是顺带测试一下解析配置文件的功能 */ system("echo [UDP] >> ./etc/well_known_port.conf"); system("echo 12345 >> ./etc/well_known_port.conf"); system("echo 54321 >> ./etc/well_known_port.conf"); @@ -693,7 +711,7 @@ void tcp_well_known_port_run_v6(void) } /* - tcp重传包处�?? + tcp重传包处�?? */ void tcp_retransmit_run(void) { @@ -734,9 +752,9 @@ void tcp_overlap_run(void) /* 在没有TCP插件且第一个包就是乱序的情况下, - sapp在函数tcp_deal_unorder()�?? 会调用update_stream_list_raw_pkt_pointer(), + sapp在函数tcp_deal_unorder()�?? 会调用update_stream_list_raw_pkt_pointer(), 但是忘记恢复rawpkt指针就返回了, 导致后续再访问rawpkt其实是被free的乱序包中的rawpkt, - 如果有插件获取原始包选项, �??021-08-23之前是错误的! + 如果有插件获取原始包选项, �??021-08-23之前是错误的! */ void tcp_first_unorder_rawpkt_run(void) { @@ -751,7 +769,7 @@ void tcp_first_unorder_rawpkt_run(void) } /* - gtp有序�?? 无扩展头�?? + gtp有序�?? 无扩展头�?? */ void gtp_with_seq_no_ext_tcp_run(void) { @@ -766,7 +784,7 @@ void gtp_with_seq_no_ext_tcp_run(void) } /* - gtp无序�?? 但是有扩展头�?? + gtp无序�?? 但是有扩展头�?? */ void gtp_without_seq_and_ext_tcp_run(void) { @@ -782,7 +800,7 @@ void gtp_without_seq_and_ext_tcp_run(void) /* - gtp有序号且有扩展头�?? + gtp有序号且有扩展头�?? */ #if (0 == HIGH_PERF) void gtp_with_seq_and_ext_tcp_run(void) diff --git a/module_test/src/gtest_sapp_tcp_plug.cpp b/module_test/src/gtest_sapp_tcp_plug.cpp index b9833b0..4257442 100644 --- a/module_test/src/gtest_sapp_tcp_plug.cpp +++ b/module_test/src/gtest_sapp_tcp_plug.cpp @@ -697,7 +697,7 @@ extern "C" char tcp_dumpfile_list_entry(struct streaminfo *pstream,void **pme, i } -extern "C" char tcpall_dup_pkt_check(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) +extern "C" char tcpall_dup_pkt_positive_check(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) { if(OP_STATE_CLOSE == pstream->pktstate){ if(pstream->ptcpdetail->clientpktnum + pstream->ptcpdetail->serverpktnum == 7){ @@ -714,6 +714,22 @@ extern "C" char tcpall_dup_pkt_check(struct streaminfo *pstream,void **pme, int return APP_STATE_GIVEME; } +extern "C" char tcpall_dup_pkt_negative_check(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) +{ + if(OP_STATE_CLOSE == pstream->pktstate){ + if(pstream->ptcpdetail->clientpktnum + pstream->ptcpdetail->serverpktnum == 9){ + printf("\033[32mtcp.dup_pkt test succ\033[0m\n"); + gtest_set_libsapp_devel_result(GTEST_SAPP_SUCC); + }else{ + printf("\033[1;31;40mtcp_dup_pkt_check error, expect 9 pkt, but actual is:%u\033[0m\n", + pstream->ptcpdetail->clientpktnum + pstream->ptcpdetail->serverpktnum); + gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); + return APP_STATE_DROPME; + } + } + + return APP_STATE_GIVEME; +} extern "C" char tcp_dropstream_and_unorder_entry(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) { diff --git a/module_test/src/gtest_sapp_udp.cpp b/module_test/src/gtest_sapp_udp.cpp index b4c7c56..5687c6c 100644 --- a/module_test/src/gtest_sapp_udp.cpp +++ b/module_test/src/gtest_sapp_udp.cpp @@ -69,11 +69,11 @@ void udp_link_c2s_10pkt_run(void) set_pcap_dumpfile("for_gtest_only/udp/udp_C2S_10.pcap"); - /* udp_C2S_10.pcap测试包需�?个驱动包, 把第一个了连接淘汰, 因为lrustream只淘汰当前stream_state的链�? + /* udp_C2S_10.pcap测试包需�?个驱动包, 把第一个了连接淘汰, 因为lrustream只淘汰当前stream_state的链�? 第一个包是UDP_ONE, 第二个包是UDP_TWO, - 第三个包是UDP_MORE, 在lrustream之后才更新状�? 但是还没来得及淘汰第一个连�? - 第四个包是UDP_MORE,且把第一个连接淘�? + 第三个包是UDP_MORE, 在lrustream之后才更新状�? 但是还没来得及淘汰第一个连�? + 第四个包是UDP_MORE,且把第一个连接淘�? */ ASSERT_EQ(file_md5_checksum("dumpfile", "ff140c986f5d412d6cd234f1b44024fa"),0); @@ -128,7 +128,7 @@ void udp_link_s2c_10pkt_run(void) } -void udp_dup_pkt_identify_run(void) +void udp_dup_pkt_positive_run(void) { set_default_config(); @@ -137,9 +137,9 @@ void udp_dup_pkt_identify_run(void) update_config_file("etc/sapp.toml", "bloom_error_rate", "0.00001"); update_config_file("etc/sapp.toml", "bloom_timeout", "10"); - update_plugin_inf("UDP", "udp_dup_pkt_check"); + update_plugin_inf("UDP", "udp_dup_pkt_positive_check"); - /* 此pcap包一共有9个包,前两个和后两个是人为制造的重复�? 插件应该只收�?个包才是对的 */ + /* 此pcap包一共有9个包,前两个和后两个是人为制造的重复包, 插件应该只收到 7 个包才是对的 */ set_pcap_dumpfile("for_gtest_only/duplicate_packet/udp_dup.pcap"); ASSERT_EQ(file_md5_checksum("dumpfile", "d3641c8f301e78006d7cdb199538e73b"),0); @@ -147,8 +147,29 @@ void udp_dup_pkt_identify_run(void) call_libsapp_devel_for_dumpfile_topspeed(); } +void udp_dup_pkt_negative_run(void) +{ + set_default_config(); + + update_config_file("etc/sapp.toml", "original_ipv4_udp_enabled", "0"); + update_config_file("etc/sapp.toml", "inject_all_enabled", "1"); + update_config_file("etc/sapp.toml", "bloom_capacity", "1000000"); + update_config_file("etc/sapp.toml", "bloom_error_rate", "0.00001"); + update_config_file("etc/sapp.toml", "bloom_timeout", "10"); + + update_plugin_inf("UDP", "udp_dup_pkt_negative_check"); + + /* 此pcap包一共有9个包,前两个和后两个是人为制造的重复包, 关闭重复包检查, 插件应该也收到 9 个包才是对的 */ + set_pcap_dumpfile("for_gtest_only/duplicate_packet/udp_dup.pcap"); + + ASSERT_EQ(file_md5_checksum("dumpfile", "d3641c8f301e78006d7cdb199538e73b"),0); + + call_libsapp_devel_for_dumpfile_topspeed(); +} + + /* -期待�?gtest_sapp_hybrid_stream.log 日志内容: +期待�?gtest_sapp_hybrid_stream.log 日志内容: stream:192.168.36.103.54275>224.0.0.252.5355,c2s_pkt:1,c2s_byte:21,s2c_pkt:0,s2c_byte:0 @@ -309,7 +330,7 @@ void hybrid_pure_udp_run(void) update_plugin_inf_with_options("./plug/business/gtest_sapp", "gtest", "gtest_sapp_slave_init", "hybrid_udp_destroy", "UDP", "hybrid_pure_udp_entry"); - /* hybrid混合包测试用例不开启重复流量检�?*/ + /* hybrid混合包测试用例不开启重复流量检�?*/ update_config_file("etc/sapp.toml", "inject_all_enabled", "0"); update_config_file("etc/sapp.toml", "original_ipv4_tcp_enabled", "0"); update_config_file("etc/sapp.toml", "original_ipv4_udp_enabled", "0"); @@ -327,7 +348,7 @@ void hybrid_pure_udp_run(void) /* l2tp_cheat_dup_dns.pcap这包, 外层l2tp的ipid, udp-check都是0, 但是内层ipid,udp-check, dns trans id确实是不一样的, - 所�? 不能被识别成是重复流�? + 所�? 不能被识别成是重复流�? */ void cheat_l2tp_dup_dns_run(void) { @@ -347,7 +368,7 @@ void cheat_l2tp_dup_dns_run(void) /* gtp_cheat_dup_dns.pcap这包, 外层gtp的ipid, udp-check都是0, 但是内层ipid,udp-check, dns trans id确实是不一样的, - 所�? 不能被识别成是重复流�? + 所�? 不能被识别成是重复流�? */ void cheat_gtp_dup_dns_run(void) { @@ -425,7 +446,7 @@ void udp_tuple4_reuse_test(void) update_plugin_inf("UDP", "udp_timeout_reset_entry"); - /* 这个pcap�?0秒后会超�? 被sapp分成两个流处�?*/ + /* 这个pcap�?0秒后会超�? 被sapp分成两个流处�?*/ set_pcap_dumpfile("for_gtest_only/udp/udp_timeout_reuse.pcap"); ASSERT_EQ(file_md5_checksum("dumpfile", "b7c83190ac89dd081a6235aafe9ed096"),0); diff --git a/module_test/src/gtest_sapp_udp_plug.cpp b/module_test/src/gtest_sapp_udp_plug.cpp index c9bcfd2..cc322e0 100644 --- a/module_test/src/gtest_sapp_udp_plug.cpp +++ b/module_test/src/gtest_sapp_udp_plug.cpp @@ -14,7 +14,7 @@ int gtest_udp_tot_stream_num = 0; static gtest_plug_stat_t gtest_udp_stat; /* - UDP流还原基本结果测�? + UDP流还原基本结果测�? 与第三方开源DPI对比: https://github.com/DanieleDeSensi/peafowl */ @@ -76,7 +76,7 @@ extern "C" char udp_link_c2s_1pkt_entry(struct streaminfo *pstream,void **pme, i &&(pstream->addr.tuple4_v4->daddr == server_ip)){ if((1 == pstream->pudpdetail->serverpktnum) &&(31 == pstream->pudpdetail->serverbytes)){ - ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? + ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? }else{ printf("\033[1;31;40mudp_link_c2s_1pkt_entry: check data error!\033[0m\n"); gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); @@ -99,7 +99,7 @@ extern "C" char udp_link_c2s_10pkt_entry(struct streaminfo *pstream,void **pme, &&(pstream->addr.tuple4_v4->daddr == server_ip)){ if((10 == pstream->pudpdetail->serverpktnum) &&(2510 == pstream->pudpdetail->serverbytes)){ - ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? + ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? }else{ printf("\033[1;31;40mudp_link_c2s_1pkt_entry: check data error!\033[0m\n"); gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); @@ -122,7 +122,7 @@ extern "C" char udp_link_s2c_1pkt_entry(struct streaminfo *pstream,void **pme, i &&(pstream->addr.tuple4_v4->daddr == server_ip)){ if((1 == pstream->pudpdetail->clientpktnum) &&(39 == pstream->pudpdetail->clientbytes)){ - ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? + ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? }else{ printf("\033[1;31;40mudp_link_c2s_1pkt_entry: check data error!\033[0m\n"); gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); @@ -145,7 +145,7 @@ extern "C" char udp_link_s2c_10pkt_entry(struct streaminfo *pstream,void **pme, &&(pstream->addr.tuple4_v4->daddr == server_ip)){ if((10 == pstream->pudpdetail->clientpktnum) &&(2694 == pstream->pudpdetail->clientbytes)){ - ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? + ;//go on, 在udp_link_check_result_tcp_entry()里检查其他计�? }else{ printf("\033[1;31;40mudp_link_c2s_1pkt_entry: check data error!\033[0m\n"); gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); @@ -189,7 +189,7 @@ static char *get_file_md5sum(const char *filename, char *md5sum, int buflen) extern sapp_global_t *sapp_global_val; /* - 排在udp_entry之后, 用于udp超时后比较udp的统计计�? + 排在udp_entry之后, 用于udp超时后比较udp的统计计�? */ extern "C" char udp_link_check_result_tcp_entry(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) { @@ -272,13 +272,13 @@ extern "C" char udp_link_check_result_tcp_entry(struct streaminfo *pstream,void } -extern "C" char udp_dup_pkt_check(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) +extern "C" char udp_dup_pkt_positive_check(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) { if(OP_STATE_CLOSE == pstream->opstate){ if(pstream->pudpdetail->clientpktnum + pstream->pudpdetail->serverpktnum == 7){ gtest_set_libsapp_devel_result(GTEST_SAPP_SUCC); }else{ - printf("\033[1;31;40mudp_dup_pkt_check error, expect 7 pkt, but actual is:%u\033[0m\n", + printf("\033[1;31;40mudp_dup_pkt_positive_check error, expect 7 pkt, but actual is:%u\033[0m\n", pstream->pudpdetail->clientpktnum + pstream->pudpdetail->serverpktnum); gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); return APP_STATE_DROPME; @@ -288,9 +288,23 @@ extern "C" char udp_dup_pkt_check(struct streaminfo *pstream,void **pme, int thr return APP_STATE_GIVEME; } +extern "C" char udp_dup_pkt_negative_check(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) +{ + if(OP_STATE_CLOSE == pstream->opstate){ + if(pstream->pudpdetail->clientpktnum + pstream->pudpdetail->serverpktnum == 9){ + gtest_set_libsapp_devel_result(GTEST_SAPP_SUCC); + }else{ + printf("\033[1;31;40mudp_dup_pkt_negative_check error, expect 9 pkt, but actual is:%u\033[0m\n", + pstream->pudpdetail->clientpktnum + pstream->pudpdetail->serverpktnum); + gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); + return APP_STATE_DROPME; + } + } + return APP_STATE_GIVEME; +} static FILE *hybrid_stream_log_fp; -/* 原始日志gtest_sapp_hybrid_tcp.log的二进制内容, 随着sapp的更新和修改, 以后新打印出来的日志应该与这个完全一�?! */ +/* 原始日志gtest_sapp_hybrid_tcp.log的二进制内容, 随着sapp的更新和修改, 以后新打印出来的日志应该与这个完全一�?! */ const static unsigned char hybrid_pure_udp_log_bin[] = { 0x73,0x74,0x72,0x65,0x61,0x6D,0x3A,0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x33, @@ -1201,7 +1215,7 @@ extern "C" char cheat_l2tp_dup_check_entry(struct streaminfo *pstream,void **pme } if(pstream->opstate == OP_STATE_CLOSE){ - if(this_plug_call_times != 4){ /* l2tp_cheat_dup_dns.pcap 实际�?个数据包, 并不是重复的 */ + if(this_plug_call_times != 4){ /* l2tp_cheat_dup_dns.pcap 实际�?个数据包, 并不是重复的 */ printf("\033[1;31;40m cheat_l2tp_dup_check_entry() check error, expect 4 pkt, but actual is:%d\033[0m\n", this_plug_call_times); gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); }else{ @@ -1230,7 +1244,7 @@ extern "C" char cheat_gtp_dup_check_entry(struct streaminfo *pstream,void **pme, } if(pstream->opstate == OP_STATE_CLOSE){ - if(this_plug_call_times != 5){ /* gtp_cheat_dup_dns.pcap 实际�?个数据包, 并不是重复的 */ + if(this_plug_call_times != 5){ /* gtp_cheat_dup_dns.pcap 实际�?个数据包, 并不是重复的 */ printf("\033[1;31;40m cheat_gtp_dup_check_entry() check error, expect 5 pkt, but actual is:%d\033[0m\n", this_plug_call_times); gtest_set_libsapp_devel_result(GTEST_SAPP_ERR); }else{ @@ -1243,9 +1257,9 @@ extern "C" char cheat_gtp_dup_check_entry(struct streaminfo *pstream,void **pme, } /* - 原始四元组是4013->8000, �?000实际上是服务�? - 按之前的"大端口是客户�?原则, 首包会被认为是S2C方向, 源IP�?23.166.151.98, - 设置了well_known_port.conf之后, 应该是C2S方向, 源IP�?92.168.36.103. + 原始四元组是4013->8000, �?000实际上是服务�? + 按之前的"大端口是客户�?原则, 首包会被认为是S2C方向, 源IP�?23.166.151.98, + 设置了well_known_port.conf之后, 应该是C2S方向, 源IP�?92.168.36.103. */ extern "C" char udp_well_known_port_v4_entry(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) { @@ -1285,9 +1299,9 @@ extern "C" char udp_well_known_port_v4_entry(struct streaminfo *pstream,void **p } /* - 原始四元组是45072->45678, �?5678实际上是服务�? - 按之前的"大端口是客户�?原则, 首包会被认为是S2C方向, 源IP�?001::192:168:40:161, - 设置了well_known_port.conf之后, 应该是C2S方向, 源IP�?001::192:168:40:162 + 原始四元组是45072->45678, �?5678实际上是服务�? + 按之前的"大端口是客户�?原则, 首包会被认为是S2C方向, 源IP�?001::192:168:40:161, + 设置了well_known_port.conf之后, 应该是C2S方向, 源IP�?001::192:168:40:162 */ extern "C" char udp_well_known_port_v6_entry(struct streaminfo *pstream,void **pme, int thread_seq, void *a_packet) { |
