From e09c8d9360b133dbf2ef6386564ba272e7051ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Wed, 26 Aug 2020 14:11:31 +0200 Subject: [PATCH] Fix AcknowledgePacket and AcknowledgementExecuted bug + update testing pkg (#7170) * upstream cosm wasm testing pkg fixes * fix bug, tests and undo rand addition * fix lint * go mod tidy --- go.mod | 2 + go.sum | 7 ++ x/ibc/03-connection/keeper/handshake_test.go | 2 +- x/ibc/04-channel/keeper/grpc_query_test.go | 20 ++-- x/ibc/04-channel/keeper/handshake_test.go | 110 +++++++++---------- x/ibc/04-channel/keeper/keeper_test.go | 20 ++-- x/ibc/04-channel/keeper/packet.go | 8 +- x/ibc/04-channel/keeper/packet_test.go | 60 +++++----- x/ibc/04-channel/keeper/timeout_test.go | 30 ++--- x/ibc/handler_test.go | 22 ++-- x/ibc/testing/chain.go | 64 ++++++----- x/ibc/testing/coordinator.go | 99 +++++++++-------- x/ibc/testing/solomachine.go | 2 +- x/ibc/testing/types.go | 31 +++--- 14 files changed, 256 insertions(+), 221 deletions(-) diff --git a/go.mod b/go.mod index 76105464a6..f10eee221e 100644 --- a/go.mod +++ b/go.mod @@ -24,6 +24,8 @@ require ( github.com/hashicorp/golang-lru v0.5.4 github.com/magiconair/properties v1.8.2 github.com/mattn/go-isatty v0.0.12 + github.com/onsi/ginkgo v1.8.0 // indirect + github.com/onsi/gomega v1.5.0 // indirect github.com/otiai10/copy v1.2.0 github.com/pelletier/go-toml v1.8.0 // indirect github.com/pkg/errors v0.9.1 diff --git a/go.sum b/go.sum index 512a0c0404..85c103b1ec 100644 --- a/go.sum +++ b/go.sum @@ -388,8 +388,12 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -775,14 +779,17 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= diff --git a/x/ibc/03-connection/keeper/handshake_test.go b/x/ibc/03-connection/keeper/handshake_test.go index 8df856ffc1..bbb2e12895 100644 --- a/x/ibc/03-connection/keeper/handshake_test.go +++ b/x/ibc/03-connection/keeper/handshake_test.go @@ -535,7 +535,7 @@ func (suite *KeeperTestSuite) TestConnOpenConfirm() { tc.malleate() connA := suite.chainA.GetFirstTestConnection(clientA, clientB) - connB := suite.chainA.GetFirstTestConnection(clientB, clientA) + connB := suite.chainB.GetFirstTestConnection(clientB, clientA) connectionKey := host.KeyConnection(connA.ID) proofAck, proofHeight := suite.chainA.QueryProof(connectionKey) diff --git a/x/ibc/04-channel/keeper/grpc_query_test.go b/x/ibc/04-channel/keeper/grpc_query_test.go index 3bc3a4f2a7..91104d18ae 100644 --- a/x/ibc/04-channel/keeper/grpc_query_test.go +++ b/x/ibc/04-channel/keeper/grpc_query_test.go @@ -64,7 +64,7 @@ func (suite *KeeperTestSuite) TestQueryChannel() { func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) // init channel - channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) expChannel = suite.chainA.GetChannel(channelA) @@ -134,7 +134,7 @@ func (suite *KeeperTestSuite) TestQueryChannels() { } // channel1 is second channel on first connection on chainA - testchannel1, _ := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA0, connB0, types.ORDERED) + testchannel1, _ := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA0, connB0, types.ORDERED) counterparty1 := types.Counterparty{ PortId: connB0.Channels[1].PortID, ChannelId: connB0.Channels[1].ID, @@ -142,11 +142,11 @@ func (suite *KeeperTestSuite) TestQueryChannels() { channel0 := types.NewChannel( types.OPEN, types.UNORDERED, - counterparty0, []string{connA0.ID}, ibctesting.ChannelVersion, + counterparty0, []string{connA0.ID}, testchannel0.Version, ) channel1 := types.NewChannel( types.OPEN, types.ORDERED, - counterparty1, []string{connA0.ID}, ibctesting.ChannelVersion, + counterparty1, []string{connA0.ID}, testchannel1.Version, ) idCh0 := types.NewIdentifiedChannel(testchannel0.PortID, testchannel0.ID, channel0) @@ -225,7 +225,7 @@ func (suite *KeeperTestSuite) TestQueryConnectionChannels() { } // channel1 is second channel on first connection on chainA - testchannel1, _ := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA0, connB0, types.ORDERED) + testchannel1, _ := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA0, connB0, types.ORDERED) counterparty1 := types.Counterparty{ PortId: connB0.Channels[1].PortID, ChannelId: connB0.Channels[1].ID, @@ -233,11 +233,11 @@ func (suite *KeeperTestSuite) TestQueryConnectionChannels() { channel0 := types.NewChannel( types.OPEN, types.UNORDERED, - counterparty0, []string{connA0.ID}, ibctesting.ChannelVersion, + counterparty0, []string{connA0.ID}, testchannel0.Version, ) channel1 := types.NewChannel( types.OPEN, types.ORDERED, - counterparty1, []string{connA0.ID}, ibctesting.ChannelVersion, + counterparty1, []string{connA0.ID}, testchannel1.Version, ) idCh0 := types.NewIdentifiedChannel(testchannel0.PortID, testchannel0.ID, channel0) @@ -246,7 +246,7 @@ func (suite *KeeperTestSuite) TestQueryConnectionChannels() { expChannels = []*types.IdentifiedChannel{&idCh0, &idCh1} req = &types.QueryConnectionChannelsRequest{ - Connection: connB0.ID, + Connection: connA0.ID, Pagination: &query.PageRequest{ Key: nil, Limit: 2, @@ -379,7 +379,7 @@ func (suite *KeeperTestSuite) TestQueryChannelClientState() { func() { clientA, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) // init channel - channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) expClientState := suite.chainA.GetClientState(clientA) @@ -502,7 +502,7 @@ func (suite *KeeperTestSuite) TestQueryChannelConsensusState() { func() { clientA, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) // init channel - channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) clientState := suite.chainA.GetClientState(clientA) diff --git a/x/ibc/04-channel/keeper/handshake_test.go b/x/ibc/04-channel/keeper/handshake_test.go index 3945b903f8..836c27f808 100644 --- a/x/ibc/04-channel/keeper/handshake_test.go +++ b/x/ibc/04-channel/keeper/handshake_test.go @@ -33,8 +33,8 @@ func (suite *KeeperTestSuite) TestChanOpenInit() { {"success", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) features = []string{"ORDER_ORDERED", "ORDER_UNORDERED"} - suite.chainA.CreatePortCapability(connA.NextTestChannel().PortID) - portCap = suite.chainA.GetPortCapability(connA.NextTestChannel().PortID) + suite.chainA.CreatePortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainA.GetPortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) }, true}, {"channel already exists", func() { _, _, connA, connB, _, _ = suite.coordinator.Setup(suite.chainA, suite.chainB) @@ -76,8 +76,8 @@ func (suite *KeeperTestSuite) TestChanOpenInit() { connA.ID, conn, ) features = []string{"ORDER_ORDERED", "ORDER_UNORDERED"} - suite.chainA.CreatePortCapability(connA.NextTestChannel().PortID) - portCap = suite.chainA.GetPortCapability(connA.NextTestChannel().PortID) + suite.chainA.CreatePortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainA.GetPortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) }, false}, {"connection does not support ORDERED channels", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) @@ -95,8 +95,8 @@ func (suite *KeeperTestSuite) TestChanOpenInit() { ) // NOTE: Opening UNORDERED channels is still expected to pass but ORDERED channels should fail features = []string{"ORDER_UNORDERED"} - suite.chainA.CreatePortCapability(connA.NextTestChannel().PortID) - portCap = suite.chainA.GetPortCapability(connA.NextTestChannel().PortID) + suite.chainA.CreatePortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainA.GetPortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) }, true}, } @@ -108,12 +108,12 @@ func (suite *KeeperTestSuite) TestChanOpenInit() { suite.SetupTest() // reset tc.malleate() - counterparty := types.NewCounterparty(connB.FirstOrNextTestChannel().PortID, connB.FirstOrNextTestChannel().ID) - channelA := connA.FirstOrNextTestChannel() + counterparty := types.NewCounterparty(connB.FirstOrNextTestChannel(ibctesting.TransferPort).PortID, connB.FirstOrNextTestChannel(ibctesting.TransferPort).ID) + channelA := connA.FirstOrNextTestChannel(ibctesting.TransferPort) cap, err := suite.chainA.App.IBCKeeper.ChannelKeeper.ChanOpenInit( suite.chainA.GetContext(), order, []string{connA.ID}, - channelA.PortID, channelA.ID, portCap, counterparty, ibctesting.ChannelVersion, + channelA.PortID, channelA.ID, portCap, counterparty, channelA.Version, ) // check if order is supported by channel to determine expected behaviour @@ -159,16 +159,16 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { testCases := []testCase{ {"success", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) - suite.chainB.CreatePortCapability(connB.NextTestChannel().PortID) - portCap = suite.chainB.GetPortCapability(connB.NextTestChannel().PortID) + suite.chainB.CreatePortCapability(connB.NextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainB.GetPortCapability(connB.NextTestChannel(ibctesting.TransferPort).PortID) }, true}, {"previous channel with invalid state", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) // make previous channel have wrong ordering - suite.coordinator.ChanOpenInit(suite.chainB, suite.chainA, connB, connA, types.UNORDERED) + suite.coordinator.ChanOpenInit(suite.chainB, suite.chainA, connB, connA, ibctesting.TransferPort, ibctesting.TransferPort, types.UNORDERED) }, false}, {"connection doesn't exist", func() { // any non-nil values of connA and connB are acceptable @@ -176,14 +176,14 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { suite.Require().NotNil(connB) // pass capability check - suite.chainB.CreatePortCapability(connB.FirstOrNextTestChannel().PortID) - portCap = suite.chainB.GetPortCapability(connB.FirstOrNextTestChannel().PortID) + suite.chainB.CreatePortCapability(connB.FirstOrNextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainB.GetPortCapability(connB.FirstOrNextTestChannel(ibctesting.TransferPort).PortID) }, false}, {"connection is not OPEN", func() { clientA, clientB := suite.coordinator.SetupClients(suite.chainA, suite.chainB, clientexported.Tendermint) // pass capability check - suite.chainB.CreatePortCapability(connB.FirstOrNextTestChannel().PortID) - portCap = suite.chainB.GetPortCapability(connB.FirstOrNextTestChannel().PortID) + suite.chainB.CreatePortCapability(connB.FirstOrNextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainB.GetPortCapability(connB.FirstOrNextTestChannel(ibctesting.TransferPort).PortID) var err error connB, connA, err = suite.coordinator.ConnOpenInit(suite.chainB, suite.chainA, clientB, clientA) @@ -191,27 +191,27 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { }, false}, {"consensus state not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) - suite.chainB.CreatePortCapability(connB.NextTestChannel().PortID) - portCap = suite.chainB.GetPortCapability(connB.NextTestChannel().PortID) + suite.chainB.CreatePortCapability(connB.NextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainB.GetPortCapability(connB.NextTestChannel(ibctesting.TransferPort).PortID) heightDiff = 3 // consensus state doesn't exist at this height }, false}, {"channel verification failed", func() { // not creating a channel on chainA will result in an invalid proof of existence _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - portCap = suite.chainB.GetPortCapability(connB.NextTestChannel().PortID) + portCap = suite.chainB.GetPortCapability(connB.NextTestChannel(ibctesting.TransferPort).PortID) }, false}, {"port capability not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) portCap = capabilitytypes.NewCapability(3) }, false}, {"connection version not negotiated", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) // modify connB versions conn := suite.chainB.GetConnection(connB) @@ -224,12 +224,12 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { suite.chainB.GetContext(), connB.ID, conn, ) - suite.chainB.CreatePortCapability(connB.NextTestChannel().PortID) - portCap = suite.chainB.GetPortCapability(connB.NextTestChannel().PortID) + suite.chainB.CreatePortCapability(connB.NextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainB.GetPortCapability(connB.NextTestChannel(ibctesting.TransferPort).PortID) }, false}, {"connection does not support ORDERED channels", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) // modify connA versions to only support UNORDERED channels conn := suite.chainA.GetConnection(connA) @@ -242,8 +242,8 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { suite.chainA.GetContext(), connA.ID, conn, ) - suite.chainA.CreatePortCapability(connA.NextTestChannel().PortID) - portCap = suite.chainA.GetPortCapability(connA.NextTestChannel().PortID) + suite.chainA.CreatePortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) + portCap = suite.chainA.GetPortCapability(connA.NextTestChannel(ibctesting.TransferPort).PortID) }, false}, } @@ -254,15 +254,15 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { heightDiff = 0 // must be explicitly changed in malleate tc.malleate() - counterparty := types.NewCounterparty(connA.FirstOrNextTestChannel().PortID, connA.FirstOrNextTestChannel().ID) - channelB := connB.FirstOrNextTestChannel() + counterparty := types.NewCounterparty(connA.FirstOrNextTestChannel(ibctesting.TransferPort).PortID, connA.FirstOrNextTestChannel(ibctesting.TransferPort).ID) + channelB := connB.FirstOrNextTestChannel(ibctesting.TransferPort) channelKey := host.KeyChannel(counterparty.PortId, counterparty.ChannelId) proof, proofHeight := suite.chainA.QueryProof(channelKey) cap, err := suite.chainB.App.IBCKeeper.ChannelKeeper.ChanOpenTry( suite.chainB.GetContext(), types.ORDERED, []string{connB.ID}, - channelB.PortID, channelB.ID, portCap, counterparty, ibctesting.ChannelVersion, ibctesting.ChannelVersion, + channelB.PortID, channelB.ID, portCap, counterparty, channelB.Version, connA.FirstOrNextTestChannel(ibctesting.TransferPort).Version, proof, proofHeight+heightDiff, ) @@ -297,7 +297,7 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { testCases := []testCase{ {"success", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -314,7 +314,7 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { }, false}, {"connection not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -335,7 +335,7 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { suite.Require().NoError(err) // create channel in init - channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) suite.chainA.CreateChannelCapability(channelA.PortID, channelA.ID) @@ -343,7 +343,7 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { }, false}, {"consensus state not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -356,7 +356,7 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { {"channel verification failed", func() { // chainB is INIT, chainA in TRYOPEN _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelB, channelA, err := suite.coordinator.ChanOpenInit(suite.chainB, suite.chainA, connB, connA, types.ORDERED) + channelB, channelA, err := suite.coordinator.ChanOpenInit(suite.chainB, suite.chainA, connB, connA, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainA, suite.chainB, channelA, channelB, connA, types.ORDERED) @@ -366,7 +366,7 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { }, false}, {"channel capability not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -383,14 +383,14 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { tc.malleate() - channelA := connA.FirstOrNextTestChannel() - channelB := connB.FirstOrNextTestChannel() + channelA := connA.FirstOrNextTestChannel(ibctesting.TransferPort) + channelB := connB.FirstOrNextTestChannel(ibctesting.TransferPort) channelKey := host.KeyChannel(channelB.PortID, channelB.ID) proof, proofHeight := suite.chainB.QueryProof(channelKey) err := suite.chainA.App.IBCKeeper.ChannelKeeper.ChanOpenAck( - suite.chainA.GetContext(), channelA.PortID, channelA.ID, channelCap, ibctesting.ChannelVersion, + suite.chainA.GetContext(), channelA.PortID, channelA.ID, channelCap, channelB.Version, proof, proofHeight+heightDiff, ) @@ -416,7 +416,7 @@ func (suite *KeeperTestSuite) TestChanOpenConfirm() { testCases := []testCase{ {"success", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -436,7 +436,7 @@ func (suite *KeeperTestSuite) TestChanOpenConfirm() { }, false}, {"connection not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -458,13 +458,13 @@ func (suite *KeeperTestSuite) TestChanOpenConfirm() { var err error connA, connB, err = suite.coordinator.ConnOpenInit(suite.chainB, suite.chainA, clientB, clientA) suite.Require().NoError(err) - channelB := connB.FirstOrNextTestChannel() + channelB := connB.FirstOrNextTestChannel(ibctesting.TransferPort) suite.chainB.CreateChannelCapability(channelB.PortID, channelB.ID) channelCap = suite.chainB.GetChannelCapability(channelB.PortID, channelB.ID) }, false}, {"consensus state not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -480,7 +480,7 @@ func (suite *KeeperTestSuite) TestChanOpenConfirm() { {"channel verification failed", func() { // chainA is INIT, chainB in TRYOPEN _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -490,7 +490,7 @@ func (suite *KeeperTestSuite) TestChanOpenConfirm() { }, false}, {"channel capability not found", func() { _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) err = suite.coordinator.ChanOpenTry(suite.chainB, suite.chainA, channelB, channelA, connB, types.ORDERED) @@ -511,8 +511,8 @@ func (suite *KeeperTestSuite) TestChanOpenConfirm() { tc.malleate() - channelA := connA.FirstOrNextTestChannel() - channelB := connB.FirstOrNextTestChannel() + channelA := connA.FirstOrNextTestChannel(ibctesting.TransferPort) + channelB := connB.FirstOrNextTestChannel(ibctesting.TransferPort) channelKey := host.KeyChannel(channelA.PortID, channelA.ID) proof, proofHeight := suite.chainA.QueryProof(channelKey) @@ -550,7 +550,7 @@ func (suite *KeeperTestSuite) TestChanCloseInit() { // any non-nil values work for connections suite.Require().NotNil(connA) suite.Require().NotNil(connB) - channelA := connA.FirstOrNextTestChannel() + channelA := connA.FirstOrNextTestChannel(ibctesting.TransferPort) // ensure channel capability check passes suite.chainA.CreateChannelCapability(channelA.PortID, channelA.ID) @@ -583,7 +583,7 @@ func (suite *KeeperTestSuite) TestChanCloseInit() { suite.Require().NoError(err) // create channel in init - channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) // ensure channel capability check passes suite.chainA.CreateChannelCapability(channelA.PortID, channelA.ID) @@ -602,7 +602,7 @@ func (suite *KeeperTestSuite) TestChanCloseInit() { tc.malleate() - channelA := connA.FirstOrNextTestChannel() + channelA := connA.FirstOrNextTestChannel(ibctesting.TransferPort) err := suite.chainA.App.IBCKeeper.ChannelKeeper.ChanCloseInit( suite.chainA.GetContext(), channelA.PortID, channelA.ID, channelCap, @@ -642,7 +642,7 @@ func (suite *KeeperTestSuite) TestChanCloseConfirm() { // any non-nil values work for connections suite.Require().NotNil(connA) suite.Require().NotNil(connB) - channelB = connB.FirstOrNextTestChannel() + channelB = connB.FirstOrNextTestChannel(ibctesting.TransferPort) // ensure channel capability check passes suite.chainB.CreateChannelCapability(channelB.PortID, channelB.ID) @@ -672,7 +672,7 @@ func (suite *KeeperTestSuite) TestChanCloseConfirm() { suite.Require().NoError(err) // create channel in init - channelB, _, err := suite.coordinator.ChanOpenInit(suite.chainB, suite.chainA, connB, connA, types.ORDERED) + channelB, _, err := suite.coordinator.ChanOpenInit(suite.chainB, suite.chainA, connB, connA, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.Require().NoError(err) // ensure channel capability check passes @@ -712,8 +712,8 @@ func (suite *KeeperTestSuite) TestChanCloseConfirm() { tc.malleate() - channelA = connA.FirstOrNextTestChannel() - channelB = connB.FirstOrNextTestChannel() + channelA = connA.FirstOrNextTestChannel(ibctesting.TransferPort) + channelB = connB.FirstOrNextTestChannel(ibctesting.TransferPort) channelKey := host.KeyChannel(channelA.PortID, channelA.ID) proof, proofHeight := suite.chainA.QueryProof(channelKey) diff --git a/x/ibc/04-channel/keeper/keeper_test.go b/x/ibc/04-channel/keeper/keeper_test.go index c3ab81a2da..ca0a146f8e 100644 --- a/x/ibc/04-channel/keeper/keeper_test.go +++ b/x/ibc/04-channel/keeper/keeper_test.go @@ -40,12 +40,12 @@ func (suite *KeeperTestSuite) TestSetChannel() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) // check for channel to be created on chainB - channelA := connA.NextTestChannel() + channelA := connA.NextTestChannel(ibctesting.TransferPort) _, found := suite.chainA.App.IBCKeeper.ChannelKeeper.GetChannel(suite.chainA.GetContext(), channelA.PortID, channelA.ID) suite.False(found) // init channel - channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.TransferPort, ibctesting.TransferPort, types.ORDERED) suite.NoError(err) storedChannel, found := suite.chainA.App.IBCKeeper.ChannelKeeper.GetChannel(suite.chainA.GetContext(), channelA.PortID, channelA.ID) @@ -68,7 +68,7 @@ func (suite KeeperTestSuite) TestGetAllChannels() { } // channel1 is second channel on first connection on chainA - testchannel1, _ := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA0, connB0, types.ORDERED) + testchannel1, _ := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA0, connB0, types.ORDERED) counterparty1 := types.Counterparty{ PortId: connB0.Channels[1].PortID, ChannelId: connB0.Channels[1].ID, @@ -77,7 +77,7 @@ func (suite KeeperTestSuite) TestGetAllChannels() { connA1, connB1 := suite.coordinator.CreateConnection(suite.chainA, suite.chainB, clientA, clientB) // channel2 is on a second connection on chainA - testchannel2, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA1, connB1, types.UNORDERED) + testchannel2, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA1, connB1, ibctesting.TransferPort, ibctesting.TransferPort, types.UNORDERED) suite.Require().NoError(err) counterparty2 := types.Counterparty{ @@ -87,15 +87,15 @@ func (suite KeeperTestSuite) TestGetAllChannels() { channel0 := types.NewChannel( types.OPEN, types.UNORDERED, - counterparty0, []string{connB0.ID}, ibctesting.ChannelVersion, + counterparty0, []string{connA0.ID}, testchannel0.Version, ) channel1 := types.NewChannel( types.OPEN, types.ORDERED, - counterparty1, []string{connB0.ID}, ibctesting.ChannelVersion, + counterparty1, []string{connA0.ID}, testchannel1.Version, ) channel2 := types.NewChannel( types.INIT, types.UNORDERED, - counterparty2, []string{connB1.ID}, ibctesting.ChannelVersion, + counterparty2, []string{connA1.ID}, testchannel2.Version, ) expChannels := []types.IdentifiedChannel{ @@ -115,7 +115,7 @@ func (suite KeeperTestSuite) TestGetAllChannels() { // tests their retrieval. func (suite KeeperTestSuite) TestGetAllSequences() { _, _, connA, connB, channelA0, _ := suite.coordinator.Setup(suite.chainA, suite.chainB) - channelA1, _ := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.UNORDERED) + channelA1, _ := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.UNORDERED) seq1 := types.NewPacketSequence(channelA0.PortID, channelA0.ID, 1) seq2 := types.NewPacketSequence(channelA0.PortID, channelA0.ID, 2) @@ -148,7 +148,7 @@ func (suite KeeperTestSuite) TestGetAllSequences() { // channels on chain A and tests their retrieval. func (suite KeeperTestSuite) TestGetAllCommitmentsAcks() { _, _, connA, connB, channelA0, _ := suite.coordinator.Setup(suite.chainA, suite.chainB) - channelA1, _ := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.UNORDERED) + channelA1, _ := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.UNORDERED) // channel 0 acks ack1 := types.NewPacketAckCommitment(channelA0.PortID, channelA0.ID, 1, []byte("ack")) @@ -240,7 +240,7 @@ func (suite *KeeperTestSuite) TestGetAllPacketCommitmentsAtChannel() { _, _, connA, connB, channelA, _ := suite.coordinator.Setup(suite.chainA, suite.chainB) // create second channel - channelA1, _ := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.UNORDERED) + channelA1, _ := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.UNORDERED) ctxA := suite.chainA.GetContext() expectedSeqs := make(map[uint64]bool) diff --git a/x/ibc/04-channel/keeper/packet.go b/x/ibc/04-channel/keeper/packet.go index e1fa6f9a8c..0e4779f92e 100644 --- a/x/ibc/04-channel/keeper/packet.go +++ b/x/ibc/04-channel/keeper/packet.go @@ -403,11 +403,11 @@ func (k Keeper) AcknowledgePacket( // assert packets acknowledged in order if channel.Ordering == types.ORDERED { - nextSequenceAck, found := k.GetNextSequenceAck(ctx, packet.GetDestPort(), packet.GetDestChannel()) + nextSequenceAck, found := k.GetNextSequenceAck(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) if !found { return sdkerrors.Wrapf( types.ErrSequenceAckNotFound, - "destination port: %s, destination channel: %s", packet.GetDestPort(), packet.GetDestChannel(), + "source port: %s, source channel: %s", packet.GetSourcePort(), packet.GetSourceChannel(), ) } @@ -452,11 +452,11 @@ func (k Keeper) AcknowledgementExecuted( // increment NextSequenceAck if channel.Ordering == types.ORDERED { - nextSequenceAck, found := k.GetNextSequenceAck(ctx, packet.GetDestPort(), packet.GetDestChannel()) + nextSequenceAck, found := k.GetNextSequenceAck(ctx, packet.GetSourcePort(), packet.GetSourceChannel()) if !found { return sdkerrors.Wrapf( types.ErrSequenceAckNotFound, - "destination port: %s, destination channel: %s", packet.GetDestPort(), packet.GetDestChannel(), + "source port: %s, source channel: %s", packet.GetSourcePort(), packet.GetSourceChannel(), ) } diff --git a/x/ibc/04-channel/keeper/packet_test.go b/x/ibc/04-channel/keeper/packet_test.go index 77db397646..ec9dbca184 100644 --- a/x/ibc/04-channel/keeper/packet_test.go +++ b/x/ibc/04-channel/keeper/packet_test.go @@ -43,7 +43,7 @@ func (suite *KeeperTestSuite) TestSendPacket() { }, true}, {"success: ORDERED channel", func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) channelCap = suite.chainA.GetChannelCapability(channelA.PortID, channelA.ID) }, true}, @@ -55,7 +55,7 @@ func (suite *KeeperTestSuite) TestSendPacket() { }, false}, {"sending packet out of order on ORDERED channel", func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 5, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) channelCap = suite.chainA.GetChannelCapability(channelA.PortID, channelA.ID) }, false}, @@ -96,7 +96,7 @@ func (suite *KeeperTestSuite) TestSendPacket() { suite.chainA.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainA.GetContext(), channelA.PortID, channelA.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, channelA.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) suite.chainA.CreateChannelCapability(channelA.PortID, channelA.ID) @@ -114,7 +114,7 @@ func (suite *KeeperTestSuite) TestSendPacket() { suite.chainA.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainA.GetContext(), channelA.PortID, channelA.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, channelA.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) suite.chainA.CreateChannelCapability(channelA.PortID, channelA.ID) @@ -151,14 +151,14 @@ func (suite *KeeperTestSuite) TestSendPacket() { }, false}, {"next sequence send not found", func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA := connA.NextTestChannel() - channelB := connB.NextTestChannel() + channelA := connA.NextTestChannel(ibctesting.TransferPort) + channelB := connB.NextTestChannel(ibctesting.TransferPort) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) // manually creating channel prevents next sequence from being set suite.chainA.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainA.GetContext(), channelA.PortID, channelA.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connA.ID}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connA.ID}, channelA.Version), ) suite.chainA.CreateChannelCapability(channelA.PortID, channelA.ID) channelCap = suite.chainA.GetChannelCapability(channelA.PortID, channelA.ID) @@ -206,7 +206,7 @@ func (suite *KeeperTestSuite) TestRecvPacket() { testCases := []testCase{ {"success: ORDERED channel", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.Require().NoError(err) @@ -234,7 +234,7 @@ func (suite *KeeperTestSuite) TestRecvPacket() { }, true}, {"out of order packet failure with ORDERED channel", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) // send 2 packets @@ -275,7 +275,7 @@ func (suite *KeeperTestSuite) TestRecvPacket() { suite.chainB.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainB.GetContext(), channelB.PortID, channelB.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connIDB}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connIDB}, channelB.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) }, false}, @@ -285,13 +285,13 @@ func (suite *KeeperTestSuite) TestRecvPacket() { connB, connA, err := suite.coordinator.ConnOpenInit(suite.chainB, suite.chainA, clientB, clientA) suite.Require().NoError(err) - channelA := connA.NextTestChannel() - channelB := connB.NextTestChannel() + channelA := connA.NextTestChannel(ibctesting.TransferPort) + channelB := connB.NextTestChannel(ibctesting.TransferPort) // pass channel check suite.chainB.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainB.GetContext(), channelB.PortID, channelB.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connB.ID}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connB.ID}, channelB.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) }, false}, @@ -314,14 +314,14 @@ func (suite *KeeperTestSuite) TestRecvPacket() { }, false}, {"next receive sequence is not found", func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA := connA.NextTestChannel() - channelB := connB.NextTestChannel() + channelA := connA.NextTestChannel(ibctesting.TransferPort) + channelB := connB.NextTestChannel(ibctesting.TransferPort) // manually creating channel prevents next recv sequence from being set suite.chainB.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainB.GetContext(), channelB.PortID, channelB.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connB.ID}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connB.ID}, channelB.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) @@ -376,7 +376,7 @@ func (suite *KeeperTestSuite) TestPacketExecuted() { }, true}, {"success: ORDERED", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) channelCap = suite.chainB.GetChannelCapability(channelB.PortID, channelB.ID) @@ -396,21 +396,21 @@ func (suite *KeeperTestSuite) TestPacketExecuted() { }, false}, {"next sequence receive not found", func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA := connA.NextTestChannel() - channelB := connB.NextTestChannel() + channelA := connA.NextTestChannel(ibctesting.TransferPort) + channelB := connB.NextTestChannel(ibctesting.TransferPort) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) // manually creating channel prevents next sequence receive from being set suite.chainB.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainB.GetContext(), channelB.PortID, channelB.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connB.ID}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connB.ID}, channelB.Version), ) suite.chainB.CreateChannelCapability(channelB.PortID, channelB.ID) channelCap = suite.chainB.GetChannelCapability(channelB.PortID, channelB.ID) }, false}, {"capability not found", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -458,7 +458,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { testCases := []testCase{ {"success on ordered channel", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) // create packet commitment err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -510,7 +510,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { suite.chainB.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainB.GetContext(), channelB.PortID, channelB.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connIDB}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelA.PortID, channelA.ID), []string{connIDB}, channelB.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) }, false}, @@ -520,13 +520,13 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { connA, connB, err := suite.coordinator.ConnOpenInit(suite.chainA, suite.chainB, clientA, clientB) suite.Require().NoError(err) - channelA := connA.NextTestChannel() - channelB := connB.NextTestChannel() + channelA := connA.NextTestChannel(ibctesting.TransferPort) + channelB := connB.NextTestChannel(ibctesting.TransferPort) // pass channel check suite.chainA.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainA.GetContext(), channelA.PortID, channelA.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connA.ID}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connA.ID}, channelA.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) }, false}, @@ -545,14 +545,14 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { }, false}, {"next ack sequence not found", func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA := connA.NextTestChannel() - channelB := connB.NextTestChannel() + channelA := connA.NextTestChannel(ibctesting.TransferPort) + channelB := connB.NextTestChannel(ibctesting.TransferPort) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) // manually creating channel prevents next sequence acknowledgement from being set suite.chainA.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainA.GetContext(), channelA.PortID, channelA.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connA.ID}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connA.ID}, channelA.Version), ) // manually set packet commitment suite.chainA.App.IBCKeeper.ChannelKeeper.SetPacketCommitment(suite.chainA.GetContext(), channelA.PortID, channelA.ID, packet.GetSequence(), ibctesting.TestHash) @@ -562,7 +562,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { }, false}, {"next ack sequence mismatch", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) // create packet commitment err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) diff --git a/x/ibc/04-channel/keeper/timeout_test.go b/x/ibc/04-channel/keeper/timeout_test.go index dfbcdfe2ad..83040b60c6 100644 --- a/x/ibc/04-channel/keeper/timeout_test.go +++ b/x/ibc/04-channel/keeper/timeout_test.go @@ -25,7 +25,7 @@ func (suite *KeeperTestSuite) TestTimeoutPacket() { ordered = true clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) // need to update chainA's client representing chainB to prove missing ack @@ -69,13 +69,13 @@ func (suite *KeeperTestSuite) TestTimeoutPacket() { suite.chainA.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainA.GetContext(), channelA.PortID, channelA.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, channelA.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) }, false}, {"timeout", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, clientexported.Tendermint) @@ -85,14 +85,14 @@ func (suite *KeeperTestSuite) TestTimeoutPacket() { nextSeqRecv = 2 clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, clientexported.Tendermint) }, false}, {"packet hasn't been sent", func() { clientA, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, clientexported.Tendermint) }, false}, @@ -101,7 +101,7 @@ func (suite *KeeperTestSuite) TestTimeoutPacket() { ordered = false clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), disabledTimeoutTimestamp) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, clientexported.Tendermint) @@ -160,7 +160,7 @@ func (suite *KeeperTestSuite) TestTimeoutExecuted() { testCases := []testCase{ {"success ORDERED", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -173,7 +173,7 @@ func (suite *KeeperTestSuite) TestTimeoutExecuted() { }, false}, {"incorrect capability", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -215,7 +215,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { {"success: ORDERED", func() { ordered = true clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.coordinator.SetChannelClosed(suite.chainB, suite.chainA, channelB) @@ -259,7 +259,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { suite.chainA.App.IBCKeeper.ChannelKeeper.SetChannel( suite.chainA.GetContext(), channelA.PortID, channelA.ID, - types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, ibctesting.ChannelVersion), + types.NewChannel(types.OPEN, types.ORDERED, types.NewCounterparty(channelB.PortID, channelB.ID), []string{connIDA}, channelA.Version), ) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) @@ -269,7 +269,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { }, false}, {"packet hasn't been sent", func() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) chanCap = suite.chainA.GetChannelCapability(channelA.PortID, channelA.ID) }, false}, @@ -277,7 +277,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { nextSeqRecv = 2 ordered = true clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.coordinator.SetChannelClosed(suite.chainB, suite.chainA, channelB) @@ -289,7 +289,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { {"channel verification failed", func() { ordered = true _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) chanCap = suite.chainA.GetChannelCapability(channelA.PortID, channelA.ID) @@ -298,7 +298,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { // set ordered to false providing the wrong proof for ORDERED case ordered = false clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.coordinator.SetChannelClosed(suite.chainB, suite.chainA, channelB) @@ -318,7 +318,7 @@ func (suite *KeeperTestSuite) TestTimeoutOnClose() { {"channel capability not found", func() { ordered = true clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) suite.coordinator.SetChannelClosed(suite.chainB, suite.chainA, channelB) diff --git a/x/ibc/handler_test.go b/x/ibc/handler_test.go index 7cf08d6dc1..1fb487ce06 100644 --- a/x/ibc/handler_test.go +++ b/x/ibc/handler_test.go @@ -56,7 +56,7 @@ func (suite *HandlerTestSuite) TestHandleRecvPacket() { }{ {"success: ORDERED", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) packet = channeltypes.NewPacket(suite.chainA.GetPacketData(suite.chainB), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, 0) err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -83,7 +83,7 @@ func (suite *HandlerTestSuite) TestHandleRecvPacket() { }, true}, {"failure: ORDERED out of order packet", func() { _, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) // attempts to receive packet with sequence 10 without receiving packet with sequence 1 for i := uint64(1); i < 10; i++ { @@ -103,7 +103,7 @@ func (suite *HandlerTestSuite) TestHandleRecvPacket() { }, false}, {"ORDERED: packet already received (replay)", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) packet = channeltypes.NewPacket(suite.chainA.GetPacketData(suite.chainB), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, 0) err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -179,7 +179,7 @@ func (suite *HandlerTestSuite) TestHandleAcknowledgePacket() { }{ {"success: ORDERED", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) packet = channeltypes.NewPacket(suite.chainA.GetPacketData(suite.chainB), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, 0) err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -216,7 +216,7 @@ func (suite *HandlerTestSuite) TestHandleAcknowledgePacket() { }, true}, {"failure: ORDERED acknowledge out of order packet", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) // attempts to acknowledge ack with sequence 10 without acknowledging ack with sequence 1 (removing packet commitment for i := uint64(1); i < 10; i++ { @@ -242,7 +242,7 @@ func (suite *HandlerTestSuite) TestHandleAcknowledgePacket() { }, false}, {"ORDERED: packet already acknowledged (replay)", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) packet = channeltypes.NewPacket(suite.chainA.GetPacketData(suite.chainB), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, 0) err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) @@ -326,7 +326,7 @@ func (suite *HandlerTestSuite) TestHandleTimeoutPacket() { }{ {"success: ORDERED", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) packet = channeltypes.NewPacket(suite.chainA.GetPacketData(suite.chainB), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, uint64(suite.chainB.GetContext().BlockHeight()), uint64(suite.chainB.GetContext().BlockTime().UnixNano())) // send from chainA to chainB @@ -376,7 +376,7 @@ func (suite *HandlerTestSuite) TestHandleTimeoutPacket() { }, true}, {"success: ORDERED timeout out of order packet", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) msgs := make([]sdk.Msg, totalPackets) // attempts to timeout the last packet sent without timing out the first packet @@ -461,7 +461,7 @@ func (suite *HandlerTestSuite) TestHandleTimeoutOnClosePacket() { }{ {"success: ORDERED", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) packet = channeltypes.NewPacket(suite.chainA.GetPacketData(suite.chainB), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, 0) counterpartyChannel = ibctesting.TestChannel{ PortID: channelB.PortID, @@ -537,7 +537,7 @@ func (suite *HandlerTestSuite) TestHandleTimeoutOnClosePacket() { }, true}, {"success: ORDERED timeout out of order packet", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) counterpartyChannel = ibctesting.TestChannel{ PortID: channelB.PortID, ID: channelB.ID, @@ -586,7 +586,7 @@ func (suite *HandlerTestSuite) TestHandleTimeoutOnClosePacket() { }, false}, {"ORDERED: channel not closed", func() { clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) - channelA, channelB := suite.coordinator.CreateChannel(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.ORDERED) packet = channeltypes.NewPacket(suite.chainA.GetPacketData(suite.chainB), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, 0) counterpartyChannel = ibctesting.TestChannel{ PortID: channelB.PortID, diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index b2f4174351..29b6db995e 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -1,4 +1,4 @@ -package testing +package ibctesting import ( "fmt" @@ -41,10 +41,13 @@ const ( UnbondingPeriod time.Duration = time.Hour * 24 * 7 * 3 MaxClockDrift time.Duration = time.Second * 10 - ChannelVersion = ibctransfertypes.Version - InvalidID = "IDisInvalid" + DefaultChannelVersion = ibctransfertypes.Version + InvalidID = "IDisInvalid" - ConnectionIDPrefix = "connectionid" + ConnectionIDPrefix = "conn" + ChannelIDPrefix = "chan" + + TransferPort = ibctransfertypes.ModuleName ) // Default params variables used to create a TM client @@ -221,10 +224,17 @@ func (chain *TestChain) NextBlock() { } +// sendMsgs delivers a transaction through the application without returning the result. +func (chain *TestChain) sendMsgs(msgs ...sdk.Msg) error { + _, err := chain.SendMsgs(msgs...) + return err +} + // SendMsgs delivers a transaction through the application. It updates the senders sequence -// number and updates the TestChain's headers. -func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) error { - _, _, err := simapp.SignCheckDeliver( +// number and updates the TestChain's headers. It returns the result and error if one +// occurred. +func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) (*sdk.Result, error) { + _, r, err := simapp.SignCheckDeliver( chain.t, chain.TxConfig, chain.App.BaseApp, @@ -236,7 +246,7 @@ func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) error { true, true, chain.senderPrivKey, ) if err != nil { - return err + return nil, err } // SignCheckDeliver calls app.Commit() @@ -245,7 +255,7 @@ func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) error { // increment sequence for successful transaction execution chain.SenderAccount.SetSequence(chain.SenderAccount.GetSequence() + 1) - return nil + return r, nil } // GetClientState retrieves the client state for the provided clientID. The client is @@ -326,13 +336,13 @@ func (chain *TestChain) AddTestConnection(clientID, counterpartyClientID string) // ConstructNextTestConnection constructs the next test connection to be // created given a clientID and counterparty clientID. The connection id -// format: -// connectionid +// format: -conn func (chain *TestChain) ConstructNextTestConnection(clientID, counterpartyClientID string) *TestConnection { - connectionID := ConnectionIDPrefix + strconv.Itoa(len(chain.Connections)) + connectionID := fmt.Sprintf("%s-%s%d", chain.ChainID, ConnectionIDPrefix, len(chain.Connections)) return &TestConnection{ ID: connectionID, ClientID: clientID, + NextChannelVersion: DefaultChannelVersion, CounterpartyClientID: counterpartyClientID, } } @@ -360,7 +370,7 @@ func (chain *TestChain) ConstructMsgCreateClient(counterparty *TestChain, client func (chain *TestChain) CreateTMClient(counterparty *TestChain, clientID string) error { // construct MsgCreateClient using counterparty msg := chain.ConstructMsgCreateClient(counterparty, clientID) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // UpdateTMClient will construct and execute a 07-tendermint MsgUpdateClient. The counterparty @@ -403,7 +413,7 @@ func (chain *TestChain) UpdateTMClient(counterparty *TestChain, clientID string) chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // CreateTMClientHeader creates a TM header to update the TM client. @@ -474,7 +484,7 @@ func (chain *TestChain) ConnectionOpenInit( counterparty.GetPrefix(), chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // ConnectionOpenTry will construct and execute a MsgConnectionOpenTry. @@ -497,7 +507,7 @@ func (chain *TestChain) ConnectionOpenTry( proofHeight, consensusHeight, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // ConnectionOpenAck will construct and execute a MsgConnectionOpenAck. @@ -519,7 +529,7 @@ func (chain *TestChain) ConnectionOpenAck( ConnectionVersion, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // ConnectionOpenConfirm will construct and execute a MsgConnectionOpenConfirm. @@ -535,7 +545,7 @@ func (chain *TestChain) ConnectionOpenConfirm( proof, height, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // CreatePortCapability binds and claims a capability for the given portID if it does not @@ -599,11 +609,11 @@ func (chain *TestChain) ChanOpenInit( ) error { msg := channeltypes.NewMsgChannelOpenInit( ch.PortID, ch.ID, - ChannelVersion, order, []string{connectionID}, + ch.Version, order, []string{connectionID}, counterparty.PortID, counterparty.ID, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // ChanOpenTry will construct and execute a MsgChannelOpenTry. @@ -617,13 +627,13 @@ func (chain *TestChain) ChanOpenTry( msg := channeltypes.NewMsgChannelOpenTry( ch.PortID, ch.ID, - ChannelVersion, order, []string{connectionID}, + ch.Version, order, []string{connectionID}, counterpartyCh.PortID, counterpartyCh.ID, - ChannelVersion, + counterpartyCh.Version, proof, height, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // ChanOpenAck will construct and execute a MsgChannelOpenAck. @@ -635,11 +645,11 @@ func (chain *TestChain) ChanOpenAck( msg := channeltypes.NewMsgChannelOpenAck( ch.PortID, ch.ID, - ChannelVersion, + counterpartyCh.Version, proof, height, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // ChanOpenConfirm will construct and execute a MsgChannelOpenConfirm. @@ -654,7 +664,7 @@ func (chain *TestChain) ChanOpenConfirm( proof, height, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // ChanCloseInit will construct and execute a MsgChannelCloseInit. @@ -668,7 +678,7 @@ func (chain *TestChain) ChanCloseInit( channel.PortID, channel.ID, chain.SenderAccount.GetAddress(), ) - return chain.SendMsgs(msg) + return chain.sendMsgs(msg) } // GetPacketData returns a ibc-transfer marshalled packet to be used for diff --git a/x/ibc/testing/coordinator.go b/x/ibc/testing/coordinator.go index 43a2c8f776..9139946b31 100644 --- a/x/ibc/testing/coordinator.go +++ b/x/ibc/testing/coordinator.go @@ -1,4 +1,4 @@ -package testing +package ibctesting import ( "fmt" @@ -45,15 +45,15 @@ func NewCoordinator(t *testing.T, n int) *Coordinator { } // Setup constructs a TM client, connection, and channel on both chains provided. It will -// fails if any error occurs. The clientID's, TestConnections, and TestChannels are returned -// for both chains. +// fail if any error occurs. The clientID's, TestConnections, and TestChannels are returned +// for both chains. The channels created are connected to the ibc-transfer application. func (coord *Coordinator) Setup( chainA, chainB *TestChain, ) (string, string, *TestConnection, *TestConnection, TestChannel, TestChannel) { clientA, clientB, connA, connB := coord.SetupClientConnections(chainA, chainB, clientexported.Tendermint) // channels can also be referenced through the returned connections - channelA, channelB := coord.CreateChannel(chainA, chainB, connA, connB, channeltypes.UNORDERED) + channelA, channelB := coord.CreateTransferChannels(chainA, chainB, connA, connB, channeltypes.UNORDERED) return clientA, clientB, connA, connB, channelA, channelB } @@ -164,16 +164,28 @@ func (coord *Coordinator) CreateConnection( return connA, connB } +// CreateTransferChannels constructs and executes channel handshake messages to create OPEN +// ibc-transfer channels on chainA and chainB. The function expects the channels to be +// successfully opened otherwise testing will fail. +func (coord *Coordinator) CreateTransferChannels( + chainA, chainB *TestChain, + connA, connB *TestConnection, + order channeltypes.Order, +) (TestChannel, TestChannel) { + return coord.CreateChannel(chainA, chainB, connA, connB, TransferPort, TransferPort, order) +} + // CreateChannel constructs and executes channel handshake messages in order to create // OPEN channels on chainA and chainB. The function expects the channels to be successfully // opened otherwise testing will fail. func (coord *Coordinator) CreateChannel( chainA, chainB *TestChain, connA, connB *TestConnection, + sourcePortID, counterpartyPortID string, order channeltypes.Order, ) (TestChannel, TestChannel) { - channelA, channelB, err := coord.ChanOpenInit(chainA, chainB, connA, connB, order) + channelA, channelB, err := coord.ChanOpenInit(chainA, chainB, connA, connB, sourcePortID, counterpartyPortID, order) require.NoError(coord.t, err) err = coord.ChanOpenTry(chainB, chainA, channelB, channelA, connB, order) @@ -207,6 +219,23 @@ func (coord *Coordinator) SendPacket( ) } +// RecvPacket receives a channel packet on the counterparty chain and updates +// the client on the source chain representing the counterparty. +func (coord *Coordinator) RecvPacket( + source, counterparty *TestChain, + sourceClient string, + packet channeltypes.Packet, +) error { + // get proof of packet commitment on source + packetKey := host.KeyPacketCommitment(packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) + proof, proofHeight := source.QueryProof(packetKey) + + recvMsg := channeltypes.NewMsgRecvPacket(packet, proof, proofHeight, counterparty.SenderAccount.GetAddress()) + + // receive on counterparty and update source client + return coord.SendMsgs(counterparty, source, sourceClient, []sdk.Msg{recvMsg}) +} + // PacketExecuted receives a packet through the channel keeper on the source chain and updates the // counterparty client for the source chain. func (coord *Coordinator) PacketExecuted( @@ -226,6 +255,24 @@ func (coord *Coordinator) PacketExecuted( ) } +// AcknowledgePacket acknowledges on the source chain the packet received on +// the counterparty chain and updates the client on the counterparty representing +// the source chain. +// TODO: add a query for the acknowledgement by events +// - https://github.com/cosmos/cosmos-sdk/issues/6509 +func (coord *Coordinator) AcknowledgePacket( + source, counterparty *TestChain, + counterpartyClient string, + packet channeltypes.Packet, ack []byte, +) error { + // get proof of acknowledgement on counterparty + packetKey := host.KeyPacketAcknowledgement(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + proof, proofHeight := counterparty.QueryProof(packetKey) + + ackMsg := channeltypes.NewMsgAcknowledgement(packet, ack, proof, proofHeight, source.SenderAccount.GetAddress()) + return coord.SendMsgs(source, counterparty, counterpartyClient, []sdk.Msg{ackMsg}) +} + // AcknowledgementExecuted deletes the packet commitment with the given // packet sequence since the acknowledgement has been verified. func (coord *Coordinator) AcknowledgementExecuted( @@ -245,41 +292,6 @@ func (coord *Coordinator) AcknowledgementExecuted( ) } -// RecvPacket receives a channel packet on the counterparty chain and updates -// the client on the source chain representing the counterparty. -func (coord *Coordinator) RecvPacket( - source, counterparty *TestChain, - sourceClient string, - packet channeltypes.Packet, -) error { - // get proof of packet commitment on source - packetKey := host.KeyPacketCommitment(packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) - proof, proofHeight := source.QueryProof(packetKey) - - recvMsg := channeltypes.NewMsgRecvPacket(packet, proof, proofHeight, counterparty.SenderAccount.GetAddress()) - - // receive on counterparty and update source client - return coord.SendMsgs(counterparty, source, sourceClient, []sdk.Msg{recvMsg}) -} - -// AcknowledgePacket acknowledges on the source chain the packet received on -// the counterparty chain and updates the client on the counterparty representing -// the source chain. -// TODO: add a query for the acknowledgement by events -// - https://github.com/cosmos/cosmos-sdk/issues/6509 -func (coord *Coordinator) AcknowledgePacket( - source, counterparty *TestChain, - counterpartyClient string, - packet channeltypes.Packet, ack []byte, -) error { - // get proof of acknowledgement on counterparty - packetKey := host.KeyPacketAcknowledgement(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) - proof, proofHeight := counterparty.QueryProof(packetKey) - - ackMsg := channeltypes.NewMsgAcknowledgement(packet, ack, proof, proofHeight, source.SenderAccount.GetAddress()) - return coord.SendMsgs(source, counterparty, counterpartyClient, []sdk.Msg{ackMsg}) -} - // RelayPacket receives a channel packet on counterparty, queries the ack // and acknowledges the packet on source. The clients are updated as needed. func (coord *Coordinator) RelayPacket( @@ -314,7 +326,7 @@ func (coord *Coordinator) SendMsg(source, counterparty *TestChain, counterpartyC // SendMsgs delivers the provided messages to the chain. The counterparty // client is updated with the new source consensus state. func (coord *Coordinator) SendMsgs(source, counterparty *TestChain, counterpartyClientID string, msgs []sdk.Msg) error { - if err := source.SendMsgs(msgs...); err != nil { + if err := source.sendMsgs(msgs...); err != nil { return err } @@ -454,10 +466,11 @@ func (coord *Coordinator) ConnOpenConfirm( func (coord *Coordinator) ChanOpenInit( source, counterparty *TestChain, connection, counterpartyConnection *TestConnection, + sourcePortID, counterpartyPortID string, order channeltypes.Order, ) (TestChannel, TestChannel, error) { - sourceChannel := connection.AddTestChannel() - counterpartyChannel := counterpartyConnection.AddTestChannel() + sourceChannel := connection.AddTestChannel(sourcePortID) + counterpartyChannel := counterpartyConnection.AddTestChannel(counterpartyPortID) // create port capability source.CreatePortCapability(sourceChannel.PortID) diff --git a/x/ibc/testing/solomachine.go b/x/ibc/testing/solomachine.go index 8c82f9be83..6a6a8cd291 100644 --- a/x/ibc/testing/solomachine.go +++ b/x/ibc/testing/solomachine.go @@ -1,4 +1,4 @@ -package testing +package ibctesting import ( "testing" diff --git a/x/ibc/testing/types.go b/x/ibc/testing/types.go index 47604cf9c2..c71b0ebd97 100644 --- a/x/ibc/testing/types.go +++ b/x/ibc/testing/types.go @@ -1,26 +1,24 @@ -package testing +package ibctesting import ( "fmt" ) // TestConnection is a testing helper struct to keep track of the connectionID, source clientID, -// and counterparty clientID used in creating and interacting with a connection. +// counterparty clientID, and the next channel version used in creating and interacting with a +// connection. type TestConnection struct { ID string ClientID string CounterpartyClientID string + NextChannelVersion string Channels []TestChannel } // AddTestChannel appends a new TestChannel which contains references to the port and channel ID -// used for channel creation and interaction. -// -// channel ID format: connectionid- -// the port is set to "transfer" to be compatible with the ICS-transfer module, this should -// eventually be updated as described in the issue: https://github.com/cosmos/cosmos-sdk/issues/6509 -func (conn *TestConnection) AddTestChannel() TestChannel { - channel := conn.NextTestChannel() +// used for channel creation and interaction. See 'NextTestChannel' for channel ID naming format. +func (conn *TestConnection) AddTestChannel(portID string) TestChannel { + channel := conn.NextTestChannel(portID) conn.Channels = append(conn.Channels, channel) return channel } @@ -29,14 +27,18 @@ func (conn *TestConnection) AddTestChannel() TestChannel { // add it to the list of created channels. This function is expected to be used when the caller // has not created the associated channel in app state, but would still like to refer to the // non-existent channel usually to test for its non-existence. -func (conn *TestConnection) NextTestChannel() TestChannel { - portID := "transfer" - channelID := fmt.Sprintf("%s%d", conn.ID, len(conn.Channels)) +// +// channel ID format: -chan +// +// The port is passed in by the caller. +func (conn *TestConnection) NextTestChannel(portID string) TestChannel { + channelID := fmt.Sprintf("%s-%s%d", conn.ID, ChannelIDPrefix, len(conn.Channels)) return TestChannel{ PortID: portID, ID: channelID, ClientID: conn.ClientID, CounterpartyClientID: conn.CounterpartyClientID, + Version: conn.NextChannelVersion, } } @@ -44,11 +46,11 @@ func (conn *TestConnection) NextTestChannel() TestChannel { // returns the next test channel to be created. This function is expected to be used // when the caller does not know if the channel has or has not been created in app // state, but would still like to refer to it to test existence or non-existence. -func (conn *TestConnection) FirstOrNextTestChannel() TestChannel { +func (conn *TestConnection) FirstOrNextTestChannel(portID string) TestChannel { if len(conn.Channels) > 0 { return conn.Channels[0] } - return conn.NextTestChannel() + return conn.NextTestChannel(portID) } // TestChannel is a testing helper struct to keep track of the portID and channelID @@ -59,4 +61,5 @@ type TestChannel struct { ID string ClientID string CounterpartyClientID string + Version string }