diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-10 22:34:17 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-10 22:34:17 +0200 |
| commit | 80d8993dca4cf7945c492406489fb9d966e2dc44 (patch) | |
| tree | 51bb8eda2a60c17cf04294370d095b6f86d0f035 /internal/eventloop_cleanup_test.go | |
| parent | d1aeb4afa9afee8a0cce8827b4c2dd9f8c01fe5b (diff) | |
eventloop: bound pending enter and proc-fd caches (task 425)
Diffstat (limited to 'internal/eventloop_cleanup_test.go')
| -rw-r--r-- | internal/eventloop_cleanup_test.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/internal/eventloop_cleanup_test.go b/internal/eventloop_cleanup_test.go new file mode 100644 index 0000000..f76bfe7 --- /dev/null +++ b/internal/eventloop_cleanup_test.go @@ -0,0 +1,88 @@ +package internal + +import ( + "testing" + + "ior/internal/file" +) + +func TestTracepointEnteredPrunesOldestPendingPairs(t *testing.T) { + el := &eventLoop{ + commResolver: newCommResolver(make(map[uint32]string)), + maxPendingEnterEvs: 2, + } + + enterOne, _ := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid) + enterTwo, _ := makeEnterOpenEvent(t, defaulTime+1, defaultPid, defaultTid+1) + enterThree, _ := makeEnterOpenEvent(t, defaulTime+2, defaultPid, defaultTid+2) + + el.tracepointEntered(&enterOne) + el.tracepointEntered(&enterTwo) + el.tracepointEntered(&enterThree) + + if _, ok := el.enterEvs[defaultTid]; ok { + t.Fatalf("expected oldest pending enter event to be evicted") + } + if _, ok := el.enterEvs[defaultTid+1]; !ok { + t.Fatalf("expected newer pending enter event to be retained") + } + if _, ok := el.enterEvs[defaultTid+2]; !ok { + t.Fatalf("expected newest pending enter event to be retained") + } + if got := len(el.enterEvAges); got != 2 { + t.Fatalf("pending enter metadata size = %d, want 2", got) + } + + for _, pair := range el.enterEvs { + pair.Recycle() + } +} + +func TestConsumeEnterEventClearsPendingPairMetadata(t *testing.T) { + el := &eventLoop{} + + enterOne, _ := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid) + el.setEnterEvent(&enterOne) + + pair, ok := el.consumeEnterEvent(defaultTid) + if !ok { + t.Fatalf("expected pending enter event to be consumed") + } + if pair == nil { + t.Fatalf("expected consumed pair") + } + pair.Recycle() + + if _, ok := el.enterEvs[defaultTid]; ok { + t.Fatalf("expected pending enter pair to be removed") + } + if _, ok := el.enterEvAges[defaultTid]; ok { + t.Fatalf("expected pending enter metadata to be removed") + } +} + +func TestProcFdCacheRetainsRecentlyUsedEntries(t *testing.T) { + el := &eventLoop{maxProcFdCacheSize: 2} + + el.setProcFdCache(10, defaultPid, file.NewFdWithPid(10, defaultPid)) + el.setProcFdCache(11, defaultPid, file.NewFdWithPid(11, defaultPid)) + + if _, ok := el.cachedProcFdFile(10, defaultPid); !ok { + t.Fatalf("expected first cache entry to exist before refresh") + } + + el.setProcFdCache(12, defaultPid, file.NewFdWithPid(12, defaultPid)) + + if _, ok := el.cachedProcFdFile(10, defaultPid); !ok { + t.Fatalf("expected recently used cache entry to be retained") + } + if _, ok := el.cachedProcFdFile(11, defaultPid); ok { + t.Fatalf("expected least recently used cache entry to be evicted") + } + if _, ok := el.cachedProcFdFile(12, defaultPid); !ok { + t.Fatalf("expected newest cache entry to be retained") + } + if got := len(el.procFdCacheAges); got != 2 { + t.Fatalf("proc fd cache metadata size = %d, want 2", got) + } +} |
