summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2019-07-23 12:20:37 +0600
committerQiuwen Lu <[email protected]>2019-07-23 12:20:37 +0600
commit7325142bcd79fcfe30e262d4f55dab485bc2995e (patch)
treed94de468cd8853cdfb27e174c1c5f16af8adb5cc
parentc3e1f674d289754e14bab9f72c71d22a09fd911f (diff)
增加表项超时的单元测试用例
-rw-r--r--tunnat/include/tunnel.h46
-rw-r--r--tunnat/test/TestSession.cc39
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;