51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package roles_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/tendermint/basecoin"
|
|
"github.com/tendermint/basecoin/modules/roles"
|
|
"github.com/tendermint/basecoin/stack"
|
|
"github.com/tendermint/basecoin/state"
|
|
)
|
|
|
|
func TestCreateRole(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
a := basecoin.Actor{App: "foo", Address: []byte("bar")}
|
|
b := basecoin.Actor{ChainID: "eth", App: "foo", Address: []byte("bar")}
|
|
c := basecoin.Actor{App: "foo", Address: []byte("baz")}
|
|
d := basecoin.Actor{App: "si-ly", Address: []byte("bar")}
|
|
|
|
cases := []struct {
|
|
valid bool
|
|
role string
|
|
min uint32
|
|
sigs []basecoin.Actor
|
|
}{
|
|
{true, "awesome", 1, []basecoin.Actor{a}},
|
|
{true, "cool", 2, []basecoin.Actor{b, c, d}},
|
|
{false, "oops", 3, []basecoin.Actor{a, d}}, // too many
|
|
{false, "ugh", 0, []basecoin.Actor{a, d}}, // too few
|
|
{false, "phew", 1, []basecoin.Actor{}}, // none
|
|
{false, "cool", 1, []basecoin.Actor{c, d}}, // duplicate of existing one
|
|
}
|
|
|
|
h := roles.NewHandler()
|
|
ctx := stack.MockContext("role-chain", 123)
|
|
store := state.NewMemKVStore()
|
|
for i, tc := range cases {
|
|
tx := roles.NewCreateRoleTx([]byte(tc.role), tc.min, tc.sigs)
|
|
_, err := h.CheckTx(ctx, store, tx)
|
|
_, err2 := h.DeliverTx(ctx, store, tx)
|
|
if tc.valid {
|
|
assert.Nil(err, "%d/%s: %+v", i, tc.role, err)
|
|
assert.Nil(err2, "%d/%s: %+v", i, tc.role, err2)
|
|
} else {
|
|
assert.NotNil(err, "%d/%s", i, tc.role)
|
|
assert.NotNil(err2, "%d/%s", i, tc.role)
|
|
}
|
|
}
|
|
}
|