diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-20 15:06:02 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-20 15:06:02 +0300 |
| commit | 271af607921ceabc640271c475a66e45b9460d3f (patch) | |
| tree | 6ae443fd372dbeea947cba7bd5851f7936f354b5 /internal/eventloop_mountfs_test.go | |
| parent | 63184df8d5e30f70011a97d862103fa38d797bb3 (diff) | |
feat: add mount/fs management syscall tracing for c7
Diffstat (limited to 'internal/eventloop_mountfs_test.go')
| -rw-r--r-- | internal/eventloop_mountfs_test.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/internal/eventloop_mountfs_test.go b/internal/eventloop_mountfs_test.go new file mode 100644 index 0000000..05c11d9 --- /dev/null +++ b/internal/eventloop_mountfs_test.go @@ -0,0 +1,81 @@ +package internal + +import ( + "testing" + + "ior/internal/event" + "ior/internal/file" + "ior/internal/globalfilter" + "ior/internal/types" +) + +func TestHandleTwoFdExitUsesFirstDescriptor(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + el.fdState().set(81, file.NewFd(81, "/proc/self/fd/81", -1)) + + enter := &types.TwoFdEvent{ + EventType: types.ENTER_TWO_FD_EVENT, + TraceId: types.SYS_ENTER_MOVE_MOUNT, + Time: 100, + Pid: 70, + Tid: 71, + FdA: 81, + FdB: 82, + Extra: 0x2, + } + exit := &types.RetEvent{ + EventType: types.EXIT_RET_EVENT, + TraceId: types.SYS_EXIT_MOVE_MOUNT, + Time: 200, + Ret: 0, + Pid: 70, + Tid: 71, + } + ep := &event.Pair{EnterEv: enter, ExitEv: exit} + + if ok := el.handleTwoFdExit(ep, enter); !ok { + t.Fatal("handleTwoFdExit returned false") + } + if ep.File == nil || ep.File.FD() != 81 { + t.Fatalf("expected resolved descriptor 81, got file=%v", ep.File) + } +} + +func TestHandleTwoFdExitAppliesPairFilter(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{ + filter: globalfilter.Filter{ + Syscall: &globalfilter.StringFilter{Pattern: "openat"}, + }, + }) + + enter := &types.TwoFdEvent{ + EventType: types.ENTER_TWO_FD_EVENT, + TraceId: types.SYS_ENTER_MOVE_MOUNT, + Time: 100, + Pid: 72, + Tid: 73, + FdA: 91, + FdB: 92, + Extra: 0, + } + exit := &types.RetEvent{ + EventType: types.EXIT_RET_EVENT, + TraceId: types.SYS_EXIT_MOVE_MOUNT, + Time: 200, + Ret: 0, + Pid: 72, + Tid: 73, + } + ep := &event.Pair{EnterEv: enter, ExitEv: exit} + + if ok := el.handleTwoFdExit(ep, enter); ok { + t.Fatal("handleTwoFdExit should reject pair due to filter mismatch") + } +} + +func TestInitRawHandlersRegistersTwoFdEvent(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + if _, ok := el.rawHandlers[types.ENTER_TWO_FD_EVENT]; !ok { + t.Fatal("ENTER_TWO_FD_EVENT handler is not registered") + } +} |
