From 62a1232fb6a1616e0d532409a9642b430f3f884d Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Wed, 28 Jun 2023 16:00:06 +0300 Subject: [PATCH] Add test to verify post-ack channel state after last in-flight packet. --- modules/core/04-channel/keeper/packet_test.go | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/modules/core/04-channel/keeper/packet_test.go b/modules/core/04-channel/keeper/packet_test.go index 88d3bc56fc8..af760fff794 100644 --- a/modules/core/04-channel/keeper/packet_test.go +++ b/modules/core/04-channel/keeper/packet_test.go @@ -672,9 +672,6 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) // Move channel to correct state. - path.EndpointA.ChannelConfig.ProposedUpgrade.Fields.Version = ibcmock.UpgradeVersion - path.EndpointB.ChannelConfig.ProposedUpgrade.Fields.Version = ibcmock.UpgradeVersion - err = path.EndpointB.ChanUpgradeInit() suite.Require().NoError(err) @@ -954,3 +951,48 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() { }) } } + +// TestAcknowledgeFlush tests that Acknowledging the last in-flight packet moves the channel +// state to FLUSHINGCOMPLETE. +func (suite *KeeperTestSuite) TestAcknowledgeFlushStatus() { + var channelCap *capabilitytypes.Capability + + suite.SetupTest() // reset + path := ibctesting.NewPath(suite.chainA, suite.chainB) + + // setup uses an UNORDERED channel + suite.coordinator.Setup(path) + + // create packet commitment + sequence, err := path.EndpointA.SendPacket(defaultTimeoutHeight, disabledTimeoutTimestamp, ibctesting.MockPacketData) + suite.Require().NoError(err) + + // create packet receipt and acknowledgement + packet := types.NewPacket(ibctesting.MockPacketData, sequence, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, defaultTimeoutHeight, disabledTimeoutTimestamp) + err = path.EndpointB.RecvPacket(packet) + suite.Require().NoError(err) + + // Move channel to UPGRADE_ACK, flush status set to flushing due to previous SendPacket + path.EndpointA.ChannelConfig.ProposedUpgrade.Fields.Version = ibcmock.UpgradeVersion + path.EndpointB.ChannelConfig.ProposedUpgrade.Fields.Version = ibcmock.UpgradeVersion + + err = path.EndpointA.ChanUpgradeInit() + suite.Require().NoError(err) + + err = path.EndpointB.ChanUpgradeTry() + suite.Require().NoError(err) + + err = path.EndpointA.ChanUpgradeAck() + suite.Require().NoError(err) + + packetKey := host.PacketAcknowledgementKey(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + proof, proofHeight := path.EndpointB.QueryProof(packetKey) + + channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) + err = suite.chainA.App.GetIBCKeeper().ChannelKeeper.AcknowledgePacket(suite.chainA.GetContext(), channelCap, packet, ibcmock.MockAcknowledgement.Acknowledgement(), proof, proofHeight) + suite.Require().NoError(err) + + // Check that we've moved to FLUSHCOMPLETE + channelA := path.EndpointA.GetChannel() + suite.Require().Equal(types.FLUSHCOMPLETE, channelA.FlushStatus) +}