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 }