diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-22 18:20:44 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-22 18:20:44 +0200 |
| commit | 8e52ba5a8661c717f45e00608ad64f0adc6de3e1 (patch) | |
| tree | c90dcccca9168552d311312ba238e7b84fab9e0d /internal/eventloop_test.go | |
| parent | 40ce5bc1d9da31b49f42e488d2ab5633e7c6a3fb (diff) | |
Implement mmap/msync syscall support with unit and integration coverage
Diffstat (limited to 'internal/eventloop_test.go')
| -rw-r--r-- | internal/eventloop_test.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/internal/eventloop_test.go b/internal/eventloop_test.go index e6e3a4a..ca82f55 100644 --- a/internal/eventloop_test.go +++ b/internal/eventloop_test.go @@ -37,6 +37,8 @@ func TestEventloop(t *testing.T) { "CloseRangeFailureTest": makeCloseRangeFailureTestData(t), "FsyncEventTest": makeFsyncEventTestData(t), "SyncFileRangeEventTest": makeSyncFileRangeEventTestData(t), + "MmapEventTest": makeMmapEventTestData(t), + "MsyncEventTest": makeMsyncEventTestData(t), "FtruncateEventTest": makeFtruncateEventTestData(t), // PathEvent tests "MkdirEventTest": makeMkdirEventTestData(t), @@ -643,6 +645,83 @@ func makeSyncFileRangeEventTestData(t *testing.T) (td testData) { return td } +func makeMmapEventTestData(t *testing.T) (td testData) { + fd := int32(48) + filename := "mmap_test.txt" + + openEnterEv, _ := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid) + copy(openEnterEv.Filename[:], filename) + openEnterBytes, err := openEnterEv.Bytes() + if err != nil { + t.Fatal(err) + } + td.rawTracepoints = append(td.rawTracepoints, openEnterBytes) + + openExitEv, _ := makeExitOpenEvent(t, defaulTime+100, defaultPid, defaultTid) + openExitEv.Ret = int64(fd) + openExitBytes, err := openExitEv.Bytes() + if err != nil { + t.Fatal(err) + } + td.rawTracepoints = append(td.rawTracepoints, openExitBytes) + + enterEv, enterEvBytes := makeEnterFdEvent(t, defaulTime+200, defaultPid, defaultTid, fd, types.SYS_ENTER_MMAP) + td.rawTracepoints = append(td.rawTracepoints, enterEvBytes) + + const fakeMappedAddr = int64(0x70000000) + exitEv, exitEvBytes := makeExitRetEvent(t, defaulTime+300, defaultPid, defaultTid, types.SYS_EXIT_MMAP, fakeMappedAddr) + td.rawTracepoints = append(td.rawTracepoints, exitEvBytes) + + td.validates = append(td.validates, func(t *testing.T, el *eventLoop, ep *event.Pair) { + if !openEnterEv.Equals(ep.EnterEv) { + t.Errorf("Expected '%v' but got '%v'", openEnterEv, ep.EnterEv) + } + if !openExitEv.Equals(ep.ExitEv) { + t.Errorf("Expected '%v' but got '%v'", openExitEv, ep.ExitEv) + } + verifyFileDescriptor(t, el, fd, filename) + }) + + td.validates = append(td.validates, func(t *testing.T, el *eventLoop, ep *event.Pair) { + if !enterEv.Equals(ep.EnterEv) { + t.Errorf("Expected '%v' but got '%v'", enterEv, ep.EnterEv) + } + if !exitEv.Equals(ep.ExitEv) { + t.Errorf("Expected '%v' but got '%v'", exitEv, ep.ExitEv) + } + if ep.File == nil { + t.Fatalf("Expected file metadata for mmap event") + } + if ep.File.Name() != filename { + t.Errorf("Expected mmap file name '%s' but got '%s'", filename, ep.File.Name()) + } + }) + + return td +} + +func makeMsyncEventTestData(t *testing.T) (td testData) { + enterEv, enterEvBytes := makeEnterNullEvent(t, defaulTime, defaultPid, defaultTid, types.SYS_ENTER_MSYNC) + td.rawTracepoints = append(td.rawTracepoints, enterEvBytes) + + exitEv, exitEvBytes := makeExitRetEvent(t, defaulTime+100, defaultPid, defaultTid, types.SYS_EXIT_MSYNC, 0) + td.rawTracepoints = append(td.rawTracepoints, exitEvBytes) + + td.validates = append(td.validates, func(t *testing.T, el *eventLoop, ep *event.Pair) { + if !enterEv.Equals(ep.EnterEv) { + t.Errorf("Expected '%v' but got '%v'", enterEv, ep.EnterEv) + } + if !exitEv.Equals(ep.ExitEv) { + t.Errorf("Expected '%v' but got '%v'", exitEv, ep.ExitEv) + } + if ep.File != nil { + t.Errorf("Expected msync event to not carry file metadata, got %v", ep.File) + } + }) + + return td +} + func makeFtruncateEventTestData(t *testing.T) (td testData) { fd := int32(46) enterEv, enterEvBytes := makeEnterFdEvent(t, defaulTime, defaultPid, defaultTid, fd, types.SYS_ENTER_FTRUNCATE) |
