cosmos-sdk/stack/recovery_test.go

54 lines
1.2 KiB
Go
Raw Normal View History

2017-06-29 07:09:15 -07:00
package stack
import (
"errors"
"strconv"
"testing"
"github.com/stretchr/testify/assert"
2017-07-06 05:23:38 -07:00
"github.com/tendermint/tmlibs/log"
2017-07-06 05:23:38 -07:00
"github.com/tendermint/basecoin"
"github.com/tendermint/basecoin/state"
2017-06-29 07:09:15 -07:00
)
func TestRecovery(t *testing.T) {
assert := assert.New(t)
// generic args here...
ctx := NewContext("test-chain", 20, log.NewNopLogger())
2017-07-06 05:23:38 -07:00
store := state.NewMemKVStore()
2017-06-29 07:09:15 -07:00
tx := basecoin.Tx{}
cases := []struct {
msg string // what to send to panic
err error // what to send to panic
expected string // expected text in panic
}{
{"buzz", nil, "buzz"},
{"", errors.New("some text"), "some text"},
2017-06-29 07:09:15 -07:00
{"text", errors.New("error"), "error"},
}
for idx, tc := range cases {
i := strconv.Itoa(idx)
fail := PanicHandler{Msg: tc.msg, Err: tc.err}
rec := Recovery{}
2017-06-29 07:15:49 -07:00
app := New(rec).Use(fail)
2017-06-29 07:09:15 -07:00
// make sure check returns error, not a panic crash
_, err := app.CheckTx(ctx, store, tx)
if assert.NotNil(err, i) {
assert.Equal(tc.expected, err.Error(), i)
}
// make sure deliver returns error, not a panic crash
_, err = app.DeliverTx(ctx, store, tx)
if assert.NotNil(err, i) {
assert.Equal(tc.expected, err.Error(), i)
}
}
}