#ifndef _TEST_STATE_MACHINE_H #define _TEST_STATE_MACHINE_H #ifdef __cpluscplus extern "C" { #endif #include #include "session_private.h" #include "timestamp.h" #include "session_manager.h" #include "ipv4_helpers.h" #include "tcp_helpers.h" #include "test_packets.h" struct session_manager_config config = { // max session number .max_tcp_session_num = 3, .max_udp_session_num = 3, // tcp timeout .tcp_timeout_init = 2, .tcp_timeout_handshake = 2, .tcp_timeout_data = 2, .tcp_timeout_half_closed = 2, .tcp_timeout_time_wait = 2, .tcp_timeout_discard = 2, // udp timeout .udp_timeout_data = 1, // 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, }; static void __session_dispatch(struct session *sess) { if (sess == NULL) { return; } printf("\n"); printf("=> session dispatch: %p\n", sess); session_dump(sess); printf("<= session dispatch\n"); printf("\n"); session_set0_cur_pkt(sess, NULL); session_set_cur_dir(sess, SESSION_DIR_NONE); } static void __session_manager_dispatch(struct session_manager *mgr, enum closing_reasion reason) { struct session *sess; for (int i = 0; i < 3; i++) { timestamp_update(); sess = session_manager_get_expired_session(mgr); __session_dispatch(sess); if (sess && session_get_state(sess) == SESSION_STATE_CLOSING) { EXPECT_TRUE(session_get_closing_reasion(sess) == reason); } sess = session_manager_get_evicted_session(mgr); __session_dispatch(sess); if (sess && session_get_state(sess) == SESSION_STATE_CLOSING) { EXPECT_TRUE(session_get_closing_reasion(sess) == reason); } sleep(1); } } static void __session_manager_count(struct session_manager *mgr, uint64_t tcp_opening_num, uint64_t tcp_active_num, uint64_t tcp_closing_num, uint64_t udp_opening_num, uint64_t udp_active_num, uint64_t udp_closing_num) { EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == tcp_opening_num); EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == tcp_active_num); EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == tcp_closing_num); EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == udp_opening_num); EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == udp_active_num); EXPECT_TRUE(session_manager_get_session_number(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == udp_closing_num); } #ifdef __cpluscplus } #endif #endif