Skip to content

Commit ed73c09

Browse files
committed
cleanup(tests): move filter compilation functions to sinsp_with_test_input
Signed-off-by: Luca Guerra <[email protected]>
1 parent e3d0ab8 commit ed73c09

6 files changed

+76
-124
lines changed

userspace/libsinsp/test/events_fspath.ut.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ limitations under the License.
2020

2121
#include <gtest/gtest.h>
2222

23-
#include "filter_compiler.h"
2423
#include <sinsp_with_test_input.h>
2524

2625
class fspath : public sinsp_with_test_input
@@ -112,13 +111,13 @@ class fspath : public sinsp_with_test_input
112111
std::string fieldstr = field;
113112

114113
std::string eq_filter_str = fieldstr + " = " + expected;
115-
filter_run(evt, true, eq_filter_str);
114+
EXPECT_TRUE(eval_filter(evt, eq_filter_str));
116115

117116
std::string in_filter_str = fieldstr + " in (" + expected + ")";
118-
filter_run(evt, true, in_filter_str);
117+
EXPECT_TRUE(eval_filter(evt, in_filter_str));
119118

120119
std::string pmatch_filter_str = fieldstr + " pmatch (" + expected + ")";
121-
filter_run(evt, true, pmatch_filter_str);
120+
EXPECT_TRUE(eval_filter(evt, pmatch_filter_str));
122121
}
123122

124123
void verify_fields(sinsp_evt *evt,

userspace/libsinsp/test/filter_compiler.h

-62
This file was deleted.

userspace/libsinsp/test/filter_op_bcontains.ut.cpp

+25-33
Original file line numberDiff line numberDiff line change
@@ -19,44 +19,36 @@ limitations under the License.
1919
#include <libsinsp/sinsp.h>
2020
#include <gtest/gtest.h>
2121

22-
#include "filter_compiler.h"
22+
#include <sinsp_with_test_input.h>
2323

24-
TEST(sinsp_filter_check, bcontains_bstartswith)
24+
TEST_F(sinsp_with_test_input, bcontains_bstartswith)
2525
{
26-
// craft a fake read exit event containing the "hello" string
27-
char scap_evt_err[2048];
26+
add_default_init_thread();
27+
28+
open_inspector();
29+
2830
uint8_t read_buf[] = {'h', 'e', 'l', 'l', 'o'};
29-
uint8_t scap_evt_buf[2048];
30-
size_t evt_size;
31-
scap_sized_buffer scap_evt;
32-
scap_evt.buf = (void*) &scap_evt_buf[0];
33-
scap_evt.size = (size_t) sizeof(scap_evt_buf);
34-
if (scap_event_encode_params(
35-
scap_evt, &evt_size, scap_evt_err, PPME_SYSCALL_READ_X, 3, (int64_t) 0,
36-
scap_const_sized_buffer{&read_buf[0],sizeof(read_buf)}) != SCAP_SUCCESS)
37-
{
38-
FAIL() << "could not create scap event";
39-
}
40-
sinsp_evt evt;
41-
evt.init((uint8_t*) scap_evt.buf, 0); // 68656c6c6f
31+
sinsp_evt * evt = add_event_advance_ts(increasing_ts(), 1, PPME_SYSCALL_READ_X, 2, (int64_t) 0, scap_const_sized_buffer{read_buf, sizeof(read_buf)});
4232

4333
// test filters with bcontains
44-
filter_compile(NULL, "evt.buffer bcontains");
45-
filter_compile(NULL, "evt.buffer bcontains 2");
46-
filter_compile(NULL, "evt.buffer bcontains 2g");
47-
filter_run(&evt, true, "evt.buffer bcontains 68656c6c6f");
48-
filter_run(&evt, true, "evt.buffer bcontains 656c6C");
49-
filter_run(&evt, false, "evt.buffer bcontains 20");
50-
filter_run(&evt, false, "evt.buffer bcontains 656c6cAA");
34+
EXPECT_FALSE(filter_compiles("evt.buffer bcontains"));
35+
EXPECT_FALSE(filter_compiles("evt.buffer bcontains 2"));
36+
EXPECT_FALSE(filter_compiles("evt.buffer bcontains 2g"));
37+
38+
EXPECT_TRUE(eval_filter(evt, "evt.buffer bcontains 68656c6c6f"));
39+
EXPECT_TRUE(eval_filter(evt, "evt.buffer bcontains 656c6C"));
40+
EXPECT_FALSE(eval_filter(evt, "evt.buffer bcontains 20"));
41+
EXPECT_FALSE(eval_filter(evt, "evt.buffer bcontains 656c6cAA"));
5142

5243
// test filters with bstartswith
53-
filter_compile(NULL, "evt.buffer bstartswith");
54-
filter_compile(NULL, "evt.buffer bstartswith 2");
55-
filter_compile(NULL, "evt.buffer bstartswith 2g");
56-
filter_run(&evt, true, "evt.buffer bstartswith 68");
57-
filter_run(&evt, true, "evt.buffer bstartswith 68656c6c6f");
58-
filter_run(&evt, false, "evt.buffer bstartswith 65");
59-
filter_run(&evt, false, "evt.buffer bstartswith 656c6C");
60-
filter_run(&evt, false, "evt.buffer bstartswith 20");
61-
filter_run(&evt, false, "evt.buffer bstartswith 656c6cAA");
44+
EXPECT_FALSE(filter_compiles("evt.buffer bstartswith"));
45+
EXPECT_FALSE(filter_compiles("evt.buffer bstartswith 2"));
46+
EXPECT_FALSE(filter_compiles("evt.buffer bstartswith 2g"));
47+
48+
EXPECT_TRUE(eval_filter(evt, "evt.buffer bstartswith 68"));
49+
EXPECT_TRUE(eval_filter(evt, "evt.buffer bstartswith 68656c6c6f"));
50+
EXPECT_FALSE(eval_filter(evt, "evt.buffer bstartswith 65"));
51+
EXPECT_FALSE(eval_filter(evt, "evt.buffer bstartswith 656c6C"));
52+
EXPECT_FALSE(eval_filter(evt, "evt.buffer bstartswith 20"));
53+
EXPECT_FALSE(eval_filter(evt, "evt.buffer bstartswith 656c6cAA"));
6254
}

userspace/libsinsp/test/filter_op_pmatch.ut.cpp

+16-17
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ limitations under the License.
2020
#include <gtest/gtest.h>
2121

2222
#include <sinsp_with_test_input.h>
23-
#include "filter_compiler.h"
2423

2524

2625
TEST_F(sinsp_with_test_input, pmatch)
@@ -32,27 +31,27 @@ TEST_F(sinsp_with_test_input, pmatch)
3231
int64_t fd = 1;
3332
sinsp_evt * evt = add_event_advance_ts(increasing_ts(), 3, PPME_SYSCALL_OPEN_X, 6, fd, "/opt/dir/subdir/file.txt", 0, 0, 0, (uint64_t) 0);
3433

35-
filter_run(evt, true, "fd.name pmatch (/opt/dir)");
36-
filter_run(evt, true, "fd.name pmatch (/opt/dir/subdir)");
37-
filter_run(evt, false, "fd.name pmatch (/opt/dir2)");
38-
filter_run(evt, true, "fd.name pmatch (/opt/dir, /opt/dir2)");
39-
filter_run(evt, false, "fd.name pmatch (/opt/dir3, /opt/dir2)");
40-
filter_run(evt, true, "fd.name pmatch (/opt/*)");
41-
filter_run(evt, true, "fd.name pmatch (/opt/*/subdir)");
34+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/dir)"));
35+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/dir/subdir)"));
36+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/dir2)"));
37+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/dir, /opt/dir2)"));
38+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/dir3, /opt/dir2)"));
39+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/*)"));
40+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/*/subdir)"));
4241
// In Windows systems, the function used to perform path matching differs
4342
// from linux and macos: instead of `fnmatch` is used `PathMatchSpecA`
4443
// (from the Windows API); this function reflects the Windows behaviour
4544
// in path matching (case insentive...). Given that we need to exclude
4645
// some tests.
4746
#if !defined(_WIN32)
48-
filter_run(evt, true, "fd.name pmatch (/opt/di?/subdir)");
49-
filter_run(evt, false, "fd.name pmatch (/opt/dii?/subdir)");
50-
filter_run(evt, true, "fd.name pmatch (/opt/di[r]/subdir)");
51-
filter_run(evt, false, "fd.name pmatch (/opt/di[!r]/subdir)");
52-
filter_run(evt, false, "fd.name pmatch (/opt/di[t]/subdir)");
47+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/di?/subdir)"));
48+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/dii?/subdir)"));
49+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/di[r]/subdir)"));
50+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/di[!r]/subdir)"));
51+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/di[t]/subdir)"));
5352
#endif
54-
filter_run(evt, false, "fd.name pmatch (/opt/di/subdir)");
55-
filter_run(evt, false, "fd.name pmatch (/opt/*/subdir2)");
56-
filter_run(evt, true, "fd.name pmatch (/opt/*/*)");
57-
filter_run(evt, false, "fd.name pmatch (/opt/*/*/subsubdir)");
53+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/di/subdir)"));
54+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/*/subdir2)"));
55+
EXPECT_TRUE(eval_filter(evt, "fd.name pmatch (/opt/*/*)"));
56+
EXPECT_FALSE(eval_filter(evt, "fd.name pmatch (/opt/*/*/subsubdir)"));
5857
}

userspace/libsinsp/test/sinsp_with_test_input.cpp

+28-7
Original file line numberDiff line numberDiff line change
@@ -497,20 +497,41 @@ std::string sinsp_with_test_input::get_field_as_string(sinsp_evt* evt, std::stri
497497
return result;
498498
}
499499

500-
bool sinsp_with_test_input::eval_filter(sinsp_evt* evt, std::string filter_str)
500+
bool sinsp_with_test_input::eval_filter(sinsp_evt* evt, std::string_view filter_str)
501501
{
502-
auto factory = std::make_shared<sinsp_filter_factory>(&m_inspector, m_default_filterlist);
503-
sinsp_filter_compiler compiler(factory, filter_str);
502+
return eval_filter(evt, filter_str, m_default_filterlist);
503+
}
504+
505+
bool sinsp_with_test_input::eval_filter(sinsp_evt* evt, std::string_view filter_str, filter_check_list &flist)
506+
{
507+
auto factory = std::make_shared<sinsp_filter_factory>(&m_inspector, flist);
508+
sinsp_filter_compiler compiler(factory, std::string(filter_str));
504509

505510
auto filter = compiler.compile();
506-
if (!filter)
507-
{
508-
throw sinsp_exception(std::string("could not compile filter ") + filter_str);
509-
}
510511

511512
return filter->run(evt);
512513
}
513514

515+
bool sinsp_with_test_input::filter_compiles(std::string_view filter_str)
516+
{
517+
return filter_compiles(filter_str, m_default_filterlist);
518+
}
519+
520+
bool sinsp_with_test_input::filter_compiles(std::string_view filter_str, filter_check_list &flist)
521+
{
522+
auto factory = std::make_shared<sinsp_filter_factory>(&m_inspector, flist);
523+
sinsp_filter_compiler compiler(factory, std::string(filter_str));
524+
try
525+
{
526+
auto f = compiler.compile();
527+
return true;
528+
}
529+
catch(const sinsp_exception& e)
530+
{
531+
return false;
532+
}
533+
}
534+
514535
sinsp_evt* sinsp_with_test_input::next_event()
515536
{
516537
sinsp_evt* evt;

userspace/libsinsp/test/sinsp_with_test_input.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,10 @@ class sinsp_with_test_input : public ::testing::Test
199199
bool field_has_value(sinsp_evt*, std::string_view field_name, filter_check_list&);
200200
std::string get_field_as_string(sinsp_evt*, std::string_view field_name);
201201
std::string get_field_as_string(sinsp_evt*, std::string_view field_name, filter_check_list&);
202-
bool eval_filter(sinsp_evt* evt, std::string filter);
202+
bool eval_filter(sinsp_evt* evt, std::string_view filter_str);
203+
bool eval_filter(sinsp_evt* evt, std::string_view filter_str, filter_check_list&);
204+
bool filter_compiles(std::string_view filter_str);
205+
bool filter_compiles(std::string_view filter_str, filter_check_list&);
203206

204207
sinsp_evt* next_event();
205208

0 commit comments

Comments
 (0)