1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
#include <session.h>
#include <gtest/gtest.h>
unsigned int g_logger_to_stdout = 1;
unsigned int g_logger_level = LOG_DEBUG;
unsigned int g_keep_running = 1;
uint8_t g_ctrlzone_id = 0;
__thread TunnatThreadStat * TunnatThreadStat::thread_stat_object_;
struct TunnatInstance g_test_tunnat_instance;
struct TunnatInstance * TunnatInstance::TunnatInstanceGet()
{
g_test_tunnat_instance.sess_tb_log_change = 1;
return &g_test_tunnat_instance;
}
class TestSessionEnv : public testing::Environment
{
public:
TunnatThreadStat * th_stat_object;
virtual void SetUp()
{
th_stat_object = new TunnatThreadStat;
TunnatThreadStat::ThreadStatObjectSet(th_stat_object);
}
virtual void TearDown()
{
delete th_stat_object;
}
};
SessionKey SessionKeyGenerateTuple2(enum SessionKeyType type)
{
switch(type)
{
case SESSION_KEY_TYPE_IPV4:
{
struct in_addr s_addr{(unsigned int)rand()};
struct in_addr d_addr{(unsigned int)rand()};
in_port_t s_port{(unsigned short)rand()};
in_port_t d_port{(unsigned short)rand()};
return SessionKey(s_addr, d_addr, s_port, d_port);
}
case SESSION_KEY_TYPE_IPV6:
{
struct in6_addr s_addr;
struct in6_addr d_addr;
for(unsigned int i = 0; i < 16; i++)
{
s_addr.s6_addr[i] = (uint8_t)rand();
d_addr.s6_addr[i] = (uint8_t)rand();
}
in_port_t s_port{(unsigned short)rand()};
in_port_t d_port{(unsigned short)rand()};
return SessionKey(s_addr, d_addr, s_port, d_port);
}
}
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;
const int nr_slots = 4096;
const int expire_time = 0;
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);
}
for (auto & _key : vec_test_keys)
{
SessionEntry * __test_entry = NULL;
__test_entry = ss_table->Query(_key);
EXPECT_TRUE(__test_entry != NULL);
}
delete ss_table;
}
int main(int argc, char * argv[])
{
testing::AddGlobalTestEnvironment(new TestSessionEnv);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
|