Skip to content

Commit

Permalink
Add test for ebpf::parse_tracepoint function
Browse files Browse the repository at this point in the history
The test prepares tracepoint format file and run
ebpf::parse_tracepoint on it. Then it compares
expected struct output with actual function result.

Signed-off-by: Jiri Olsa <[email protected]>
  • Loading branch information
olsajiri authored and yonghong-song committed Mar 15, 2020
1 parent 7fd2fa6 commit b9099c5
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 1 deletion.
3 changes: 2 additions & 1 deletion tests/cc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ set(TEST_LIBBCC_SOURCES
test_sock_table.cc
test_usdt_args.cc
test_usdt_probes.cc
utils.cc)
utils.cc
test_parse_tracepoint.cc)

add_executable(test_libbcc ${TEST_LIBBCC_SOURCES})

Expand Down
69 changes: 69 additions & 0 deletions tests/cc/test_parse_tracepoint.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include "BPF.h"
#include "catch.hpp"
#include "common.h"

TEST_CASE("test tracepoint parser", "[TracepointParser]") {
std::string format =
"name: sys_enter_read\n"
"ID: 650\n"
"format:\n"
" field:unsigned short common_type; offset:0; size:2; signed:0;\n"
" field:unsigned char common_flags; offset:2; size:1; signed:0;\n"
" field:unsigned char common_preempt_count; offset:3; size:1; signed:0;\n"
" field:int common_pid; offset:4; size:4; signed:1;\n"
"\n"
" field:int __syscall_nr; offset:8; size:4; signed:1;\n"
" field:unsigned int fd; offset:16; size:8; signed:0;\n"
" field:char * buf; offset:24; size:8; signed:0;\n"
" field:size_t count; offset:32; size:8; signed:0;\n"
"\n"
"print fmt: \"fd: 0x%08lx, buf: 0x%08lx, count: 0x%08lx\", ((unsigned long)(REC->fd)), ((unsigned long)(REC->buf)), ((unsigned long)(REC->count))\n";

std::string expected =
"struct tracepoint__syscalls__sys_enter_read {\n"
"\tu64 __do_not_use__;\n"
"\tint __syscall_nr;\n"
"\tu64 fd;\n"
"\tchar * buf;\n"
"\tsize_t count;\n"
"};\n";

{
std::istringstream input(format);
std::string result = ebpf::parse_tracepoint(input, "syscalls", "sys_enter_read");
REQUIRE(expected == result);
}

format =
"name: signal_deliver\n"
"ID: 114\n"
"format:\n"
" field:unsigned short common_type; offset:0; size:2; signed:0;\n"
" field:unsigned char common_flags; offset:2; size:1; signed:0;\n"
" field:unsigned char common_preempt_count; offset:3; size:1; signed:0;\n"
" field:int common_pid; offset:4; size:4; signed:1;\n"
"\n"
" field:int sig; offset:8; size:4; signed:1;\n"
" field:int errno; offset:12; size:4; signed:1;\n"
" field:int code; offset:16; size:4; signed:1;\n"
" field:unsigned long sa_handler; offset:24; size:8; signed:0;\n"
" field:unsigned long sa_flags; offset:32; size:8; signed:0;\n"
"\n"
"print fmt: \"sig=%d errno=%d code=%d sa_handler=%lx sa_flags=%lx\", REC->sig, REC->errno, REC->code, REC->sa_handler, REC->sa_flags\n";

expected =
"struct tracepoint__signal__signal_deliver {\n"
"\tu64 __do_not_use__;\n"
"\tint sig;\n"
"\tint errno;\n"
"\tint code;\n"
"\tunsigned long sa_handler;\n"
"\tunsigned long sa_flags;\n"
"};\n";

{
std::istringstream input(format);
std::string result = ebpf::parse_tracepoint(input, "signal", "signal_deliver");
REQUIRE(expected == result);
}
}

0 comments on commit b9099c5

Please sign in to comment.