diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-19 17:24:30 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-19 17:24:30 +0300 |
| commit | 6ef2ad7d15b3a11e643f312884c222ac53165623 (patch) | |
| tree | a08cf1809e85d32d8fc839e9df036cff97779166 /internal/generate/codegen_test.go | |
| parent | 843def4f5c23db050cccfae57a9acb5899c110f4 (diff) | |
y6: add epoll ctl/wait tracing and ready-count coverage
Diffstat (limited to 'internal/generate/codegen_test.go')
| -rw-r--r-- | internal/generate/codegen_test.go | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/internal/generate/codegen_test.go b/internal/generate/codegen_test.go index 1c99314..23b5a2a 100644 --- a/internal/generate/codegen_test.go +++ b/internal/generate/codegen_test.go @@ -255,6 +255,29 @@ func TestGenerateEventfdHandler(t *testing.T) { requireContains(t, output, "ev->ret = ctx->ret;") } +func TestGenerateEpollCtlHandler(t *testing.T) { + output := generateFromPair(t, FormatEpollCtl, FormatExitEpollCtl) + + requireContains(t, output, "struct epoll_ctl_event *ev") + requireContains(t, output, "ev->event_type = ENTER_EPOLL_CTL_EVENT;") + requireContains(t, output, "ev->epfd = (__s32)ctx->args[0];") + requireContains(t, output, "ev->op = (__s32)ctx->args[1];") + requireContains(t, output, "ev->fd = (__s32)ctx->args[2];") + requireContains(t, output, "ev->events = 0;") + requireContains(t, output, "if (ctx->args[3] != 0) {") + requireContains(t, output, "bpf_probe_read_user(&user_events, sizeof(user_events), (void *)ctx->args[3])") + requireContains(t, output, "ev->event_type = EXIT_RET_EVENT;") +} + +func TestGenerateEpollWaitHandlerUsesEpollFd(t *testing.T) { + output := generateFromPair(t, FormatEpollWait, FormatExitEpollWait) + + requireContains(t, output, "struct fd_event *ev") + requireContains(t, output, "ev->event_type = ENTER_FD_EVENT;") + requireContains(t, output, "ev->trace_id = SYS_ENTER_EPOLL_WAIT;") + requireContains(t, output, "ev->fd = (__s32)ctx->args[0];") +} + func TestGenerateNameToHandleAtHandler(t *testing.T) { output := generateFromPair(t, FormatNameToHandleAt, FormatExitNameToHandleAt) @@ -367,6 +390,7 @@ func TestGenerateAllEventTypes(t *testing.T) { {KindAccept, "ENTER_ACCEPT_EVENT", "EXIT_ACCEPT_EVENT"}, {KindPipe, "ENTER_PIPE_EVENT", "EXIT_PIPE_EVENT"}, {KindEventfd, "ENTER_EVENTFD_EVENT", "EXIT_EVENTFD_EVENT"}, + {KindEpollCtl, "ENTER_EPOLL_CTL_EVENT", "EXIT_EPOLL_CTL_EVENT"}, } for _, tt := range tests { @@ -398,6 +422,7 @@ func TestEventStructNames(t *testing.T) { {KindAccept, "accept_event"}, {KindPipe, "pipe_event"}, {KindEventfd, "eventfd_event"}, + {KindEpollCtl, "epoll_ctl_event"}, } for _, tt := range tests { @@ -416,7 +441,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, KindPipe, KindEventfd} + accepted := []TracepointKind{KindFd, KindOpen, KindPathname, KindName, KindFcntl, KindNull, KindDup3, KindOpenByHandleAt, KindSocket, KindSocketpair, KindAccept, KindPipe, KindEventfd, KindEpollCtl} for _, k := range accepted { if isEnterRejected(k) { t.Errorf("kind %d should NOT be enter-rejected", k) |
