Test ibc registration permissions
This commit is contained in:
parent
f1c9697720
commit
3ddcf91303
|
@ -1,12 +1,19 @@
|
||||||
package ibc
|
package ibc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"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/stack"
|
||||||
"github.com/tendermint/basecoin/state"
|
"github.com/tendermint/basecoin/state"
|
||||||
"github.com/tendermint/light-client/certifiers"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type checkErr func(error) bool
|
type checkErr func(error) bool
|
||||||
|
@ -23,6 +30,7 @@ func genEmptySeed(keys certifiers.ValKeys, chain string, h int,
|
||||||
return certifiers.Seed{cp, vals}
|
return certifiers.Seed{cp, vals}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this tests registration without registrar permissions
|
||||||
func TestIBCRegister(t *testing.T) {
|
func TestIBCRegister(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
@ -60,7 +68,6 @@ func TestIBCRegister(t *testing.T) {
|
||||||
|
|
||||||
ctx := stack.MockContext("hub", 50)
|
ctx := stack.MockContext("hub", 50)
|
||||||
store := state.NewMemKVStore()
|
store := state.NewMemKVStore()
|
||||||
// no registrar here
|
|
||||||
app := stack.New().Dispatch(stack.WrapHandler(NewHandler()))
|
app := stack.New().Dispatch(stack.WrapHandler(NewHandler()))
|
||||||
|
|
||||||
for i, tc := range cases {
|
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) {
|
func TestIBCUpdate(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue