summaryrefslogtreecommitdiff
path: root/internal/eventloop_cleanup_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-18 09:04:17 +0200
committerPaul Buetow <paul@buetow.org>2026-03-18 09:04:17 +0200
commit1731c3723ced92a5dc8e54fb0caf4e33b2c7ba70 (patch)
treeb384a235ca927177413bb198e0fd421f2bfbaa2b /internal/eventloop_cleanup_test.go
parent6ab80599c8f8ba688a0415ecbeb03e494ef31f04 (diff)
refactor: extract pairTracker and extend fdTracker to reduce eventLoop responsibilities (task 428)
The eventLoop struct held 20+ fields across 5+ responsibilities (SRP violation). Extract two cohesive sub-structs: - pairTracker: enter/exit pair matching, age-based LRU pruning, and DurationToPrev tracking. Replaces enterEvs/enterEvAges/prevPairTimes/ maxPendingEnterEvs/cacheAge fields with a single embedded value. - fdTracker (extended): absorbs procFdCache/procFdAges/maxProcFdCacheSize, moving all procfs-resolution cache logic (resolve, cache, prune, delete) off eventLoop and onto the tracker that already owns the fd table. eventLoop drops from 20 fields to 12. All methods that previously reached into eventLoop fields now live on the struct that owns the data. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'internal/eventloop_cleanup_test.go')
-rw-r--r--internal/eventloop_cleanup_test.go42
1 files changed, 22 insertions, 20 deletions
diff --git a/internal/eventloop_cleanup_test.go b/internal/eventloop_cleanup_test.go
index f76bfe7..1d3a6fb 100644
--- a/internal/eventloop_cleanup_test.go
+++ b/internal/eventloop_cleanup_test.go
@@ -8,8 +8,8 @@ import (
func TestTracepointEnteredPrunesOldestPendingPairs(t *testing.T) {
el := &eventLoop{
- commResolver: newCommResolver(make(map[uint32]string)),
- maxPendingEnterEvs: 2,
+ commResolver: newCommResolver(make(map[uint32]string)),
+ pairs: pairTracker{maxSize: 2},
}
enterOne, _ := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid)
@@ -20,20 +20,20 @@ func TestTracepointEnteredPrunesOldestPendingPairs(t *testing.T) {
el.tracepointEntered(&enterTwo)
el.tracepointEntered(&enterThree)
- if _, ok := el.enterEvs[defaultTid]; ok {
+ if _, ok := el.pairs.enters[defaultTid]; ok {
t.Fatalf("expected oldest pending enter event to be evicted")
}
- if _, ok := el.enterEvs[defaultTid+1]; !ok {
+ if _, ok := el.pairs.enters[defaultTid+1]; !ok {
t.Fatalf("expected newer pending enter event to be retained")
}
- if _, ok := el.enterEvs[defaultTid+2]; !ok {
+ if _, ok := el.pairs.enters[defaultTid+2]; !ok {
t.Fatalf("expected newest pending enter event to be retained")
}
- if got := len(el.enterEvAges); got != 2 {
+ if got := len(el.pairs.enterAges); got != 2 {
t.Fatalf("pending enter metadata size = %d, want 2", got)
}
- for _, pair := range el.enterEvs {
+ for _, pair := range el.pairs.enters {
pair.Recycle()
}
}
@@ -42,9 +42,9 @@ func TestConsumeEnterEventClearsPendingPairMetadata(t *testing.T) {
el := &eventLoop{}
enterOne, _ := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid)
- el.setEnterEvent(&enterOne)
+ el.pairs.set(&enterOne)
- pair, ok := el.consumeEnterEvent(defaultTid)
+ pair, ok := el.pairs.consume(defaultTid)
if !ok {
t.Fatalf("expected pending enter event to be consumed")
}
@@ -53,36 +53,38 @@ func TestConsumeEnterEventClearsPendingPairMetadata(t *testing.T) {
}
pair.Recycle()
- if _, ok := el.enterEvs[defaultTid]; ok {
+ if _, ok := el.pairs.enters[defaultTid]; ok {
t.Fatalf("expected pending enter pair to be removed")
}
- if _, ok := el.enterEvAges[defaultTid]; ok {
+ if _, ok := el.pairs.enterAges[defaultTid]; ok {
t.Fatalf("expected pending enter metadata to be removed")
}
}
func TestProcFdCacheRetainsRecentlyUsedEntries(t *testing.T) {
- el := &eventLoop{maxProcFdCacheSize: 2}
+ fdt := newFDTracker(nil)
+ fdt.maxCacheSize = 2
+ el := &eventLoop{fdTracker: fdt}
- el.setProcFdCache(10, defaultPid, file.NewFdWithPid(10, defaultPid))
- el.setProcFdCache(11, defaultPid, file.NewFdWithPid(11, defaultPid))
+ el.fdTracker.setProcFdCache(10, defaultPid, file.NewFdWithPid(10, defaultPid))
+ el.fdTracker.setProcFdCache(11, defaultPid, file.NewFdWithPid(11, defaultPid))
- if _, ok := el.cachedProcFdFile(10, defaultPid); !ok {
+ if _, ok := el.fdTracker.cachedProcFdFile(10, defaultPid); !ok {
t.Fatalf("expected first cache entry to exist before refresh")
}
- el.setProcFdCache(12, defaultPid, file.NewFdWithPid(12, defaultPid))
+ el.fdTracker.setProcFdCache(12, defaultPid, file.NewFdWithPid(12, defaultPid))
- if _, ok := el.cachedProcFdFile(10, defaultPid); !ok {
+ if _, ok := el.fdTracker.cachedProcFdFile(10, defaultPid); !ok {
t.Fatalf("expected recently used cache entry to be retained")
}
- if _, ok := el.cachedProcFdFile(11, defaultPid); ok {
+ if _, ok := el.fdTracker.cachedProcFdFile(11, defaultPid); ok {
t.Fatalf("expected least recently used cache entry to be evicted")
}
- if _, ok := el.cachedProcFdFile(12, defaultPid); !ok {
+ if _, ok := el.fdTracker.cachedProcFdFile(12, defaultPid); !ok {
t.Fatalf("expected newest cache entry to be retained")
}
- if got := len(el.procFdCacheAges); got != 2 {
+ if got := len(el.fdTracker.procFdAges); got != 2 {
t.Fatalf("proc fd cache metadata size = %d, want 2", got)
}
}