From b73faefad9b0b0344452b279e7faca94126cafb5 Mon Sep 17 00:00:00 2001 From: bznein Date: Mon, 8 Jul 2024 08:56:02 +0100 Subject: [PATCH 1/9] Unwind test --- e2e/tests/transfer/forwarding_test.go | 101 ++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index 23a8dde01b1..5192a22cd20 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -15,6 +15,7 @@ import ( "github.com/cosmos/ibc-go/e2e/testvalues" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + test "github.com/strangelove-ventures/interchaintest/v8/testutil" ) func TestTransferForwardingTestSuite(t *testing.T) { @@ -94,3 +95,103 @@ func (s *TransferForwardingTestSuite) TestForwarding_WithLastChainBeingICS20v1_S s.Require().Equal(expected, actualBalance.Int64()) }) } + +func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { + t := s.T() + ctx := context.TODO() + relayer, chains := s.GetRelayer(), s.GetAllChains() + + chainA, chainB, chainC := chains[0], chains[1], chains[2] + + channelAtoB := s.GetChainAChannel() + + var channelBtoC ibc.ChannelOutput + channels, err := relayer.GetChannels(ctx, s.GetRelayerExecReporter(), chainB.Config().ChainID) + s.Require().NoError(err) + for _, c := range channels { + if c.ChannelID == "channel-1" { + channelBtoC = c + break + } + } + + chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) + chainAAddress := chainAWallet.FormattedAddress() + chainADenom := chainA.Config().Denom + + chainBWallet := s.CreateUserOnChainB(ctx, testvalues.StartingTokenAmount) + chainBAddress := chainBWallet.FormattedAddress() + + chainCWallet := s.CreateUserOnChainC(ctx, testvalues.StartingTokenAmount) + chainCAddress := chainCWallet.FormattedAddress() + + t.Run("IBC transfer from A to B", func(t *testing.T) { + inFiveMinutes := time.Now().Add(5 * time.Minute).UnixNano() + + msgTransfer := testsuite.GetMsgTransfer( + channelAtoB.PortID, + channelAtoB.ChannelID, + transfertypes.V2, + testvalues.DefaultTransferCoins(chainADenom), + chainAAddress, + chainBAddress, + clienttypes.ZeroHeight(), + uint64(inFiveMinutes), + "", + nil) + resp := s.BroadcastMessages(ctx, chainA, chainAWallet, msgTransfer) + s.AssertTxSuccess(resp) + }) + + t.Run("start relayer", func(t *testing.T) { + s.StartRelayer(relayer) + }) + + chainBDenom := transfertypes.NewDenom(chainADenom, transfertypes.NewHop(channelAtoB.Counterparty.PortID, channelAtoB.Counterparty.ChannelID)) + t.Run("packet has reached B", func(t *testing.T) { + s.AssertPacketRelayed(ctx, chainA, channelAtoB.PortID, channelAtoB.ChannelID, 1) + + balance, err := query.Balance(ctx, chainB, chainBAddress, chainBDenom.IBCDenom()) + s.Require().NoError(err) + + s.Require().Equal(testvalues.IBCTransferAmount, balance.Int64()) + }) + + t.Run("IBC transfer from B (unwind) to C through A", func(t *testing.T) { + inFiveMinutes := time.Now().Add(20 * time.Minute).UnixNano() + + forwarding := transfertypes.NewForwarding( + true, + transfertypes.NewHop(channelAtoB.PortID, channelAtoB.ChannelID), + transfertypes.NewHop(channelBtoC.PortID, channelBtoC.ChannelID), + ) + msgTransfer := testsuite.GetMsgTransfer( + "", + "", + transfertypes.V2, + testvalues.DefaultTransferCoins(chainBDenom.IBCDenom()), + chainBAddress, + chainCAddress, + clienttypes.ZeroHeight(), + uint64(inFiveMinutes), + "", + forwarding) + resp := s.BroadcastMessages(ctx, chainB, chainBWallet, msgTransfer) + s.AssertTxSuccess(resp) + }) + t.Run("packet has reached C", func(t *testing.T) { + chainCDenom := transfertypes.NewDenom(chainADenom, + transfertypes.NewHop(channelAtoB.Counterparty.PortID, channelAtoB.Counterparty.ChannelID), + transfertypes.NewHop(channelBtoC.Counterparty.PortID, channelBtoC.Counterparty.ChannelID), + ) + + err := test.WaitForCondition(time.Minute*10, time.Second*30, func() (bool, error) { + balance, err := query.Balance(ctx, chainC, chainCAddress, chainCDenom.IBCDenom()) + if err != nil { + return false, err + } + return balance.Int64() == testvalues.IBCTransferAmount, nil + }) + s.Require().NoError(err) + }) +} From 387705963e677144f78fef31f15892ea27b6ae4f Mon Sep 17 00:00:00 2001 From: bznein Date: Mon, 8 Jul 2024 11:54:46 +0100 Subject: [PATCH 2/9] Docstring and simplified logic. --- e2e/tests/transfer/forwarding_test.go | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index 3902c063815..a57c447f11e 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -110,6 +110,11 @@ func (s *TransferForwardingTestSuite) testForwardingThreeChains(lastChainVersion }) } +// TestForwardingWithUnwindSucceeds tests the forwarding scenario in which +// a packet is sent from A to B, then unwound back to A and forwarded to C +// The overall flow of the packet is: +// A ---> B +// B --(unwind)-->A --(forward)-->B --(forward)--> C func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { t := s.T() ctx := context.TODO() @@ -118,16 +123,7 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { chainA, chainB, chainC := chains[0], chains[1], chains[2] channelAtoB := s.GetChainAChannel() - - var channelBtoC ibc.ChannelOutput - channels, err := relayer.GetChannels(ctx, s.GetRelayerExecReporter(), chainB.Config().ChainID) - s.Require().NoError(err) - for _, c := range channels { - if c.ChannelID == "channel-1" { - channelBtoC = c - break - } - } + channelBtoC := s.GetChainChannel(testsuite.ChainChannelPair{ChainIdx: 1, ChannelIdx: 1}) chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) chainAAddress := chainAWallet.FormattedAddress() From 380cc0afc61a9669cec0884fe7958f5479e07657 Mon Sep 17 00:00:00 2001 From: bznein Date: Mon, 8 Jul 2024 12:01:58 +0100 Subject: [PATCH 3/9] Fixed parameter --- e2e/tests/transfer/forwarding_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index a57c447f11e..0ad1b53f270 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -168,7 +168,7 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { }) t.Run("IBC transfer from B (unwind) to C through A", func(t *testing.T) { - inFiveMinutes := time.Now().Add(20 * time.Minute).UnixNano() + inFiveMinutes := time.Now().Add(5 * time.Minute).UnixNano() forwarding := transfertypes.NewForwarding( true, From 60464ef8bbed7c93404fa8a1e552275769c2228f Mon Sep 17 00:00:00 2001 From: bznein Date: Mon, 8 Jul 2024 12:16:18 +0100 Subject: [PATCH 4/9] linter --- e2e/tests/transfer/forwarding_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index 0ad1b53f270..9120fb00a47 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/strangelove-ventures/interchaintest/v8/ibc" + test "github.com/strangelove-ventures/interchaintest/v8/testutil" testifysuite "github.com/stretchr/testify/suite" "github.com/cosmos/ibc-go/e2e/testsuite" @@ -15,7 +16,6 @@ import ( "github.com/cosmos/ibc-go/e2e/testvalues" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - test "github.com/strangelove-ventures/interchaintest/v8/testutil" ) func TestTransferForwardingTestSuite(t *testing.T) { From 84a041d8ec40cc78ac5b353ecb4321f6c5289fb4 Mon Sep 17 00:00:00 2001 From: bznein Date: Mon, 8 Jul 2024 14:53:50 +0100 Subject: [PATCH 5/9] Add check for packet relayed. --- e2e/tests/transfer/forwarding_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index 9120fb00a47..f1ccc36fad3 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -167,7 +167,7 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { s.Require().Equal(testvalues.IBCTransferAmount, balance.Int64()) }) - t.Run("IBC transfer from B (unwind) to C through A", func(t *testing.T) { + t.Run("IBC transfer from B (unwind) to A and forwarded to C through B", func(t *testing.T) { inFiveMinutes := time.Now().Add(5 * time.Minute).UnixNano() forwarding := transfertypes.NewForwarding( @@ -203,5 +203,6 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { return balance.Int64() == testvalues.IBCTransferAmount, nil }) s.Require().NoError(err) + s.AssertPacketRelayed(ctx, chainA, channelBtoC.PortID, channelBtoC.ChannelID, 1) }) } From 151c73503e02a2fbdc25d4f59b4f8543dbb406a0 Mon Sep 17 00:00:00 2001 From: bznein Date: Mon, 8 Jul 2024 15:00:27 +0100 Subject: [PATCH 6/9] Fix chain --- e2e/tests/transfer/forwarding_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index f1ccc36fad3..5bec95a87a4 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -203,6 +203,6 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { return balance.Int64() == testvalues.IBCTransferAmount, nil }) s.Require().NoError(err) - s.AssertPacketRelayed(ctx, chainA, channelBtoC.PortID, channelBtoC.ChannelID, 1) + s.AssertPacketRelayed(ctx, chainB, channelBtoC.PortID, channelBtoC.ChannelID, 1) }) } From 66f6d2d5cf4add132b07162e96bb991aa2f70198 Mon Sep 17 00:00:00 2001 From: Nikolas De Giorgis Date: Tue, 9 Jul 2024 09:34:17 +0100 Subject: [PATCH 7/9] Update e2e/tests/transfer/forwarding_test.go Co-authored-by: DimitrisJim --- e2e/tests/transfer/forwarding_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index 5bec95a87a4..36795db2735 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -189,6 +189,7 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { resp := s.BroadcastMessages(ctx, chainB, chainBWallet, msgTransfer) s.AssertTxSuccess(resp) }) + t.Run("packet has reached C", func(t *testing.T) { chainCDenom := transfertypes.NewDenom(chainADenom, transfertypes.NewHop(channelAtoB.Counterparty.PortID, channelAtoB.Counterparty.ChannelID), From 66b0a96a474d85fb374a652c6d9cc2bbb4302405 Mon Sep 17 00:00:00 2001 From: bznein Date: Tue, 9 Jul 2024 10:36:44 +0100 Subject: [PATCH 8/9] fix merge issue --- e2e/tests/transfer/forwarding_test.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index e7a1f9abec4..04d860becb8 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -127,12 +127,16 @@ func (s *TransferForwardingTestSuite) testForwardingThreeChains(lastChainVersion func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { t := s.T() ctx := context.TODO() - relayer, chains := s.GetRelayer(), s.GetAllChains() + t.Parallel() + testName := t.Name() + relayer := s.CreateDefaultPaths(testName) + + chains := s.GetAllChains() chainA, chainB, chainC := chains[0], chains[1], chains[2] - channelAtoB := s.GetChainAChannel() - channelBtoC := s.GetChainChannel(testsuite.ChainChannelPair{ChainIdx: 1, ChannelIdx: 1}) + channelAtoB := s.GetChainAChannelForTest(testName) + channelBtoC := s.GetChannelsForTest(chainB, testName)[0] chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) chainAAddress := chainAWallet.FormattedAddress() @@ -163,7 +167,7 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { }) t.Run("start relayer", func(t *testing.T) { - s.StartRelayer(relayer) + s.StartRelayer(relayer, testName) }) chainBDenom := transfertypes.NewDenom(chainADenom, transfertypes.NewHop(channelAtoB.Counterparty.PortID, channelAtoB.Counterparty.ChannelID)) From d51857523efe328c506cb3e4f2d93461bd46929b Mon Sep 17 00:00:00 2001 From: bznein Date: Tue, 9 Jul 2024 10:50:15 +0100 Subject: [PATCH 9/9] Fix chan index --- e2e/tests/transfer/forwarding_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests/transfer/forwarding_test.go b/e2e/tests/transfer/forwarding_test.go index 04d860becb8..4e8f9ea124a 100644 --- a/e2e/tests/transfer/forwarding_test.go +++ b/e2e/tests/transfer/forwarding_test.go @@ -136,7 +136,7 @@ func (s *TransferForwardingTestSuite) TestForwardingWithUnwindSucceeds() { chainA, chainB, chainC := chains[0], chains[1], chains[2] channelAtoB := s.GetChainAChannelForTest(testName) - channelBtoC := s.GetChannelsForTest(chainB, testName)[0] + channelBtoC := s.GetChannelsForTest(chainB, testName)[1] chainAWallet := s.CreateUserOnChainA(ctx, testvalues.StartingTokenAmount) chainAAddress := chainAWallet.FormattedAddress()