* testing: refactore Validation and Delegation handling of x/staking This Changeset introduces set of improvements for writing tests. The idea is to create a testing subpackage which will provide functions to make tests more dev-friendly and wrap higher level use-cases. Here is a show-up of of creating a service for staking module for tests. This PR also changes the `x/staking/types.MsgCreateValidator.Pubkey` from string to types.Any. This change motivated the other change to show the pattern I'm describing here. * add validator checks * type change fixes * use deprecated * adding test slashing * new network comment update * working on tests * Fix TestMsgPkDecode test * Add UnpackInterfaces to MsgCreateValidator * Fix tests * Convert bech32 pubkey to proto * Fix test * fix v039/migrate_test/TestMigrate * fix tests * testslashing: rename Service to Helper * file rename * update TestMsgDecode Co-authored-by: blushi <marie.gauthier63@gmail.com> Co-authored-by: Amaury Martiny <amaury.martiny@protonmail.com> Co-authored-by: Cory Levinson <cjlevinson@gmail.com>
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package codec_test
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
"github.com/cosmos/cosmos-sdk/codec/types"
|
|
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
|
)
|
|
|
|
func NewTestInterfaceRegistry() types.InterfaceRegistry {
|
|
registry := types.NewInterfaceRegistry()
|
|
registry.RegisterInterface("Animal", (*testdata.Animal)(nil))
|
|
registry.RegisterImplementations(
|
|
(*testdata.Animal)(nil),
|
|
&testdata.Dog{},
|
|
&testdata.Cat{},
|
|
)
|
|
return registry
|
|
}
|
|
|
|
func TestMarshalAny(t *testing.T) {
|
|
registry := types.NewInterfaceRegistry()
|
|
|
|
cdc := codec.NewProtoCodec(registry)
|
|
|
|
kitty := &testdata.Cat{Moniker: "Kitty"}
|
|
bz, err := codec.MarshalAny(cdc, kitty)
|
|
require.NoError(t, err)
|
|
|
|
var animal testdata.Animal
|
|
|
|
// empty registry should fail
|
|
err = codec.UnmarshalAny(cdc, &animal, bz)
|
|
require.Error(t, err)
|
|
|
|
// wrong type registration should fail
|
|
registry.RegisterImplementations((*testdata.Animal)(nil), &testdata.Dog{})
|
|
err = codec.UnmarshalAny(cdc, &animal, bz)
|
|
require.Error(t, err)
|
|
|
|
// should pass
|
|
registry = NewTestInterfaceRegistry()
|
|
cdc = codec.NewProtoCodec(registry)
|
|
err = codec.UnmarshalAny(cdc, &animal, bz)
|
|
require.NoError(t, err)
|
|
require.Equal(t, kitty, animal)
|
|
|
|
// nil should fail
|
|
registry = NewTestInterfaceRegistry()
|
|
err = codec.UnmarshalAny(cdc, nil, bz)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestMarshalAnyNonProtoErrors(t *testing.T) {
|
|
registry := types.NewInterfaceRegistry()
|
|
cdc := codec.NewProtoCodec(registry)
|
|
|
|
_, err := codec.MarshalAny(cdc, 29)
|
|
require.Error(t, err)
|
|
require.Equal(t, err, errors.New("can't proto marshal int"))
|
|
}
|