Skip to content

Commit 0220375

Browse files
committed
tests: in_ebpf_tcp_handler: Add test case for tcp trace
Signed-off-by: Hiroshi Hatake <hiroshi@chronosphere.io>
1 parent 7322b6f commit 0220375

2 files changed

Lines changed: 139 additions & 0 deletions

File tree

tests/runtime/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,16 @@ if(FLB_IN_EBPF)
164164
"../../plugins/in_ebpf/traces/malloc/handler.c"
165165
)
166166

167+
add_ebpf_handler_test(
168+
"tcp"
169+
"in_ebpf_tcp_handler.c"
170+
"../../plugins/in_ebpf/traces/tcp/handler.c"
171+
)
172+
167173
add_dependencies(flb-rt-in_ebpf_bind_handler fluent-bit-static)
168174
add_dependencies(flb-rt-in_ebpf_signal_handler fluent-bit-static)
169175
add_dependencies(flb-rt-in_ebpf_malloc_handler fluent-bit-static)
176+
add_dependencies(flb-rt-in_ebpf_tcp_handler fluent-bit-static)
170177

171178
endif()
172179

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#include <stdio.h>
2+
#include <string.h>
3+
4+
#include <fluent-bit/flb_log_event_decoder.h>
5+
#include <fluent-bit/flb_log_event_encoder.h>
6+
#include <fluent-bit/flb_input_plugin.h>
7+
8+
#include "flb_tests_runtime.h"
9+
10+
#include "../../plugins/in_ebpf/traces/includes/common/event_context.h"
11+
#include "../../plugins/in_ebpf/traces/includes/common/events.h"
12+
#include "../../plugins/in_ebpf/traces/tcp/handler.h"
13+
14+
struct test_context {
15+
struct trace_event_context event_ctx;
16+
struct flb_input_instance *ins;
17+
struct flb_log_event_decoder *decoder;
18+
};
19+
20+
static struct test_context *init_test_context(void)
21+
{
22+
struct test_context *ctx;
23+
24+
ctx = flb_calloc(1, sizeof(struct test_context));
25+
if (!ctx) {
26+
return NULL;
27+
}
28+
29+
ctx->ins = flb_calloc(1, sizeof(struct flb_input_instance));
30+
if (!ctx->ins) {
31+
flb_free(ctx);
32+
return NULL;
33+
}
34+
35+
ctx->event_ctx.log_encoder = flb_log_event_encoder_create(FLB_LOG_EVENT_FORMAT_DEFAULT);
36+
if (!ctx->event_ctx.log_encoder) {
37+
flb_free(ctx->ins);
38+
flb_free(ctx);
39+
return NULL;
40+
}
41+
42+
ctx->decoder = flb_log_event_decoder_create(NULL, 0);
43+
if (!ctx->decoder) {
44+
flb_log_event_encoder_destroy(ctx->event_ctx.log_encoder);
45+
flb_free(ctx->ins);
46+
flb_free(ctx);
47+
return NULL;
48+
}
49+
50+
ctx->ins->context = &ctx->event_ctx;
51+
ctx->event_ctx.ins = ctx->ins;
52+
53+
return ctx;
54+
}
55+
56+
static void cleanup_test_context(struct test_context *ctx)
57+
{
58+
if (!ctx) {
59+
return;
60+
}
61+
62+
if (ctx->decoder) {
63+
flb_log_event_decoder_destroy(ctx->decoder);
64+
}
65+
66+
if (ctx->event_ctx.log_encoder) {
67+
flb_log_event_encoder_destroy(ctx->event_ctx.log_encoder);
68+
}
69+
70+
if (ctx->ins) {
71+
flb_free(ctx->ins);
72+
}
73+
74+
flb_free(ctx);
75+
}
76+
77+
void test_tcp_event_encoding(void)
78+
{
79+
struct test_context *ctx;
80+
struct event listen_ev = {0};
81+
struct event accept_ev = {0};
82+
struct event connect_ev = {0};
83+
int ret;
84+
85+
ctx = init_test_context();
86+
TEST_CHECK(ctx != NULL);
87+
88+
listen_ev.type = EVENT_TYPE_LISTEN;
89+
listen_ev.common.pid = 100;
90+
listen_ev.common.tid = 101;
91+
strncpy(listen_ev.common.comm, "tcpd", sizeof(listen_ev.common.comm));
92+
listen_ev.details.listen.fd = 3;
93+
listen_ev.details.listen.backlog = 128;
94+
listen_ev.details.listen.error_raw = 0;
95+
96+
ret = encode_tcp_event(ctx->ins, ctx->event_ctx.log_encoder, &listen_ev);
97+
TEST_CHECK(ret == 0);
98+
99+
accept_ev.type = EVENT_TYPE_ACCEPT;
100+
accept_ev.common.pid = 100;
101+
accept_ev.common.tid = 101;
102+
strncpy(accept_ev.common.comm, "tcpd", sizeof(accept_ev.common.comm));
103+
accept_ev.details.accept.fd = 3;
104+
accept_ev.details.accept.new_fd = 5;
105+
accept_ev.details.accept.peer.version = 4;
106+
accept_ev.details.accept.peer.port = 443;
107+
accept_ev.details.accept.peer.addr_raw.v4 = 0x0100007f;
108+
accept_ev.details.accept.error_raw = 0;
109+
110+
ret = encode_tcp_event(ctx->ins, ctx->event_ctx.log_encoder, &accept_ev);
111+
TEST_CHECK(ret == 0);
112+
113+
connect_ev.type = EVENT_TYPE_CONNECT;
114+
connect_ev.common.pid = 200;
115+
connect_ev.common.tid = 201;
116+
strncpy(connect_ev.common.comm, "curl", sizeof(connect_ev.common.comm));
117+
connect_ev.details.connect.fd = 7;
118+
connect_ev.details.connect.remote.version = 4;
119+
connect_ev.details.connect.remote.port = 80;
120+
connect_ev.details.connect.remote.addr_raw.v4 = 0x0101a8c0;
121+
connect_ev.details.connect.error_raw = 0;
122+
123+
ret = encode_tcp_event(ctx->ins, ctx->event_ctx.log_encoder, &connect_ev);
124+
TEST_CHECK(ret == 0);
125+
126+
cleanup_test_context(ctx);
127+
}
128+
129+
TEST_LIST = {
130+
{"tcp_event_encoding", test_tcp_event_encoding},
131+
{NULL, NULL}
132+
};

0 commit comments

Comments
 (0)