diff options
| author | Qiuwen Lu <[email protected]> | 2019-07-23 12:20:37 +0600 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2019-07-23 12:20:37 +0600 |
| commit | 7325142bcd79fcfe30e262d4f55dab485bc2995e (patch) | |
| tree | d94de468cd8853cdfb27e174c1c5f16af8adb5cc | |
| parent | c3e1f674d289754e14bab9f72c71d22a09fd911f (diff) | |
增加表项超时的单元测试用例
| -rw-r--r-- | tunnat/include/tunnel.h | 46 | ||||
| -rw-r--r-- | tunnat/test/TestSession.cc | 39 |
2 files changed, 83 insertions, 2 deletions
diff --git a/tunnat/include/tunnel.h b/tunnat/include/tunnel.h index fcd7aba..80a9610 100644 --- a/tunnat/include/tunnel.h +++ b/tunnat/include/tunnel.h @@ -417,6 +417,8 @@ struct TunnelContainerArray unsigned int sz_total_len; tunnat_link_id_t v_link_id; + TunnelContainerArray() : sz_array(0), sz_total_len(0) {} + TunnelContainer & GetInnerTunContainer() { return tun_array[sz_array == 0 ? 0 : sz_array - 1]; @@ -427,9 +429,49 @@ struct TunnelContainerArray return tun_array[0]; } - TunnelContainerArray() : sz_array(0), sz_total_len(0) {} + void ConstructFromMbuf(marsio_buff_t * mbuf) + { + assert(sz_total_len == 0); + assert(sz_array == 0); + + for (auto & tun_container : tun_array) + { + tun_container.MbufMetaPreParse(mbuf); + } + + const char * pkt_ptr = marsio_buff_mtod(mbuf); + unsigned int pkt_len = marsio_buff_datalen(mbuf); + + ConstructFromPktPtr(pkt_ptr, pkt_len); + } + + void ConstructFromPktPtr(const char * pkt_ptr, unsigned int pkt_len) + { + assert(sz_total_len == 0); + assert(sz_array == 0); + + tunnel_type pkt_tun_type = TUNNEL_TYPE_UNKNOWN; + for (auto & tun_container : tun_array) + { + int ret = tun_container.PacketParse(pkt_ptr, pkt_len, pkt_tun_type); + if (ret < 0) break; + + pkt_ptr += tun_container.ThisTunLength(); + pkt_len -= tun_container.ThisTunLength(); + pkt_tun_type = tun_container.NextTunType(); + + sz_array++; + sz_total_len += tun_container.ThisTunLength(); + + if (pkt_tun_type == TUNNEL_TYPE_END) break; + } + } + + void Reset() + { + sz_array = 0, sz_total_len = 0; + } - void Reset() { sz_array = 0, sz_total_len = 0; } void ReverseAddress() { for (unsigned i = 0; i < sz_array; i++) tun_array[i].ReverseAddress(); diff --git a/tunnat/test/TestSession.cc b/tunnat/test/TestSession.cc index a2ca3be..0ab36c8 100644 --- a/tunnat/test/TestSession.cc +++ b/tunnat/test/TestSession.cc @@ -67,6 +67,45 @@ SessionKey SessionKeyGenerateTuple2(enum SessionKeyType type) assert(0); } +TEST(TunnatSession, TunnatSessionRandomWithTimeout) +{ + const int nr_session = 8192; + const int nr_slots = 4096; + const int expire_time = 10; + const int rd_keys = 2048; + + SessionTable * ss_table = new SessionTable; + ASSERT_EQ(ss_table->Init(nr_session, nr_slots, expire_time), 0); + + std::vector<SessionKey> vec_test_keys; + SessionEntry __test_entry; + + for (int i = 0; i < rd_keys; i++) + { + SessionKey ss_key = SessionKeyGenerateTuple2(SESSION_KEY_TYPE_IPV4); + ss_table->Add(ss_key, __test_entry); + vec_test_keys.push_back(ss_key); + } + + for(int i = 0; i < rd_keys; i++) + { + SessionKey ss_key = SessionKeyGenerateTuple2(SESSION_KEY_TYPE_IPV6); + ss_table->Add(ss_key, __test_entry); + vec_test_keys.push_back(ss_key); + } + + sleep(30); + + for (auto & _key : vec_test_keys) + { + SessionEntry * __test_entry = NULL; + __test_entry = ss_table->Query(_key); + EXPECT_TRUE(__test_entry == nullptr); + } + + delete ss_table; +} + TEST(TunnatSession, TunnatSessionRandomAddQuery) { const int nr_session = 8192; |
