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  }