Skip to content

Commit

Permalink
Add e2e test relayer processing is delayed causing IBC packet sent ti…
Browse files Browse the repository at this point in the history
…ming out (hub to rollapp) (#5)
  • Loading branch information
anhductn2001 authored Feb 26, 2024
1 parent 2cdb7ef commit 826a9b7
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 8 deletions.
1 change: 1 addition & 0 deletions .github/workflows/e2e-test-workflow-call.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ jobs:
tests:
- "e2e-test-ibc"
- "e2e-test-ibc-timeout"
fail-fast: false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
51 changes: 43 additions & 8 deletions tests/ibc_timeout_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ func TestIBCTransferTimeout(t *testing.T) {
testutil.AssertBalance(t, ctx, dymension, dymensionUserAddr, dymension.Config().Denom, walletAmount)
testutil.AssertBalance(t, ctx, rollapp1, rollappUserAddr, rollapp1.Config().Denom, walletAmount)

// Compose an IBC transfer and send from dymension -> rollapp
// Compose an IBC transfer and send from rollapp -> dymension
var transferAmount = math.NewInt(1_000_000)

channel, err := ibc.GetTransferChannel(ctx, r, eRep, dymension.Config().ChainID, rollapp1.Config().ChainID)
Expand All @@ -141,6 +141,7 @@ func TestIBCTransferTimeout(t *testing.T) {
},
}

// Compose an IBC transfer and send from Rollapp -> Hub
_, err = rollapp1.SendIBCTransfer(ctx, channel.ChannelID, rollappUserAddr, transferData, options)
require.NoError(t, err)
// Assert balance was updated on the rollapp
Expand All @@ -149,6 +150,43 @@ func TestIBCTransferTimeout(t *testing.T) {
err = r.StartRelayer(ctx, eRep, ibcPath)
require.NoError(t, err)

err = testutil.WaitForBlocks(ctx, 5, dymension)
require.NoError(t, err)

// Stop relayer after relaying
err = r.StopRelayer(ctx, eRep)
require.NoError(t, err, "an error occurred while stopping the relayer")

// Get the IBC denom for urax on Hub
rollappTokenDenom := transfertypes.GetPrefixedDenom(channel.Counterparty.PortID, channel.Counterparty.ChannelID, rollapp1.Config().Denom)
rollappIBCDenom := transfertypes.ParseDenomTrace(rollappTokenDenom).IBCDenom()

// Assert funds were returned to the sender after the timeout has occured
testutil.AssertBalance(t, ctx, rollapp1, rollappUserAddr, rollapp1.Config().Denom, walletAmount)
testutil.AssertBalance(t, ctx, dymension, dymensionUserAddr, rollappIBCDenom, math.NewInt(0))

channel, err = ibc.GetTransferChannel(ctx, r, eRep, rollapp1.Config().ChainID, dymension.Config().ChainID)
require.NoError(t, err)

transferData = ibc.WalletData{
Address: rollappUserAddr,
Denom: dymension.Config().Denom,
Amount: transferAmount,
}

// Compose an IBC transfer and send from Hub -> rollapp
_, err = dymension.SendIBCTransfer(ctx, channel.ChannelID, dymensionUserAddr, transferData, options)
require.NoError(t, err)
// Assert balance was updated on the rollapp
testutil.AssertBalance(t, ctx, dymension, dymensionUserAddr, dymension.Config().Denom, walletAmount.Sub(transferData.Amount))
// Get the IBC denom for dymension on roll app
dymensionTokenDenom := transfertypes.GetPrefixedDenom(channel.Counterparty.PortID, channel.Counterparty.ChannelID, dymension.Config().Denom)
dymensionIBCDenom := transfertypes.ParseDenomTrace(dymensionTokenDenom).IBCDenom()
testutil.AssertBalance(t, ctx, rollapp1, rollappUserAddr, dymensionIBCDenom, math.NewInt(0))

err = r.StartRelayer(ctx, eRep, ibcPath)
require.NoError(t, err)

t.Cleanup(
func() {
err := r.StopRelayer(ctx, eRep)
Expand All @@ -158,14 +196,11 @@ func TestIBCTransferTimeout(t *testing.T) {
},
)

err = testutil.WaitForBlocks(ctx, 5, dymension)
err = testutil.WaitForBlocks(ctx, 5, rollapp1)
require.NoError(t, err)

// Get the IBC denom for urax on Hub
rollappTokenDenom := transfertypes.GetPrefixedDenom(channel.Counterparty.PortID, channel.Counterparty.ChannelID, rollapp1.Config().Denom)
rollappIBCDenom := transfertypes.ParseDenomTrace(rollappTokenDenom).IBCDenom()

// Assert funds were returned to the sender after the timeout has occured
testutil.AssertBalance(t, ctx, rollapp1, rollappUserAddr, rollapp1.Config().Denom, walletAmount)
testutil.AssertBalance(t, ctx, dymension, dymensionUserAddr, rollappIBCDenom, math.NewInt(0))
testutil.AssertBalance(t, ctx, dymension, dymensionUserAddr, dymension.Config().Denom, walletAmount)
testutil.AssertBalance(t, ctx, rollapp1, rollappUserAddr, dymensionIBCDenom, math.NewInt(0))

}

0 comments on commit 826a9b7

Please sign in to comment.