Skip to content

Commit 49c25b0

Browse files
cosmo0920edsiper
authored andcommitted
tests: in_ebpf_tcp_handler: Add test case for tcp trace
Signed-off-by: Hiroshi Hatake <hiroshi@chronosphere.io>
1 parent 6ac264d commit 49c25b0

2 files changed

Lines changed: 149 additions & 0 deletions

File tree

tests/runtime/CMakeLists.txt

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

168+
add_ebpf_handler_test(
169+
"tcp"
170+
"in_ebpf_tcp_handler.c"
171+
"../../plugins/in_ebpf/traces/tcp/handler.c"
172+
)
173+
168174
add_dependencies(flb-rt-in_ebpf_bind_handler fluent-bit-static)
169175
add_dependencies(flb-rt-in_ebpf_signal_handler fluent-bit-static)
170176
add_dependencies(flb-rt-in_ebpf_malloc_handler fluent-bit-static)
177+
add_dependencies(flb-rt-in_ebpf_tcp_handler fluent-bit-static)
171178

172179
endif()
173180

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
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+
connect_ev.details.connect.remote.version = 6;
127+
connect_ev.details.connect.remote.port = 8080;
128+
connect_ev.details.connect.remote.addr_raw.v6[0] = 0x20010db8;
129+
connect_ev.details.connect.remote.addr_raw.v6[1] = 0;
130+
connect_ev.details.connect.remote.addr_raw.v6[2] = 0;
131+
connect_ev.details.connect.remote.addr_raw.v6[3] = 1;
132+
133+
ret = encode_tcp_event(ctx->ins, ctx->event_ctx.log_encoder, &connect_ev);
134+
TEST_CHECK(ret == 0);
135+
136+
cleanup_test_context(ctx);
137+
}
138+
139+
TEST_LIST = {
140+
{"tcp_event_encoding", test_tcp_event_encoding},
141+
{NULL, NULL}
142+
};

0 commit comments

Comments
 (0)