summaryrefslogtreecommitdiff
path: root/internal/generate/codegen_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-19 16:15:18 +0300
committerPaul Buetow <paul@buetow.org>2026-05-19 16:15:18 +0300
commit843def4f5c23db050cccfae57a9acb5899c110f4 (patch)
treed90d94c39ff59c7df7278f29f5402c58c391daec /internal/generate/codegen_test.go
parent061fb2b2380752eed06a78d10567da172ea8e27c (diff)
x6: add pipe/eventfd fd-from-air syscall support
Diffstat (limited to 'internal/generate/codegen_test.go')
-rw-r--r--internal/generate/codegen_test.go36
1 files changed, 35 insertions, 1 deletions
diff --git a/internal/generate/codegen_test.go b/internal/generate/codegen_test.go
index d8130c8..1c99314 100644
--- a/internal/generate/codegen_test.go
+++ b/internal/generate/codegen_test.go
@@ -225,6 +225,36 @@ func TestGenerateAcceptHandler(t *testing.T) {
requireContains(t, output, "ev->ret = ctx->ret;")
}
+func TestGeneratePipeHandler(t *testing.T) {
+ output := generateFromPair(t, FormatPipe2, FormatExitPipe2)
+
+ requireContains(t, output, "struct pipe_event *ev")
+ requireContains(t, output, "ev->event_type = ENTER_PIPE_EVENT;")
+ requireContains(t, output, "struct pipe_ctx pending;")
+ requireContains(t, output, "pending.upipefd = ctx->args[0];")
+ requireContains(t, output, "pending.flags = (__s32)ctx->args[1];")
+ requireContains(t, output, "bpf_map_update_elem(&pipe_ctx_map, &tid, &pending, BPF_ANY);")
+ requireContains(t, output, "ev->fd0 = -1;")
+ requireContains(t, output, "ev->fd1 = -1;")
+ requireContains(t, output, "SEC(\"tracepoint/syscalls/sys_exit_pipe2\")")
+ requireContains(t, output, "ev->event_type = EXIT_PIPE_EVENT;")
+ requireContains(t, output, "struct pipe_ctx *pending = bpf_map_lookup_elem(&pipe_ctx_map, &tid);")
+ requireContains(t, output, "ev->ret = ctx->ret;")
+}
+
+func TestGenerateEventfdHandler(t *testing.T) {
+ output := generateFromPair(t, FormatEventfd2, FormatExitEventfd2)
+
+ requireContains(t, output, "struct eventfd_event *ev")
+ requireContains(t, output, "ev->event_type = ENTER_EVENTFD_EVENT;")
+ requireContains(t, output, "bpf_map_update_elem(&eventfd_flags_map, &tid, &flags, BPF_ANY);")
+ requireContains(t, output, "ev->flags = flags;")
+ requireContains(t, output, "ev->ret = -1;")
+ requireContains(t, output, "SEC(\"tracepoint/syscalls/sys_exit_eventfd2\")")
+ requireContains(t, output, "ev->event_type = EXIT_EVENTFD_EVENT;")
+ requireContains(t, output, "ev->ret = ctx->ret;")
+}
+
func TestGenerateNameToHandleAtHandler(t *testing.T) {
output := generateFromPair(t, FormatNameToHandleAt, FormatExitNameToHandleAt)
@@ -335,6 +365,8 @@ func TestGenerateAllEventTypes(t *testing.T) {
{KindSocket, "ENTER_SOCKET_EVENT", "EXIT_SOCKET_EVENT"},
{KindSocketpair, "ENTER_SOCKETPAIR_EVENT", "EXIT_SOCKETPAIR_EVENT"},
{KindAccept, "ENTER_ACCEPT_EVENT", "EXIT_ACCEPT_EVENT"},
+ {KindPipe, "ENTER_PIPE_EVENT", "EXIT_PIPE_EVENT"},
+ {KindEventfd, "ENTER_EVENTFD_EVENT", "EXIT_EVENTFD_EVENT"},
}
for _, tt := range tests {
@@ -364,6 +396,8 @@ func TestEventStructNames(t *testing.T) {
{KindSocket, "socket_event"},
{KindSocketpair, "socketpair_event"},
{KindAccept, "accept_event"},
+ {KindPipe, "pipe_event"},
+ {KindEventfd, "eventfd_event"},
}
for _, tt := range tests {
@@ -382,7 +416,7 @@ func TestEnterReject(t *testing.T) {
t.Error("KindNone should be enter-rejected")
}
- accepted := []TracepointKind{KindFd, KindOpen, KindPathname, KindName, KindFcntl, KindNull, KindDup3, KindOpenByHandleAt, KindSocket, KindSocketpair, KindAccept}
+ accepted := []TracepointKind{KindFd, KindOpen, KindPathname, KindName, KindFcntl, KindNull, KindDup3, KindOpenByHandleAt, KindSocket, KindSocketpair, KindAccept, KindPipe, KindEventfd}
for _, k := range accepted {
if isEnterRejected(k) {
t.Errorf("kind %d should NOT be enter-rejected", k)