diff --git a/src/session/session.cpp b/src/session/session.cpp index fc66315..673b64d 100644 --- a/src/session/session.cpp +++ b/src/session/session.cpp @@ -549,7 +549,7 @@ const char *dup_traffic_flag_tostring(enum dup_traffic_flag flag) void session_dump(struct session *sess) { - char buffer[128] = {0}; + char buffer[1024] = {0}; tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); printf("session id : %" PRIu64 "\n", session_get_id(sess)); diff --git a/src/session/test/CMakeLists.txt b/src/session/test/CMakeLists.txt index 7b307ab..103efff 100644 --- a/src/session/test/CMakeLists.txt +++ b/src/session/test/CMakeLists.txt @@ -29,6 +29,9 @@ target_link_libraries(gtest_tcp_active_to_closing session_manager gtest) add_executable(gtest_tcp_opening_to_closing gtest_tcp_opening_to_closing.cpp) target_link_libraries(gtest_tcp_opening_to_closing session_manager gtest) +add_executable(gtest_tcp_init_to_opening_to_active_to_closing_to_closed gtest_tcp_init_to_opening_to_active_to_closing_to_closed.cpp) +target_link_libraries(gtest_tcp_init_to_opening_to_active_to_closing_to_closed session_manager gtest) + include(GoogleTest) gtest_discover_tests(gtest_session) gtest_discover_tests(gtest_session_pool) @@ -38,4 +41,5 @@ gtest_discover_tests(gtest_session_queue) gtest_discover_tests(gtest_tcp_init_to_opening) gtest_discover_tests(gtest_tcp_opening_to_active) gtest_discover_tests(gtest_tcp_active_to_closing) -gtest_discover_tests(gtest_tcp_opening_to_closing) \ No newline at end of file +gtest_discover_tests(gtest_tcp_opening_to_closing) +gtest_discover_tests(gtest_tcp_init_to_opening_to_active_to_closing_to_closed) \ No newline at end of file diff --git a/src/session/test/gtest_session_manager.cpp b/src/session/test/gtest_session_manager.cpp deleted file mode 100644 index 5177474..0000000 --- a/src/session/test/gtest_session_manager.cpp +++ /dev/null @@ -1,1644 +0,0 @@ -#include - -#include "session_private.h" -#include "session_manager.h" -#include "timestamp.h" -#include "test_packets.h" - -struct session_manager_config config = { - // max session number - .max_tcp_session_num = 10, - .max_udp_session_num = 10, - - // tcp timeout - .tcp_timeout_init = 10, - .tcp_timeout_handshake = 10, - .tcp_timeout_data = 10, - .tcp_timeout_half_closed = 10, - .tcp_timeout_discard = 10, - - // udp timeout - .udp_timeout_data = 10, - - // tcp duplicate packet filter - .tcp_dupkt_filter_enable = 1, - .tcp_dupkt_filter_capacity = 1000, - .tcp_dupkt_filter_timeout = 10, - .tcp_dupkt_filter_error_rate = 0.0001, - - // udp eviction filter - .udp_eviction_filter_enable = 1, - .udp_eviction_filter_capacity = 1000, - .udp_eviction_filter_timeout = 10, - .udp_eviction_filter_error_rate = 0.0001, -}; - -/****************************************************************************** - * plugin - ******************************************************************************/ - -uint8_t plugin_ex = 0; -const char *plugin_ctx = "hello world"; - -static void plugin_session_ex_free(struct session *sess, uint8_t idx, void *ex_ptr, void *arg) -{ - EXPECT_STREQ((char *)ex_ptr, "123"); - free(ex_ptr); -} - -static void plugin_init(void) -{ - plugin_ex = session_get_ex_new_index("plugin_ex", plugin_session_ex_free, NULL); -} - -static void __session_dispatch(struct session *sess) -{ - if (sess == NULL) - { - return; - } - - printf("\n"); - printf("=> session dispatch: %p\n", sess); - session_dump(sess); - char *ptr = (char *)session_get0_ex_data(sess, plugin_ex); - if (ptr == NULL) - { - session_set_ex_data(sess, plugin_ex, strdup("123")); - } - else - { - EXPECT_STREQ(ptr, "123"); - } - printf("<= session dispatch\n"); - printf("\n"); - - session_set0_cur_pkt(sess, NULL); - session_set_cur_dir(sess, SESSION_DIR_NONE); -} - -/****************************************************************************** - * test case: INIT -> ACTIVE - ******************************************************************************/ - -#if 1 -/* - * packet: udp c2s packet - * - * note: the udp c2s packet can trigger a change in session status from INIT to ACTIVE - * trigger OPENING and ACTIVE event - */ -TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_C2S) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - packet_parse(&pkt, (const char *)udp_pkt1_dns_req, sizeof(udp_pkt1_dns_req)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:61099 -> 121.14.154.93:53, proto: 17, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_UDP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 74); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 0); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_udp_state(sess) == UDP_C2S_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); - - __session_dispatch(sess); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -#if 1 -/* - * packet: udp s2c packet - * - * note: the udp s2c packet can trigger a change in session status from INIT to ACTIVE - * trigger OPENING and ACTIVE event - */ -TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_S2C) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - packet_parse(&pkt, (const char *)udp_pkt2_dns_resp, sizeof(udp_pkt2_dns_resp)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "121.14.154.93:53 -> 192.168.38.105:61099, proto: 17, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_UDP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 0); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 550); - EXPECT_TRUE(session_get_c2s_packets(sess) == 0); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_udp_state(sess) == UDP_S2C_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); - - __session_dispatch(sess); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -/****************************************************************************** - * test case: OPENING -> ACTIVE - ******************************************************************************/ - -#if 1 -/* - * packet: tcp syn packet && tcp c2s payload packet - * - * - * note: the syn packet can trigger a change in session status from INIT to OPENING - * only trigger OPENING event - * note: the tcp c2s packet can trigger a change in session status from OPENING to ACTIVE - * trigger OPENING and ACTIVE event - */ -TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - /************************************************************************** - * syn packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 0); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == TCP_SYN_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYN Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * c2s payload packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); - sess = session_manager_update_session(mgr, &pkt); - - session_manager_print_status(mgr); - - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 145); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 0); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_C2S_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S Payload Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * timeout - **************************************************************************/ - - printf("\n===> Atfer timeout <=== \n\n"); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -#if 1 -/* - * packet: tcp syn packet && tcp s2c payload packet - * - * - * note: the syn packet can trigger a change in session status from INIT to OPENING - * only trigger OPENING event - * note: the tcp s2c packet can trigger a change in session status from OPENING to ACTIVE - * trigger OPENING and ACTIVE event - */ -TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - /************************************************************************** - * syn packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 0); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == TCP_SYN_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYN Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * s2c payload packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 1354); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_S2C_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S Payload Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * timeout - **************************************************************************/ - - printf("\n===> Atfer timeout <=== \n\n"); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -#if 1 -/* - * packet: tcp synack packet && tcp c2s payload packet - * - * note: the synack packet can trigger a change in session status from INIT to OPENING - * only trigger OPENING event - * note: the tcp c2s packet can trigger a change in session status from OPENING to ACTIVE - * trigger OPENING and ACTIVE event - */ -TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - /************************************************************************** - * synack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "93.184.216.34:80 -> 192.168.38.105:60111, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 0); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 0); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == TCP_SYNACK_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYNACK Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * c2s payload packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "93.184.216.34:80 -> 192.168.38.105:60111, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 145); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S Payload Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * timeout - **************************************************************************/ - - printf("\n===> Atfer timeout <=== \n\n"); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -#if 1 -/* - * packet: tcp synack packet && tcp s2c payload packet - * - * note: the synack packet can trigger a change in session status from INIT to OPENING - * only trigger OPENING event - * note: the tcp s2c packet can trigger a change in session status from OPENING to ACTIVE - * trigger OPENING and ACTIVE event - */ -TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - /************************************************************************** - * synack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "93.184.216.34:80 -> 192.168.38.105:60111, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 0); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 0); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == TCP_SYNACK_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYNACK Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * s2c payload packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "93.184.216.34:80 -> 192.168.38.105:60111, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 0); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 1354); - EXPECT_TRUE(session_get_c2s_packets(sess) == 0); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYNACK_RECVED | TCP_S2C_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer S2C Payload Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * timeout - **************************************************************************/ - - printf("\n===> Atfer timeout <=== \n\n"); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -#if 1 -/* - * packet: tcp syn packet && tcp synack packet && tcp ack packet && tcp c2s payload packet - * - * note: the syn packet can trigger a change in session status from INIT to OPENING - * only trigger OPENING event - * note: the synack packet still keep session status OPENING - * will not trigger OPENING event - * note: the ack packet still keep session status OPENING - * will not trigger OPENING event - * note: the tcp c2s packet can trigger a change in session status from OPENING to ACTIVE - * trigger ACTIVE event - */ -// SYN && SYNACK && ACK && C2S PAYLOAY -TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOAD) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - /************************************************************************** - * syn packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 0); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == TCP_SYN_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYN Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * synack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYNACK Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * ack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt3_c2s_ack, sizeof(tcp_pkt3_c2s_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer ACK Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * c2s payload packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S TCP Payload Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * timeout - **************************************************************************/ - - printf("\n===> Atfer timeout <=== \n\n"); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -/****************************************************************************** - * test case: ACTIVE -> CLOSING - ******************************************************************************/ - -#if 1 -TEST(SESSION_MANAGER, ACTIVE_TO_CLOSING_BY_2_TCP_FINS) -{ - // have test on TCP_FULL_STREAM -} -#endif - -TEST(SESSION_MANAGER, ACTIVE_TO_CLOSING_BY_TCP_C2S_RST) -{ - // TODO -} - -TEST(SESSION_MANAGER, ACTIVE_TO_CLOSING_BY_TCP_S2C_RST) -{ - // TODO -} - -#if 1 -TEST(SESSION_MANAGER, ACTIVE_TO_CLOSING_BY_TCP_TIMEOUT) -{ - // have test on above(when timeout) -} -#endif - -#if 1 -TEST(SESSION_MANAGER, ACTIVE_TO_CLOSING_BY_UDP_TIMEOUT) -{ - // have test on INIT_TO_ACTIVE_BY_UDP_C2S or INIT_TO_ACTIVE_BY_UDP_S2C -} -#endif - -/****************************************************************************** - * test case: OPENING -> CLOSING - ******************************************************************************/ - -#if 1 -TEST(SESSION_MANAGER, OPENING_TO_CLOSING_BY_TCP_TIMEOUT) -{ - // have test on INIT_TO_OPENING_BY_SYN or INIT_TO_OPENING_BY_SYNACK -} -#endif - -/****************************************************************************** - * test case: CLOSING -> CLOSED - ******************************************************************************/ - -#if 1 -TEST(SESSION_MANAGER, CLOSING_TO_CLOSED_BY_TCP_TIMEOUT) -{ - // have test on above(when timeout) -} -#endif - -#if 1 -TEST(SESSION_MANAGER, CLOSING_TO_CLOSED_BY_UDP_TIMEOUT) -{ - // have test on above(when timeout) -} -#endif - -/****************************************************************************** - * test case: other - ******************************************************************************/ - -TEST(SESSION_MANAGER, TABLE_FULL_DISCARD) -{ - // TODO -} - -#if 1 -/* - * packet: tcp syn packet - * tcp synack packet - * tcp ack packet - * tcp c2s http req packet - * tcp s2c ack packet - * tcp s2c http resq packet1 - * tcp s2c http resq packet2 - * tcp c2s ack packet - * tcp c2s fin packet - * tcp s2c fin packet - * tcp c2s ack packet - * - * note: the syn packet can trigger a change in session status from INIT to OPENING - * trigger OPENING event - * note: the synack packet still keep session status OPENING - * will not trigger event - * note: the ack packet still keep session status OPENING - * will not trigger event - * note: the tcp c2s http req packet can trigger a change in session status from OPENING to ACTIVE - * trigger ACTIVE event - * note: the tcp s2c ack packet still keep session status ACTIVE - * trigger ACTIVE event - * note: the tcp s2c http resq packet1 still keep session status ACTIVE - * trigger ACTIVE event - * note: the tcp s2c http resq packet2 still keep session status ACTIVE - * trigger ACTIVE event - * note: the tcp c2s ack packet still keep session status ACTIVE - * trigger ACTIVE event - * note: the tcp c2s fin packet still keep session status ACTIVE - * trigger ACTIVE event - * note: the tcp s2c fin packet can trigger a change in session status from ACTIVE to CLOSING - * trigger CLOSING event - * note: the tcp c2s ack packet still keep session status CLOSING - * will not trigger event - */ -TEST(SESSION_MANAGER, TCP_FULL_STREAM) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - /************************************************************************** - * syn packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 0); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == TCP_SYN_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYN Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * synack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer SYNACK Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * ack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt3_c2s_ack, sizeof(tcp_pkt3_c2s_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer ACK Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * c2s http req packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S HTTP Req Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * s2c ack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt5_s2c_ack, sizeof(tcp_pkt5_s2c_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer S2C Ack Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * s2c http resp packet1 - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer S2C HTTP Resp Packet1 <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * s2c http resp packet2 - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt7_s2c_http_resp_2, sizeof(tcp_pkt7_s2c_http_resp_2)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer S2C HTTP Resp Packet2 <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * c2s ack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt8_c2s_ack, sizeof(tcp_pkt8_c2s_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S Ack Packet2 <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * c2s fin packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt9_c2s_fin, sizeof(tcp_pkt9_c2s_fin)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66 + 66); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED | TCP_C2S_FIN_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S FIN Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * s2c fin packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt10_s2c_fin, sizeof(tcp_pkt10_s2c_fin)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_CLOSING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66 + 66); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385 + 66); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S FIN Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * c2s ack packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)tcp_pkt11_c2s_ack, sizeof(tcp_pkt11_c2s_ack)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_CLOSING); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66 + 66); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385 + 66); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == NULL); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_NONE); - EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 1); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - printf("\n===> Atfer C2S ACK Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * timeout - **************************************************************************/ - - printf("\n===> Atfer timeout <=== \n\n"); - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -#if 1 -/* - * packet: udp c2s packet & udp s2c packet - * - * note: the udp c2s packet can trigger a change in session status from INIT to ACTIVE - * trigger OPENING and ACTIVE event - * note: the udp s2c packet keep the session status in ACTIVE - * trigger ACTIVE event - */ -TEST(SESSION_MANAGER, UDP_FULL_STREAM) -{ - char buffer[1024]; - - struct packet pkt; - struct session *sess = NULL; - struct session_manager *mgr = NULL; - - timestamp_update(); - plugin_init(); - - mgr = session_manager_create(&config); - EXPECT_TRUE(mgr != NULL); - - /************************************************************************** - * UDP c2s packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)udp_pkt1_dns_req, sizeof(udp_pkt1_dns_req)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:61099 -> 121.14.154.93:53, proto: 17, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_UDP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 74); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 0); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_udp_state(sess) == UDP_C2S_RECVED); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); - - printf("\n===> Atfer UDP c2s Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * UDP s2c packet - **************************************************************************/ - - packet_parse(&pkt, (const char *)udp_pkt2_dns_resp, sizeof(udp_pkt2_dns_resp)); - sess = session_manager_update_session(mgr, &pkt); - EXPECT_TRUE(sess); - - // check session info - EXPECT_TRUE(session_get_id(sess) == 0); - memset(buffer, 0, sizeof(buffer)); - tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); - EXPECT_STREQ(buffer, "192.168.38.105:61099 -> 121.14.154.93:53, proto: 17, domain: 0"); - EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); - EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); - EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_UDP); - EXPECT_TRUE(session_get_c2s_bytes(sess) == 74); - EXPECT_TRUE(session_get_s2c_bytes(sess) == 550); - EXPECT_TRUE(session_get_c2s_packets(sess) == 1); - EXPECT_TRUE(session_get_s2c_packets(sess) == 1); - EXPECT_TRUE(session_get_create_time(sess) != 0); - EXPECT_TRUE(session_get_last_time(sess) != 0); - EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess)); - EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); - EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); - EXPECT_TRUE(session_get_udp_state(sess) == (UDP_C2S_RECVED | UDP_S2C_RECVED)); - - // check session manager info - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); - - printf("\n===> Atfer UDP c2s Packet <=== \n\n"); - __session_dispatch(sess); - - /************************************************************************** - * timeout - **************************************************************************/ - - for (int i = 0; i < 4; i++) - { - timestamp_update(); - __session_dispatch(session_manager_get_expired_session(mgr)); - __session_dispatch(session_manager_get_evicted_session(mgr)); - sleep(1); - } - - // check sess mgr - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); - EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); - - // destory - session_manager_destroy(mgr); -} -#endif - -// opening -> closing : self protect -// opening -> closed - -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/session/test/gtest_tcp_active_to_closing.cpp b/src/session/test/gtest_tcp_active_to_closing.cpp index 907a0fb..ecb4e24 100644 --- a/src/session/test/gtest_tcp_active_to_closing.cpp +++ b/src/session/test/gtest_tcp_active_to_closing.cpp @@ -1,13 +1,13 @@ // TCP state machine test: active -> closing -#include "test_state_machine.h" +#include "test_utils.h" static void build_active_tcp_session(struct session_manager *mgr, struct session *sess) { char buffer[1024] = {0}; struct packet pkt; - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); @@ -94,7 +94,7 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_FIN_FIN) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet & C2S DATA Packet + // C2S SYN Packet & C2S DATA Packet build_active_tcp_session(mgr, sess); // C2S FIN Packet @@ -185,7 +185,7 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_C2S_RST) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet & C2S DATA Packet + // C2S SYN Packet & C2S DATA Packet build_active_tcp_session(mgr, sess); // C2S RST Packet @@ -249,7 +249,7 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_S2C_RST) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet & C2S DATA Packet + // C2S SYN Packet & C2S DATA Packet build_active_tcp_session(mgr, sess); // S2C RST Packet @@ -311,7 +311,7 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_DATA_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet & C2S DATA Packet + // C2S SYN Packet & C2S DATA Packet build_active_tcp_session(mgr, sess); __session_manager_count(mgr, 0, 1, 0, 0, 0, 0); @@ -339,7 +339,7 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_C2S_HALF_CLOSED_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet & C2S DATA Packet + // C2S SYN Packet & C2S DATA Packet build_active_tcp_session(mgr, sess); // C2S FIN Packet @@ -396,7 +396,7 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_S2C_HALF_CLOSED_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet & C2S DATA Packet + // C2S SYN Packet & C2S DATA Packet build_active_tcp_session(mgr, sess); // S2C FIN Packet diff --git a/src/session/test/gtest_tcp_init_to_opening.cpp b/src/session/test/gtest_tcp_init_to_opening.cpp index a88f10a..c2f8de5 100644 --- a/src/session/test/gtest_tcp_init_to_opening.cpp +++ b/src/session/test/gtest_tcp_init_to_opening.cpp @@ -1,6 +1,6 @@ // TCP state machine test: init -> opening -#include "test_state_machine.h" +#include "test_utils.h" /****************************************************************************** * case: TCP init -> opening (by SYN) @@ -19,7 +19,7 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); @@ -129,7 +129,7 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN_SYNACK) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); @@ -219,7 +219,7 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN_SYNACK_ACK) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); @@ -345,7 +345,7 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN_RETRANSMISSION) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); @@ -380,7 +380,7 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN_RETRANSMISSION) sleep(1); timestamp_update(); - // SYN Packet retransmission + // C2S SYN Packet retransmission printf("=> packet parse: TCP C2S SYN retransmission packet\n"); char tcp_pkt_c2s_syn_retransmission[1500] = {0}; memcpy(tcp_pkt_c2s_syn_retransmission, tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); @@ -539,7 +539,7 @@ TEST(TCP_INIT_TO_OPENING, BY_C2S_ASMMETRIC) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); diff --git a/src/session/test/gtest_tcp_init_to_opening_to_active_to_closing_to_closed.cpp b/src/session/test/gtest_tcp_init_to_opening_to_active_to_closing_to_closed.cpp new file mode 100644 index 0000000..3590625 --- /dev/null +++ b/src/session/test/gtest_tcp_init_to_opening_to_active_to_closing_to_closed.cpp @@ -0,0 +1,411 @@ +// TCP state machine test: init -> opening -> active -> closing -> closed + +#include "test_utils.h" + +#if 1 +TEST(TCP_INIT_TO_OPENING_TO_ACTIVE_TO_CLOSING_TO_CLOSED, TEST) +{ + char buffer[1024]; + struct packet pkt; + struct session *sess = NULL; + struct session_manager *mgr = NULL; + + timestamp_update(); + + mgr = session_manager_create(&config); + EXPECT_TRUE(mgr != NULL); + + // C2S SYN Packet + printf("=> packet parse: TCP C2S SYN packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 0); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 0); + EXPECT_TRUE(session_get_create_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_tcp_state(sess) == TCP_SYN_RECVED); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) == NULL); + EXPECT_TRUE(session_get0_1st_pkt(sess) == session_get0_c2s_1st_pkt(sess)); + + __session_dispatch(sess); + + __session_manager_count(mgr, 1, 0, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // S2C SYNACK Packet + printf("=> packet parse: TCP S2C SYNACK packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 1, 0, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // C2S ACK Packet + printf("=> packet parse: TCP C2S ACK packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt3_c2s_ack, sizeof(tcp_pkt3_c2s_ack)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_OPENING); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 1, 0, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // C2S REQ Packet + printf("=> packet parse: TCP C2S REQ packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_C2S_DATA_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 1, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // S2C ACK Packet + printf("=> packet parse: TCP S2C ACK packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt5_s2c_ack, sizeof(tcp_pkt5_s2c_ack)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_S2C_ACK_RECVED | TCP_C2S_DATA_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 1, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // S2C HTTP Resp Packet1 + printf("=> packet parse: TCP S2C Resp packet1\n"); + packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_S2C_ACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 1, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // S2C HTTP Resp Packet2 + printf("=> packet parse: TCP S2C Resp packet2\n"); + packet_parse(&pkt, (const char *)tcp_pkt7_s2c_http_resp_2, sizeof(tcp_pkt7_s2c_http_resp_2)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_S2C_ACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 1, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // C2S ACK Packet + printf("=> packet parse: TCP C2S ACK packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt8_c2s_ack, sizeof(tcp_pkt8_c2s_ack)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == 0); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_S2C_ACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 1, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // C2S FIN Packet + printf("=> packet parse: TCP C2S FIN packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt9_c2s_fin, sizeof(tcp_pkt9_c2s_fin)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_ACTIVE); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == CLOSING_BY_CLIENT_FIN); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66 + 66); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_S2C_ACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED | TCP_C2S_FIN_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 1, 0, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // S2C FIN Packet + printf("=> packet parse: TCP S2C FIN packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt10_s2c_fin, sizeof(tcp_pkt10_s2c_fin)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_CLOSING); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == CLOSING_BY_CLIENT_FIN); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66 + 66); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385 + 66); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_S2C_ACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 0, 1, 0, 0, 0); + + sleep(1); + timestamp_update(); + + // C2S ACK Packet + printf("=> packet parse: TCP C2S ACK packet\n"); + packet_parse(&pkt, (const char *)tcp_pkt11_c2s_ack, sizeof(tcp_pkt11_c2s_ack)); + printf("<= packet parse\n\n"); + sess = session_manager_update_session(mgr, &pkt); + EXPECT_TRUE(sess); + + EXPECT_TRUE(session_get_id(sess) == 0); + memset(buffer, 0, sizeof(buffer)); + tuple6_tostring(session_get0_key(sess), buffer, sizeof(buffer)); + EXPECT_STREQ(buffer, "192.168.38.105:60111 -> 93.184.216.34:80, proto: 6, domain: 0"); + EXPECT_TRUE(session_get_key_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_state(sess) == SESSION_STATE_CLOSING); + EXPECT_TRUE(session_get_type(sess) == SESSION_TYPE_TCP); + EXPECT_TRUE(session_get_dup_traffic_flag(sess) == 0); + EXPECT_TRUE(session_get_closing_reasion(sess) == CLOSING_BY_CLIENT_FIN); + EXPECT_TRUE(session_get_c2s_bytes(sess) == 78 + 66 + 145 + 66 + 66 + 66); + EXPECT_TRUE(session_get_s2c_bytes(sess) == 74 + 66 + 1354 + 385 + 66); + EXPECT_TRUE(session_get_c2s_packets(sess) == 1 + 1 + 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1); + EXPECT_TRUE(session_get_create_time(sess) < timestamp_get_msec()); + EXPECT_TRUE(session_get_last_time(sess) == timestamp_get_msec()); + EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); + EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); + EXPECT_TRUE(session_get_tcp_state(sess) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_ACK_RECVED | TCP_S2C_ACK_RECVED | TCP_C2S_DATA_RECVED | TCP_S2C_DATA_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED)); + EXPECT_TRUE(session_get0_c2s_1st_pkt(sess) != NULL); + EXPECT_TRUE(session_get0_s2c_1st_pkt(sess) != NULL); + + __session_dispatch(sess); + + __session_manager_count(mgr, 0, 0, 1, 0, 0, 0); + __session_manager_dispatch(mgr, CLOSING_BY_CLIENT_FIN); + __session_manager_count(mgr, 0, 0, 0, 0, 0, 0); + + session_manager_destroy(mgr); +} +#endif + +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/src/session/test/gtest_tcp_opening_to_active.cpp b/src/session/test/gtest_tcp_opening_to_active.cpp index c2e6643..f0a1672 100644 --- a/src/session/test/gtest_tcp_opening_to_active.cpp +++ b/src/session/test/gtest_tcp_opening_to_active.cpp @@ -1,6 +1,6 @@ // TCP state machine test: opening -> active -#include "test_state_machine.h" +#include "test_utils.h" /****************************************************************************** * case: TCP opening -> active (by C2S DATA) @@ -19,7 +19,7 @@ TEST(TCP_OPENING_TO_ACTIVE, BY_SYN_C2S_DATA) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); diff --git a/src/session/test/gtest_tcp_opening_to_closing.cpp b/src/session/test/gtest_tcp_opening_to_closing.cpp index 70fe7aa..f7e4182 100644 --- a/src/session/test/gtest_tcp_opening_to_closing.cpp +++ b/src/session/test/gtest_tcp_opening_to_closing.cpp @@ -1,13 +1,13 @@ // TCP state machine test: opening -> closing -#include "test_state_machine.h" +#include "test_utils.h" static void build_opening_tcp_session(struct session_manager *mgr, struct session *sess) { char buffer[1024] = {0}; struct packet pkt; - // SYN Packet + // C2S SYN Packet printf("=> packet parse: TCP C2S SYN packet\n"); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); printf("<= packet parse\n\n"); @@ -60,7 +60,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_FIN_FIN) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); // C2S FIN Packet @@ -151,7 +151,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_RST) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); // C2S RST Packet @@ -215,7 +215,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_RST) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); // S2C RST Packet @@ -277,7 +277,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_INIT_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); __session_manager_dispatch(mgr, CLOSING_BY_TIMEOUT); @@ -304,7 +304,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_HANDSHAKE_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); // S2C SYNACK Packet @@ -362,7 +362,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_DATA_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); // S2C SYNACK Packet @@ -454,7 +454,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_HALF_CLOSED_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); // C2S FIN Packet @@ -511,7 +511,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_HALF_CLOSED_TIMEOUT) mgr = session_manager_create(&config); EXPECT_TRUE(mgr != NULL); - // SYN Packet + // C2S SYN Packet build_opening_tcp_session(mgr, sess); // S2C FIN Packet diff --git a/src/session/test/test_state_machine.h b/src/session/test/test_utils.h similarity index 100% rename from src/session/test/test_state_machine.h rename to src/session/test/test_utils.h