Skip to content

Commit 9185268

Browse files
AdamZvarasedmicha
authored andcommitted
Mapper: add tests
1 parent 716ca0e commit 9185268

File tree

3 files changed

+170
-0
lines changed

3 files changed

+170
-0
lines changed

tests/unit/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ add_subdirectory(core/parser)
1515
add_subdirectory(core/netflow)
1616
add_subdirectory(core/message_builder)
1717
add_subdirectory(core/modifier)
18+
add_subdirectory(core/template_mapper)
1819
# >> Add your new tests or test subdirectories HERE <<
1920

2021
# Enable code coverage target (i.e. make coverage) when appropriate build
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
include_directories(../../tools)
2+
3+
set(AUX_TOOLS
4+
"../../tools/MsgGen.cpp"
5+
"../../tools/MsgGen.h"
6+
)
7+
8+
# Register tests
9+
unit_tests_register_test(template_mapper.cpp ${AUX_TOOLS})
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
#include <gtest/gtest.h>
2+
#include <MsgGen.h>
3+
#include <libfds.h>
4+
5+
extern "C" {
6+
#include <core/template_mapper.h>
7+
}
8+
9+
int main(int argc, char **argv)
10+
{
11+
::testing::InitGoogleTest(&argc, argv);
12+
return RUN_ALL_TESTS();
13+
}
14+
15+
/** \brief Create template with given ID and fields cnt */
16+
struct fds_template *create_template(uint id, uint fields_cnt) {
17+
ipfix_trec trec(id);
18+
for (uint i = 1; i <= fields_cnt; ++i) {
19+
trec.add_field(i, 4);
20+
}
21+
uint16_t tmplt_size = trec.size();
22+
uint8_t *tmplt_raw = trec.release();
23+
24+
fds_template *tmplt;
25+
fds_template_parse(FDS_TYPE_TEMPLATE, tmplt_raw, &tmplt_size, &tmplt);
26+
free(tmplt_raw);
27+
return tmplt;
28+
}
29+
30+
/**
31+
* \brief Main testing fixture for testing mapper component
32+
*/
33+
class Common : public ::testing::Test {
34+
protected:
35+
using mapper_uniq = std::unique_ptr<ipx_template_mapper_t, decltype(&ipx_mapper_destroy)>;
36+
37+
ipx_template_mapper_t *mapper;
38+
39+
// Parsed templates
40+
const uint tmplt_cnt = 2;
41+
const fds_template *t1[2];
42+
const fds_template *t2[2];
43+
44+
// Setup
45+
void SetUp() override {
46+
// Initialize mapper
47+
mapper_uniq mapper_wrap(ipx_mapper_create(), &ipx_mapper_destroy);
48+
mapper = mapper_wrap.release();
49+
50+
const uint16_t tmplt_id = 256;
51+
52+
for (uint i = 0; i < tmplt_cnt; ++i) {
53+
t1[i] = create_template(tmplt_id, 2+i);
54+
t2[i] = create_template(tmplt_id+1, 3+i);
55+
}
56+
}
57+
58+
// Tear Down
59+
void TearDown() override {
60+
ipx_mapper_destroy(mapper);
61+
62+
for (uint i = 0; i < tmplt_cnt; ++i) {
63+
fds_template_destroy((struct fds_template *)t1[i]);
64+
fds_template_destroy((struct fds_template *)t2[i]);
65+
}
66+
}
67+
};
68+
69+
TEST_F(Common, CreateAndDestroy)
70+
{
71+
// Nothing to do
72+
ASSERT_NE(mapper, nullptr);
73+
}
74+
75+
TEST_F(Common, LookUp_EmptyMapper)
76+
{
77+
// Look up for template
78+
const fds_template *tmplt = ipx_mapper_lookup(mapper, t1[0], 256);
79+
ASSERT_EQ(tmplt, nullptr);
80+
}
81+
82+
TEST_F(Common, Add_SingleTemplate)
83+
{
84+
// Add template
85+
ASSERT_EQ(ipx_mapper_add(mapper, t1[0], 256), IPX_OK);
86+
87+
// Lookup template
88+
const fds_template *tmplt = ipx_mapper_lookup(mapper, t1[0], 256);
89+
ASSERT_NE(tmplt, nullptr);
90+
EXPECT_EQ(fds_template_cmp(tmplt, t1[0]), 0);
91+
}
92+
93+
TEST_F(Common, Add_MultipleTemplates_SameID)
94+
{
95+
// Use templates with ID 257, set original ID to 256
96+
ASSERT_EQ(ipx_mapper_add(mapper, t2[0], 256), IPX_OK);
97+
ASSERT_EQ(ipx_mapper_add(mapper, t2[1], 256), IPX_OK);
98+
99+
// Lookup using wrong template
100+
EXPECT_EQ(ipx_mapper_lookup(mapper, t1[0], 256), nullptr);
101+
102+
// Lookup using correct template
103+
const struct fds_template *tmplt = ipx_mapper_lookup(mapper, t2[1], 256);
104+
ASSERT_NE(tmplt, nullptr);
105+
EXPECT_EQ(fds_template_cmp(tmplt, t2[1]), 0);
106+
107+
tmplt = ipx_mapper_lookup(mapper, t2[0], 256);
108+
ASSERT_NE(tmplt, nullptr);
109+
EXPECT_EQ(fds_template_cmp(tmplt, t2[0]), 0);
110+
}
111+
112+
TEST_F(Common, Add_MultipleTemplates_DifferentIDs)
113+
{
114+
size_t size = 1000;
115+
fds_template **tmplts = new fds_template*[size];
116+
for (size_t i = 0; i < size; i++) {
117+
tmplts[i] = create_template(256 + i * 10, 2);
118+
}
119+
120+
for (size_t i = 0; i < size; i++) {
121+
ASSERT_EQ(ipx_mapper_add(mapper, tmplts[i], tmplts[i]->id), IPX_OK);
122+
}
123+
124+
const struct fds_template *tmplt;
125+
for (size_t i = 0; i < size; i++) {
126+
tmplt = ipx_mapper_lookup(mapper, tmplts[i], 256 + i * 10);
127+
ASSERT_NE(tmplt, nullptr);
128+
EXPECT_EQ(fds_template_cmp(tmplt, tmplts[i]), 0);
129+
}
130+
131+
for (size_t i = 0; i < size; i++) {
132+
fds_template_destroy(tmplts[i]);
133+
}
134+
delete[] tmplts;
135+
}
136+
137+
TEST_F(Common, Add_AllTemplates)
138+
{
139+
size_t size = 65536 - 256;
140+
fds_template **tmplts = new fds_template*[size];
141+
for (size_t i = 0; i < size; i++) {
142+
tmplts[i] = create_template(256 + i, 2);
143+
}
144+
145+
for (size_t i = 0; i < size; i++) {
146+
ASSERT_EQ(ipx_mapper_add(mapper, tmplts[i], tmplts[i]->id), IPX_OK);
147+
}
148+
149+
const struct fds_template *tmplt;
150+
for (size_t i = 0; i < size; i++) {
151+
tmplt = ipx_mapper_lookup(mapper, tmplts[i], 256 + i);
152+
ASSERT_NE(tmplt, nullptr);
153+
EXPECT_EQ(fds_template_cmp(tmplt, tmplts[i]), 0);
154+
}
155+
156+
for (size_t i = 0; i < size; i++) {
157+
fds_template_destroy(tmplts[i]);
158+
}
159+
delete[] tmplts;
160+
}

0 commit comments

Comments
 (0)