add observer runtime model
Instrument command, payload, update, scene, runner, polling, and policy flows Add observer regression coverage and mark observability backlog item done
This commit is contained in:
@@ -2,6 +2,7 @@ package laniakea
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -9,6 +10,10 @@ import (
|
||||
"git.scuroneko.dev/scuroneko/slog"
|
||||
)
|
||||
|
||||
type runnerObserver struct {
|
||||
recordingObserver
|
||||
}
|
||||
|
||||
func TestExecRunnersRunsOnetimeSyncRunner(t *testing.T) {
|
||||
var calls atomic.Int32
|
||||
bot := &Bot[NoData]{
|
||||
@@ -60,3 +65,33 @@ func TestExecRunnersStopsBackgroundRunnerOnCancel(t *testing.T) {
|
||||
t.Fatal("expected background runner to be called at least once")
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecRunnersEmitObserverEvents(t *testing.T) {
|
||||
observer := &runnerObserver{}
|
||||
wantErr := errors.New("runner failed")
|
||||
|
||||
bot := &Bot[NoData]{
|
||||
logger: slog.CreateLogger(),
|
||||
observer: observer,
|
||||
runners: []Runner[NoData]{
|
||||
NewRunner("sync-once", func(*Bot[NoData]) error {
|
||||
return wantErr
|
||||
}).Onetime(true).Async(false),
|
||||
},
|
||||
}
|
||||
|
||||
bot.ExecRunners(context.Background())
|
||||
|
||||
if len(observer.runners) != 1 {
|
||||
t.Fatalf("expected one runner-finished event, got %d", len(observer.runners))
|
||||
}
|
||||
if got := observer.runners[0]; got.Name != "sync-once" || !errors.Is(got.Err, wantErr) {
|
||||
t.Fatalf("unexpected runner-finished event: %#v", got)
|
||||
}
|
||||
if len(observer.errors) != 1 {
|
||||
t.Fatalf("expected one error event, got %d", len(observer.errors))
|
||||
}
|
||||
if got := observer.errors[0]; got.HandlerKind != HandlerRunnerKind || got.HandlerName != "sync-once" || !errors.Is(got.Err, wantErr) {
|
||||
t.Fatalf("unexpected runner error event: %#v", got)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user