github.com/ngicks/gokugen@v0.0.5/middleware/recover/recover_test.go (about) 1 package recover_test 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/ngicks/gokugen" 9 10 mockgokugen "github.com/ngicks/gokugen/__mock" 11 "github.com/ngicks/gokugen/middleware/observe" 12 recovermw "github.com/ngicks/gokugen/middleware/recover" 13 ) 14 15 func TestRecoverMw(t *testing.T) { 16 _, mockSched, getTrappedTask := mockgokugen.BuildMockScheduler(t) 17 18 ma := gokugen.NewMiddlewareApplicator(mockSched) 19 20 ma.Schedule( 21 gokugen.NewPlainContext( 22 time.Now(), 23 func(taskCtx context.Context, scheduled time.Time) (any, error) { 24 panic("mock pacnic") 25 }, 26 nil, 27 ), 28 ) 29 func() { 30 defer func() { 31 if recovered := recover(); recovered == nil { 32 t.Fatalf("must not be recovered") 33 } 34 }() 35 getTrappedTask().Do(context.TODO()) 36 }() 37 38 observer := observe.New(nil, func(ret any, err error) { 39 if _, ok := err.(*recovermw.RecoveredError); !ok { 40 t.Fatalf("unknown erro type: %T, %v", err, err) 41 } 42 }) 43 ma.Use(recovermw.New().Middleware, observer.Middleware) 44 45 ma.Schedule( 46 gokugen.NewPlainContext( 47 time.Now(), 48 func(taskCtx context.Context, scheduled time.Time) (any, error) { 49 panic("mock pacnic") 50 }, 51 nil, 52 ), 53 ) 54 func() { 55 defer func() { 56 if recovered := recover(); recovered != nil { 57 t.Fatalf("must be recovered") 58 } 59 }() 60 getTrappedTask().Do(context.TODO()) 61 }() 62 }