summaryrefslogtreecommitdiff
path: root/internal/eventloop_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-22 18:20:44 +0200
committerPaul Buetow <paul@buetow.org>2026-02-22 18:20:44 +0200
commit8e52ba5a8661c717f45e00608ad64f0adc6de3e1 (patch)
treec90dcccca9168552d311312ba238e7b84fab9e0d /internal/eventloop_test.go
parent40ce5bc1d9da31b49f42e488d2ab5633e7c6a3fb (diff)
Implement mmap/msync syscall support with unit and integration coverage
Diffstat (limited to 'internal/eventloop_test.go')
-rw-r--r--internal/eventloop_test.go79
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)