github.com/evdatsion/aphelion-dpos-bft@v0.32.1/libs/common/errors_test.go (about)

     1  package common
     2  
     3  import (
     4  	fmt "fmt"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestErrorPanic(t *testing.T) {
    11  	type pnk struct {
    12  		msg string
    13  	}
    14  
    15  	capturePanic := func() (err Error) {
    16  		defer func() {
    17  			if r := recover(); r != nil {
    18  				err = ErrorWrap(r, "This is the message in ErrorWrap(r, message).")
    19  			}
    20  		}()
    21  		panic(pnk{"something"})
    22  	}
    23  
    24  	var err = capturePanic()
    25  
    26  	assert.Equal(t, pnk{"something"}, err.Data())
    27  	assert.Equal(t, "{something}", fmt.Sprintf("%v", err))
    28  	assert.Contains(t, fmt.Sprintf("%#v", err), "This is the message in ErrorWrap(r, message).")
    29  	assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n    0")
    30  }
    31  
    32  func TestErrorWrapSomething(t *testing.T) {
    33  
    34  	var err = ErrorWrap("something", "formatter%v%v", 0, 1)
    35  
    36  	assert.Equal(t, "something", err.Data())
    37  	assert.Equal(t, "something", fmt.Sprintf("%v", err))
    38  	assert.Regexp(t, `formatter01\n`, fmt.Sprintf("%#v", err))
    39  	assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n    0")
    40  }
    41  
    42  func TestErrorWrapNothing(t *testing.T) {
    43  
    44  	var err = ErrorWrap(nil, "formatter%v%v", 0, 1)
    45  
    46  	assert.Equal(t,
    47  		FmtError{"formatter%v%v", []interface{}{0, 1}},
    48  		err.Data())
    49  	assert.Equal(t, "formatter01", fmt.Sprintf("%v", err))
    50  	assert.Contains(t, fmt.Sprintf("%#v", err), `Data: common.FmtError{format:"formatter%v%v", args:[]interface {}{0, 1}}`)
    51  	assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n    0")
    52  }
    53  
    54  func TestErrorNewError(t *testing.T) {
    55  
    56  	var err = NewError("formatter%v%v", 0, 1)
    57  
    58  	assert.Equal(t,
    59  		FmtError{"formatter%v%v", []interface{}{0, 1}},
    60  		err.Data())
    61  	assert.Equal(t, "formatter01", fmt.Sprintf("%v", err))
    62  	assert.Contains(t, fmt.Sprintf("%#v", err), `Data: common.FmtError{format:"formatter%v%v", args:[]interface {}{0, 1}}`)
    63  	assert.NotContains(t, fmt.Sprintf("%#v", err), "Stack Trace")
    64  }
    65  
    66  func TestErrorNewErrorWithStacktrace(t *testing.T) {
    67  
    68  	var err = NewError("formatter%v%v", 0, 1).Stacktrace()
    69  
    70  	assert.Equal(t,
    71  		FmtError{"formatter%v%v", []interface{}{0, 1}},
    72  		err.Data())
    73  	assert.Equal(t, "formatter01", fmt.Sprintf("%v", err))
    74  	assert.Contains(t, fmt.Sprintf("%#v", err), `Data: common.FmtError{format:"formatter%v%v", args:[]interface {}{0, 1}}`)
    75  	assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n    0")
    76  }
    77  
    78  func TestErrorNewErrorWithTrace(t *testing.T) {
    79  
    80  	var err = NewError("formatter%v%v", 0, 1)
    81  	err.Trace(0, "trace %v", 1)
    82  	err.Trace(0, "trace %v", 2)
    83  	err.Trace(0, "trace %v", 3)
    84  
    85  	assert.Equal(t,
    86  		FmtError{"formatter%v%v", []interface{}{0, 1}},
    87  		err.Data())
    88  	assert.Equal(t, "formatter01", fmt.Sprintf("%v", err))
    89  	assert.Contains(t, fmt.Sprintf("%#v", err), `Data: common.FmtError{format:"formatter%v%v", args:[]interface {}{0, 1}}`)
    90  	dump := fmt.Sprintf("%#v", err)
    91  	assert.NotContains(t, dump, "Stack Trace")
    92  	assert.Regexp(t, `common/errors_test\.go:[0-9]+ - trace 1`, dump)
    93  	assert.Regexp(t, `common/errors_test\.go:[0-9]+ - trace 2`, dump)
    94  	assert.Regexp(t, `common/errors_test\.go:[0-9]+ - trace 3`, dump)
    95  }
    96  
    97  func TestErrorWrapError(t *testing.T) {
    98  	var err1 error = NewError("my message")
    99  	var err2 error = ErrorWrap(err1, "another message")
   100  	assert.Equal(t, err1, err2)
   101  }