From 9745923f0acc994181f643fb02b612f10426f41b Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 16 Apr 2025 15:39:44 +0300 Subject: eventloop initial test plus fix --- internal/eventloop.go | 7 +----- internal/eventloop_test.go | 57 ++++++++++++++++++++++++++++++---------------- 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/internal/eventloop.go b/internal/eventloop.go index f770fb6..53853d8 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -8,7 +8,6 @@ import ( "os" "path/filepath" "syscall" - "testing" "time" "ior/internal/event" @@ -71,8 +70,6 @@ func (e *eventLoop) stats() string { return stats } -var T *testing.T - func (e *eventLoop) run(ctx context.Context, rawCh <-chan []byte) { defer close(e.done) @@ -142,7 +139,7 @@ func (e *eventLoop) processRawEvent(raw []byte, ch chan<- *event.Pair) { e.syscallEnter(ev) } case EXIT_OPEN_EVENT: - e.syscallExit(NewFdEvent(raw), ch) + e.syscallExit(NewRetEvent(raw), ch) case ENTER_FD_EVENT: e.syscallEnter(NewFdEvent(raw)) case EXIT_FD_EVENT: @@ -171,7 +168,6 @@ func (e *eventLoop) processRawEvent(raw []byte, ch chan<- *event.Pair) { } func (e *eventLoop) syscallEnter(enterEv event.Event) { - T.Log("syscallenter", enterEv) tid := enterEv.GetTid() if !e.filter.commFilterEnable { e.enterEvs[tid] = event.NewPair(enterEv) @@ -193,7 +189,6 @@ func (e *eventLoop) syscallEnter(enterEv event.Event) { } func (e *eventLoop) syscallExit(exitEv event.Event, ch chan<- *event.Pair) { - T.Log("syscall exit", exitEv) ev, ok := e.enterEvs[exitEv.GetTid()] if !ok { exitEv.Recycle() diff --git a/internal/eventloop_test.go b/internal/eventloop_test.go index 045e8f0..2749c80 100644 --- a/internal/eventloop_test.go +++ b/internal/eventloop_test.go @@ -2,29 +2,40 @@ package internal import ( "context" + "fmt" "ior/internal/event" "ior/internal/types" "syscall" "testing" ) -// TODO: Finish this test -func TestEventloop(t *testing.T) { - T = t +type validateFunc func(t *testing.T, ev *event.Pair) +func TestEventloop(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() + inCh := make(chan []byte) - outCh := make(chan *event.Pair, 2) + outCh := make(chan *event.Pair) + validateCh := make(chan validateFunc) go func() { defer close(inCh) - sendOpenFileTracepoints(t, inCh) + defer close(validateCh) + + enterEv, exitEv, validate := openFileTestdata(t) + inCh <- enterEv + inCh <- exitEv + validateCh <- validate }() go func() { for ev := range outCh { - t.Log("Received", ev) + t.Run(ev.EnterEv.String(), func(t *testing.T) { + t.Log("Received", ev) + validate := <-validateCh + validate(t, ev) + }) } }() @@ -36,39 +47,47 @@ func TestEventloop(t *testing.T) { ev.run(ctx, inCh) } -func sendOpenFileTracepoints(t *testing.T, ch chan<- []byte) { - enterOpenEvent := types.OpenEvent{ +func openFileTestdata(t *testing.T) (enterEvBytes, exitEvBytes []byte, validate validateFunc) { + enterEv := types.OpenEvent{ EventType: types.ENTER_OPEN_EVENT, TraceId: types.SYS_ENTER_OPENAT, Time: 123456789, Pid: 10, - Tid: 10, + Tid: 11, Flags: syscall.O_RDWR, Filename: [types.MAX_FILENAME_LENGTH]byte{}, Comm: [types.MAX_PROGNAME_LENGTH]byte{}, } - copy(enterOpenEvent.Filename[:], "testfile.txt") - copy(enterOpenEvent.Comm[:], "testcomm") + copy(enterEv.Filename[:], "testfile.txt") + copy(enterEv.Comm[:], "testcomm") + + var err error - bytes, err := enterOpenEvent.Bytes() + enterEvBytes, err = enterEv.Bytes() if err != nil { t.Error(err) } - t.Log("Sending", enterOpenEvent, bytes) - ch <- bytes - exitOpenEvent := types.RetEvent{ + exitEv := types.RetEvent{ EventType: types.EXIT_OPEN_EVENT, TraceId: types.SYS_EXIT_OPENAT, Time: 123456789, Ret: 42, Pid: 10, - Tid: 10, + Tid: 11, } - bytes, err = exitOpenEvent.Bytes() + exitEvBytes, err = exitEv.Bytes() if err != nil { t.Error(err) + } - t.Log("Sending", exitOpenEvent, bytes) - ch <- bytes + + validate = func(t *testing.T, ev *event.Pair) { + if ev.EnterEv.GetTraceId() != enterEv.TraceId { + t.Errorf("Expected TraceId '%v' but got '%v'", enterEv.TraceId, ev.EnterEv.GetTraceId()) + } + t.Log(fmt.Sprintf("Event pair '%v' appears fine", ev)) + } + + return } -- cgit v1.2.3