cosmos-sdk/x/ibc/04-channel/types/genesis_test.go

148 lines
3.5 KiB
Go

package types_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/cosmos/cosmos-sdk/x/ibc/04-channel/types"
)
const (
testPort1 = "firstport"
testPort2 = "secondport"
testConnectionIDA = "connectionidatob"
testChannel1 = "firstchannel"
testChannel2 = "secondchannel"
testChannelOrder = types.ORDERED
testChannelVersion = "1.0"
)
func TestValidateGenesis(t *testing.T) {
counterparty1 := types.NewCounterparty(testPort1, testChannel1)
counterparty2 := types.NewCounterparty(testPort2, testChannel2)
testCases := []struct {
name string
genState types.GenesisState
expPass bool
}{
{
name: "default",
genState: types.DefaultGenesisState(),
expPass: true,
},
{
name: "valid genesis",
genState: types.NewGenesisState(
[]types.IdentifiedChannel{
types.NewIdentifiedChannel(
testPort1, testChannel1, types.NewChannel(
types.INIT, testChannelOrder, counterparty2, []string{testConnectionIDA}, testChannelVersion,
),
),
types.NewIdentifiedChannel(
testPort2, testChannel2, types.NewChannel(
types.INIT, testChannelOrder, counterparty1, []string{testConnectionIDA}, testChannelVersion,
),
),
},
[]types.PacketAckCommitment{
types.NewPacketAckCommitment(testPort2, testChannel2, 1, []byte("ack")),
},
[]types.PacketAckCommitment{
types.NewPacketAckCommitment(testPort1, testChannel1, 1, []byte("commit_hash")),
},
[]types.PacketSequence{
types.NewPacketSequence(testPort1, testChannel1, 1),
},
[]types.PacketSequence{
types.NewPacketSequence(testPort2, testChannel2, 1),
},
[]types.PacketSequence{
types.NewPacketSequence(testPort2, testChannel2, 1),
},
),
expPass: true,
},
{
name: "invalid channel",
genState: types.GenesisState{
Channels: []types.IdentifiedChannel{
types.NewIdentifiedChannel(
testPort1, "(testChannel1)", types.NewChannel(
types.INIT, testChannelOrder, counterparty2, []string{testConnectionIDA}, testChannelVersion,
),
),
},
},
expPass: false,
},
{
name: "invalid ack",
genState: types.GenesisState{
Acknowledgements: []types.PacketAckCommitment{
types.NewPacketAckCommitment(testPort2, testChannel2, 1, nil),
},
},
expPass: false,
},
{
name: "invalid commitment",
genState: types.GenesisState{
Commitments: []types.PacketAckCommitment{
types.NewPacketAckCommitment(testPort1, testChannel1, 1, nil),
},
},
expPass: false,
},
{
name: "invalid send seq",
genState: types.GenesisState{
SendSequences: []types.PacketSequence{
types.NewPacketSequence(testPort1, testChannel1, 0),
},
},
expPass: false,
},
{
name: "invalid recv seq",
genState: types.GenesisState{
RecvSequences: []types.PacketSequence{
types.NewPacketSequence(testPort1, "(testChannel1)", 1),
},
},
expPass: false,
},
{
name: "invalid recv seq 2",
genState: types.GenesisState{
RecvSequences: []types.PacketSequence{
types.NewPacketSequence("(testPort1)", testChannel1, 1),
},
},
expPass: false,
},
{
name: "invalid ack seq",
genState: types.GenesisState{
AckSequences: []types.PacketSequence{
types.NewPacketSequence(testPort1, "(testChannel1)", 1),
},
},
expPass: false,
},
}
for _, tc := range testCases {
tc := tc
err := tc.genState.Validate()
if tc.expPass {
require.NoError(t, err, tc.name)
} else {
require.Error(t, err, tc.name)
}
}
}