diff options
| author | Paul Buetow <paul@buetow.org> | 2025-10-09 10:44:27 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-10-09 10:44:27 +0300 |
| commit | 82f3c50dce5a26d828b9e9fd71bdf3c05adae968 (patch) | |
| tree | d75439d32485c6586e0631d49d3e3d3b36a577e0 /internal/eventloop_test.go | |
| parent | 91632ae9e2f49cb046b5899f190890b9d139ed89 (diff) | |
fix unit tests, initial hard exclude of not working yet syscalls
Diffstat (limited to 'internal/eventloop_test.go')
| -rw-r--r-- | internal/eventloop_test.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/internal/eventloop_test.go b/internal/eventloop_test.go index 7a6ce9d..dc92bda 100644 --- a/internal/eventloop_test.go +++ b/internal/eventloop_test.go @@ -58,6 +58,7 @@ func TestEventloop(t *testing.T) { "FcntlDupfdCloexecTest": makeFcntlDupfdCloexecTestData(t), "FcntlErrorTest": makeFcntlErrorTestData(t), "FcntlInvalidFdTest": makeFcntlInvalidFdTestData(t), + "NameToHandleAtTest": makeNameToHandleAtTestData(t), // FD Lifecycle tests "FdLifecycleTest": makeFdLifecycleTestData(t), "FdDupTest": makeFdDupTestData(t), @@ -1523,6 +1524,67 @@ func makeFcntlInvalidFdTestData(t *testing.T) (td testData) { return td } +func makeEnterOpenByHandleAtEvent(t *testing.T, time uint64, pid, tid uint32, flags int32) (types.OpenByHandleAtEvent, []byte) { + ev := types.OpenByHandleAtEvent{ + EventType: types.ENTER_OPEN_BY_HANDLE_AT_EVENT, + TraceId: types.SYS_ENTER_OPEN_BY_HANDLE_AT, + Time: time, + Pid: pid, + Tid: tid, + Flags: flags, + } + + bytes, err := ev.Bytes() + if err != nil { + t.Error(err) + } + return ev, bytes +} + +func makeNameToHandleAtTestData(t *testing.T) (td testData) { + pathname := "/tmp/handle_test.txt" + fd := int32(70) + + // Step 1: name_to_handle_at syscall + _, enterNameBytes := makeEnterPathEvent(t, defaulTime, defaultPid, defaultTid, pathname, types.SYS_ENTER_NAME_TO_HANDLE_AT) + td.rawTracepoints = append(td.rawTracepoints, enterNameBytes) + + _, exitNameBytes := makeExitRetEvent(t, defaulTime+100, defaultPid, defaultTid, types.SYS_EXIT_NAME_TO_HANDLE_AT, 0) + td.rawTracepoints = append(td.rawTracepoints, exitNameBytes) + + // Step 2: open_by_handle_at syscall + _, enterOpenBytes := makeEnterOpenByHandleAtEvent(t, defaulTime+200, defaultPid, defaultTid, syscall.O_RDWR) + td.rawTracepoints = append(td.rawTracepoints, enterOpenBytes) + + exitOpenEv, exitOpenBytes := makeExitRetEvent(t, defaulTime+300, defaultPid, defaultTid, types.SYS_EXIT_OPEN_BY_HANDLE_AT, int64(fd)) + td.rawTracepoints = append(td.rawTracepoints, exitOpenBytes) + + // Validate that the two syscalls are correlated and result in a single open event + td.validates = append(td.validates, func(t *testing.T, el *eventLoop, ep *event.Pair) { + if ep.EnterEv.GetTraceId() != types.SYS_ENTER_OPEN_BY_HANDLE_AT { + t.Errorf("Expected enter event to be SYS_ENTER_OPEN_BY_HANDLE_AT, but got %v", ep.EnterEv.GetTraceId()) + } + if !exitOpenEv.Equals(ep.ExitEv) { + t.Errorf("Expected exit event '%v' but got '%v'", exitOpenEv, ep.ExitEv) + } + if ep.File == nil { + t.Errorf("Expected file to be set") + } else if ep.File.Name() != pathname { + t.Errorf("Expected file name '%v' but got '%v'", pathname, ep.File.Name()) + } + + // Verify that the fd is now tracked + verifyFileDescriptor(t, el, fd, pathname) + + // Verify that the pending handle has been consumed + if _, ok := el.pendingHandles[defaultTid]; ok { + t.Errorf("Expected pending handle for tid %d to be consumed", defaultTid) + } + }) + + return td +} + // Test open→read→write→close lifecycle func makeFdLifecycleTestData(t *testing.T) (td testData) { fd := int32(42) |
