diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-11 07:36:56 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-11 07:36:56 +0200 |
| commit | 1b21e818a69bf73fde3ca60f89d2dc82a79fd605 (patch) | |
| tree | 0fd55ddc506555a1cc58d804289482265d691414 /internal/eventloop_error_handling_test.go | |
| parent | 802033de1954bd2fe5e912002fb6c8a07743b66d (diff) | |
eventloop: factor malformed-event helpers (task 383)
Diffstat (limited to 'internal/eventloop_error_handling_test.go')
| -rw-r--r-- | internal/eventloop_error_handling_test.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/internal/eventloop_error_handling_test.go b/internal/eventloop_error_handling_test.go index b5add72..b7dd282 100644 --- a/internal/eventloop_error_handling_test.go +++ b/internal/eventloop_error_handling_test.go @@ -146,6 +146,67 @@ func TestProcessRawEventMalformedKnownTypeDoesNotPanicAndNotifies(t *testing.T) } } +func TestDecodeRawEventMalformedNotifies(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + warnings := make(chan string, 1) + el.warningCb = func(message string) { warnings <- message } + + decoded, ok := decodeRawEvent(el, types.ENTER_OPEN_EVENT, []byte{byte(types.ENTER_OPEN_EVENT)}, types.NewOpenEventFast) + if ok || decoded != nil { + t.Fatalf("expected malformed raw event decode to fail, got ok=%v decoded=%v", ok, decoded) + } + + select { + case msg := <-warnings: + if msg == "" { + t.Fatalf("expected non-empty warning message") + } + default: + t.Fatalf("expected warning notification") + } +} + +func TestMustBeTypeReturnsTypedEnterEvent(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + enterEv, enterRaw := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid) + ep := event.NewPair(types.NewOpenEvent(enterRaw)) + defer ep.Recycle() + + typed, ok := mustBeType[*types.OpenEvent](el, ep, "ignored") + if !ok { + t.Fatal("expected mustBeType to return the typed enter event") + } + if typed.GetTid() != enterEv.Tid { + t.Fatalf("mustBeType() returned tid %d, want %d", typed.GetTid(), enterEv.Tid) + } +} + +func TestMustBeTypeRecyclesMalformedPairAndNotifies(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + warnings := make(chan string, 1) + el.warningCb = func(message string) { warnings <- message } + + _, enterRaw := makeEnterNullEvent(t, defaulTime, defaultPid, defaultTid, types.SYS_ENTER_SYNC) + ep := event.NewPair(types.NewNullEvent(enterRaw)) + + typed, ok := mustBeType[*types.OpenEvent](el, ep, "Dropped malformed open enter event") + if ok || typed != nil { + t.Fatalf("expected mustBeType mismatch to fail, got ok=%v typed=%v", ok, typed) + } + if ep.EnterEv != nil || ep.ExitEv != nil { + t.Fatalf("expected malformed pair to be recycled") + } + + select { + case msg := <-warnings: + if msg != "Dropped malformed open enter event" { + t.Fatalf("unexpected warning %q", msg) + } + default: + t.Fatalf("expected warning notification") + } +} + func TestTracepointEnteredMissingCommWithCommFilterNotifies(t *testing.T) { el := mustNewEventLoop(t, eventLoopConfig{ filter: globalfilter.Filter{ |
