github.com/Finschia/finschia-sdk@v0.48.1/baseapp/recovery_test.go (about) 1 package baseapp 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 // Test that recovery chain produces expected error at specific middleware layer 11 func TestRecoveryChain(t *testing.T) { 12 createError := func(id int) error { 13 return fmt.Errorf("error from id: %d", id) 14 } 15 16 createHandler := func(id int, handle bool) RecoveryHandler { 17 return func(_ interface{}) error { 18 if handle { 19 return createError(id) 20 } 21 return nil 22 } 23 } 24 25 // check recovery chain [1] -> 2 -> 3 26 { 27 mw := newRecoveryMiddleware(createHandler(3, false), nil) 28 mw = newRecoveryMiddleware(createHandler(2, false), mw) 29 mw = newRecoveryMiddleware(createHandler(1, true), mw) 30 receivedErr := processRecovery(nil, mw) 31 32 require.Equal(t, createError(1), receivedErr) 33 } 34 35 // check recovery chain 1 -> [2] -> 3 36 { 37 mw := newRecoveryMiddleware(createHandler(3, false), nil) 38 mw = newRecoveryMiddleware(createHandler(2, true), mw) 39 mw = newRecoveryMiddleware(createHandler(1, false), mw) 40 receivedErr := processRecovery(nil, mw) 41 42 require.Equal(t, createError(2), receivedErr) 43 } 44 45 // check recovery chain 1 -> 2 -> [3] 46 { 47 mw := newRecoveryMiddleware(createHandler(3, true), nil) 48 mw = newRecoveryMiddleware(createHandler(2, false), mw) 49 mw = newRecoveryMiddleware(createHandler(1, false), mw) 50 receivedErr := processRecovery(nil, mw) 51 52 require.Equal(t, createError(3), receivedErr) 53 } 54 55 // check recovery chain 1 -> 2 -> 3 56 { 57 mw := newRecoveryMiddleware(createHandler(3, false), nil) 58 mw = newRecoveryMiddleware(createHandler(2, false), mw) 59 mw = newRecoveryMiddleware(createHandler(1, false), mw) 60 receivedErr := processRecovery(nil, mw) 61 62 require.Nil(t, receivedErr) 63 } 64 }