Test ibc registration permissions

This commit is contained in:
Ethan Frey 2017-07-18 16:19:16 +02:00
parent f1c9697720
commit 3ddcf91303
1 changed files with 87 additions and 2 deletions

View File

@ -1,12 +1,19 @@
package ibc
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/tendermint/light-client/certifiers"
"github.com/tendermint/tmlibs/log"
"github.com/tendermint/basecoin"
"github.com/tendermint/basecoin/errors"
"github.com/tendermint/basecoin/stack"
"github.com/tendermint/basecoin/state"
"github.com/tendermint/light-client/certifiers"
)
type checkErr func(error) bool
@ -23,6 +30,7 @@ func genEmptySeed(keys certifiers.ValKeys, chain string, h int,
return certifiers.Seed{cp, vals}
}
// this tests registration without registrar permissions
func TestIBCRegister(t *testing.T) {
assert := assert.New(t)
@ -60,7 +68,6 @@ func TestIBCRegister(t *testing.T) {
ctx := stack.MockContext("hub", 50)
store := state.NewMemKVStore()
// no registrar here
app := stack.New().Dispatch(stack.WrapHandler(NewHandler()))
for i, tc := range cases {
@ -70,6 +77,84 @@ func TestIBCRegister(t *testing.T) {
}
}
// this tests registration without registrar permissions
func TestIBCRegisterPermissions(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
// the validators we use to make seeds
keys := certifiers.GenValKeys(4)
appHash := []byte{0x17, 0x21, 0x5, 0x1e}
foobar := basecoin.Actor{App: "foo", Address: []byte("bar")}
baz := basecoin.Actor{App: "baz", Address: []byte("bar")}
foobaz := basecoin.Actor{App: "foo", Address: []byte("baz")}
cases := []struct {
seed certifiers.Seed
registrar basecoin.Actor
signer basecoin.Actor
checker checkErr
}{
// no sig, no registrar
{
seed: genEmptySeed(keys, "chain-1", 100, appHash, len(keys)),
checker: noErr,
},
// sig, no registrar
{
seed: genEmptySeed(keys, "chain-2", 100, appHash, len(keys)),
signer: foobaz,
checker: noErr,
},
// registrar, no sig
{
seed: genEmptySeed(keys, "chain-3", 100, appHash, len(keys)),
registrar: foobar,
checker: errors.IsUnauthorizedErr,
},
// registrar, wrong sig
{
seed: genEmptySeed(keys, "chain-4", 100, appHash, len(keys)),
signer: foobaz,
registrar: foobar,
checker: errors.IsUnauthorizedErr,
},
// registrar, wrong sig
{
seed: genEmptySeed(keys, "chain-5", 100, appHash, len(keys)),
signer: baz,
registrar: foobar,
checker: errors.IsUnauthorizedErr,
},
// registrar, proper sig
{
seed: genEmptySeed(keys, "chain-6", 100, appHash, len(keys)),
signer: foobar,
registrar: foobar,
checker: noErr,
},
}
store := state.NewMemKVStore()
app := stack.New().Dispatch(stack.WrapHandler(NewHandler()))
for i, tc := range cases {
// set option specifies the registrar
msg, err := json.Marshal(tc.registrar)
require.Nil(err, "%+v", err)
_, err = app.SetOption(log.NewNopLogger(), store,
NameIBC, OptionRegistrar, string(msg))
require.Nil(err, "%+v", err)
// add permissions to the context
ctx := stack.MockContext("hub", 50).WithPermissions(tc.signer)
tx := RegisterChainTx{tc.seed}.Wrap()
_, err = app.DeliverTx(ctx, store, tx)
assert.True(tc.checker(err), "%d: %+v", i, err)
}
}
func TestIBCUpdate(t *testing.T) {
}