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  }