diff --git a/.github/integration-in-memory-tests.yml b/.github/integration-in-memory-tests.yml index c732a2eb681..32a510c95c6 100644 --- a/.github/integration-in-memory-tests.yml +++ b/.github/integration-in-memory-tests.yml @@ -29,7 +29,7 @@ runner-test-matrix: runs_on: ubuntu-latest triggers: - PR Integration CCIP Tests - test_cmd: cd integration-tests/smoke/ccip && go test ccip_messaging_test.go -timeout 12m -test.parallel=2 -count=1 -json + test_cmd: cd integration-tests/smoke/ccip && go test ccip_messaging_test.go -timeout 18m -test.parallel=2 -count=1 -json - id: smoke/ccip/ccip_message_limitations_test.go:* path: integration-tests/smoke/ccip/ccip_message_limitations_test.go test_env_type: in-memory diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 6d21e54151f..fda9e691b8d 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -336,7 +336,7 @@ require ( github.com/sirupsen/logrus v1.9.3 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // indirect github.com/smartcontractkit/chain-selectors v1.0.40 // indirect - github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 // indirect + github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250207205350-420ccacab78a // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index c2bb39cccf4..25a6ab92479 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1078,8 +1078,8 @@ github.com/smartcontractkit/chain-selectors v1.0.40 h1:iLvvoZeehVq6/7F+zzolQLF0D github.com/smartcontractkit/chain-selectors v1.0.40/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 h1:yXV9GJ6GvtoUpDwh4IkZ50dtjju2aJHBqhEcdBPMr0Q= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 h1:7v5FGwt6y0FKeB2aXPUO+vEyNhVE00KT8CjDsEP2IxE= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 h1:R3OD6Phi0ULIQ2uvHiKVWYdgpi/O1Mt46CUK1UApcXU= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea h1:/1f/pWf7vSV9acTR9UPn2exPAwQG/LHGa4l9OywhS00= diff --git a/deployment/ccip/changeset/testhelpers/test_assertions.go b/deployment/ccip/changeset/testhelpers/test_assertions.go index 4baf1f18ac5..ff026962ce6 100644 --- a/deployment/ccip/changeset/testhelpers/test_assertions.go +++ b/deployment/ccip/changeset/testhelpers/test_assertions.go @@ -442,114 +442,6 @@ func ConfirmExecWithSeqNrsForAll( return executionStates } -func ConfirmDoubleExecutions( - t *testing.T, - e deployment.Environment, - state changeset.CCIPOnChainState, - expectedSeqNums map[SourceDestPair][]uint64, - startBlocks map[uint64]*uint64, -) { - var ( - wg errgroup.Group - ) - for sourceDest, seqRange := range expectedSeqNums { - seqRange := seqRange - srcChain := sourceDest.SourceChainSelector - dstChain := sourceDest.DestChainSelector - - var startBlock *uint64 - if startBlocks != nil { - startBlock = startBlocks[dstChain] - } - - wg.Go(func() error { - err := ConfirmDoubleExecution( - t, - srcChain, - e.Chains[dstChain], - state.Chains[dstChain].OffRamp, - startBlock, - seqRange, - ) - return err - }) - } - - require.NoError(t, wg.Wait()) -} - -func ConfirmDoubleExecution( - t *testing.T, - sourceSelector uint64, - dest deployment.Chain, - offRamp offramp.OffRampInterface, - startBlock *uint64, - expectedSeqNrRange []uint64, -) error { - timer := time.NewTimer(tests.WaitTimeout(t)) - defer timer.Stop() - tick := time.NewTicker(3 * time.Second) - defer tick.Stop() - alreadyExecutedSink := make(chan *offramp.OffRampSkippedAlreadyExecutedMessage) - alreadyAttemptedSink := make(chan *offramp.OffRampAlreadyAttempted) - alreadyExecutedSub, err := offRamp.WatchSkippedAlreadyExecutedMessage(&bind.WatchOpts{ - Context: tests.Context(t), - Start: startBlock, - }, alreadyExecutedSink) - if err != nil { - return fmt.Errorf("error to subscribe SkippedAlreadyExecutedMessage : %w", err) - } - defer alreadyExecutedSub.Unsubscribe() - alreadyAttemptedSub, err := offRamp.WatchAlreadyAttempted(&bind.WatchOpts{ - Context: tests.Context(t), - Start: startBlock, - }, alreadyAttemptedSink) - if err != nil { - return fmt.Errorf("error to subscribe AlreadyAttempted : %w", err) - } - defer alreadyAttemptedSub.Unsubscribe() - - seenAlreadyExecuted := make(map[uint64]struct{}) - seenAlreadyAttempted := make(map[uint64]struct{}) - seqNrsToWatch := make(map[uint64]struct{}) - for _, seqNr := range expectedSeqNrRange { - seqNrsToWatch[seqNr] = struct{}{} - } - for { - select { - case <-tick.C: - for _, expectedSeqNr := range expectedSeqNrRange { - _, alreadyExecuted := seenAlreadyExecuted[expectedSeqNr] - _, alreadyAttempted := seenAlreadyAttempted[expectedSeqNr] - if alreadyAttempted || alreadyExecuted { - t.Logf("Seq nr %d already attempted (%t) or executed (%t) on chain %d (offramp %s) from chain %d", - expectedSeqNr, alreadyAttempted, alreadyExecuted, dest.Selector, offRamp.Address().String(), sourceSelector) - delete(seqNrsToWatch, expectedSeqNr) - } - if len(seqNrsToWatch) == 0 { - return nil - } - } - case alreadyExecutedMsg := <-alreadyExecutedSink: - t.Logf("Received SkippedAlreadyExecutedMessage for seqNum %d on chain %d (offramp %s) from chain %d", - alreadyExecutedMsg.SequenceNumber, dest.Selector, offRamp.Address().String(), sourceSelector) - seenAlreadyExecuted[alreadyExecutedMsg.SequenceNumber] = struct{}{} - delete(seqNrsToWatch, alreadyExecutedMsg.SequenceNumber) - if len(seqNrsToWatch) == 0 { - return nil - } - case alreadyAttemptedMsg := <-alreadyAttemptedSink: - t.Logf("Received AlreadyAttempted for seqNum %d on chain %d (offramp %s) from chain %d", - alreadyAttemptedMsg.SequenceNumber, dest.Selector, offRamp.Address().String(), sourceSelector) - seenAlreadyAttempted[alreadyAttemptedMsg.SequenceNumber] = struct{}{} - delete(seqNrsToWatch, alreadyAttemptedMsg.SequenceNumber) - if len(seqNrsToWatch) == 0 { - return nil - } - } - } -} - // ConfirmExecWithSeqNrs waits for an execution state change on the destination chain with the expected sequence number. // startBlock is the block number to start watching from. // If startBlock is nil, it will start watching from the latest block. diff --git a/deployment/go.mod b/deployment/go.mod index c8d9d0cad64..0e9ac424a8b 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -30,7 +30,7 @@ require ( github.com/sethvargo/go-retry v0.2.4 github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix github.com/smartcontractkit/chain-selectors v1.0.40 - github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 + github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250211162441-3d6cea220efb diff --git a/deployment/go.sum b/deployment/go.sum index 30913a31717..819894f60b1 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1126,8 +1126,8 @@ github.com/smartcontractkit/chain-selectors v1.0.40 h1:iLvvoZeehVq6/7F+zzolQLF0D github.com/smartcontractkit/chain-selectors v1.0.40/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 h1:yXV9GJ6GvtoUpDwh4IkZ50dtjju2aJHBqhEcdBPMr0Q= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 h1:7v5FGwt6y0FKeB2aXPUO+vEyNhVE00KT8CjDsEP2IxE= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 h1:R3OD6Phi0ULIQ2uvHiKVWYdgpi/O1Mt46CUK1UApcXU= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea h1:/1f/pWf7vSV9acTR9UPn2exPAwQG/LHGa4l9OywhS00= diff --git a/go.mod b/go.mod index 3b5d99f65a8..c892403477a 100644 --- a/go.mod +++ b/go.mod @@ -76,7 +76,7 @@ require ( github.com/shopspring/decimal v1.4.0 github.com/smartcontractkit/chain-selectors v1.0.40 github.com/smartcontractkit/chainlink-automation v0.8.1 - github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 + github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250128203428-08031923fbe5 diff --git a/go.sum b/go.sum index 22569b77896..1be018cd7f7 100644 --- a/go.sum +++ b/go.sum @@ -1010,8 +1010,8 @@ github.com/smartcontractkit/chain-selectors v1.0.40 h1:iLvvoZeehVq6/7F+zzolQLF0D github.com/smartcontractkit/chain-selectors v1.0.40/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 h1:yXV9GJ6GvtoUpDwh4IkZ50dtjju2aJHBqhEcdBPMr0Q= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 h1:7v5FGwt6y0FKeB2aXPUO+vEyNhVE00KT8CjDsEP2IxE= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 h1:R3OD6Phi0ULIQ2uvHiKVWYdgpi/O1Mt46CUK1UApcXU= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea h1:/1f/pWf7vSV9acTR9UPn2exPAwQG/LHGa4l9OywhS00= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 41e282b4f25..ca6b861278e 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -49,7 +49,7 @@ require ( github.com/slack-go/slack v0.15.0 github.com/smartcontractkit/chain-selectors v1.0.40 github.com/smartcontractkit/chainlink-automation v0.8.1 - github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 + github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea github.com/smartcontractkit/chainlink-integrations/evm v0.0.0-20250213145514-41d874782c02 github.com/smartcontractkit/chainlink-protos/job-distributor v0.6.0 diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 8349372b644..4ceda666b78 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1378,8 +1378,8 @@ github.com/smartcontractkit/chain-selectors v1.0.40 h1:iLvvoZeehVq6/7F+zzolQLF0D github.com/smartcontractkit/chain-selectors v1.0.40/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 h1:yXV9GJ6GvtoUpDwh4IkZ50dtjju2aJHBqhEcdBPMr0Q= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 h1:7v5FGwt6y0FKeB2aXPUO+vEyNhVE00KT8CjDsEP2IxE= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 h1:R3OD6Phi0ULIQ2uvHiKVWYdgpi/O1Mt46CUK1UApcXU= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea h1:/1f/pWf7vSV9acTR9UPn2exPAwQG/LHGa4l9OywhS00= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index d6cce558278..f8d1d6c8b27 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -28,7 +28,7 @@ require ( github.com/rs/zerolog v1.33.0 github.com/slack-go/slack v0.15.0 github.com/smartcontractkit/chain-selectors v1.0.40 - github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 + github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea github.com/smartcontractkit/chainlink-integrations/evm v0.0.0-20250213145514-41d874782c02 github.com/smartcontractkit/chainlink-testing-framework/lib v1.51.0 diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index a4e840fd295..fdfefb121ed 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1361,8 +1361,8 @@ github.com/smartcontractkit/chain-selectors v1.0.40 h1:iLvvoZeehVq6/7F+zzolQLF0D github.com/smartcontractkit/chain-selectors v1.0.40/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01 h1:yXV9GJ6GvtoUpDwh4IkZ50dtjju2aJHBqhEcdBPMr0Q= -github.com/smartcontractkit/chainlink-ccip v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670 h1:7v5FGwt6y0FKeB2aXPUO+vEyNhVE00KT8CjDsEP2IxE= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20250218100940-acd7281f1670/go.mod h1:Hht/OJq/PxC+gnBCIPyzHt4Otsw6mYwUVsmtOqIvlxo= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01 h1:R3OD6Phi0ULIQ2uvHiKVWYdgpi/O1Mt46CUK1UApcXU= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250214202341-4190f2db1c01/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.2-0.20250214231858-f365e2bdecea h1:/1f/pWf7vSV9acTR9UPn2exPAwQG/LHGa4l9OywhS00= diff --git a/integration-tests/smoke/ccip/ccip_messaging_test.go b/integration-tests/smoke/ccip/ccip_messaging_test.go index 43c38d8d5eb..67d0a460360 100644 --- a/integration-tests/smoke/ccip/ccip_messaging_test.go +++ b/integration-tests/smoke/ccip/ccip_messaging_test.go @@ -4,8 +4,9 @@ import ( "context" "fmt" "math/big" + "sync" + "sync/atomic" "testing" - "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -81,6 +82,15 @@ func Test_CCIPMessaging(t *testing.T) { ) ) + monitorCtx, monitorCancel := context.WithCancel(ctx) + ms := &monitorState{} + wg := sync.WaitGroup{} + wg.Add(1) + go func() { + defer wg.Done() + monitorReExecutions(monitorCtx, t, state, destChain, ms) + }() + t.Run("data message to eoa", func(t *testing.T) { out = mt.Run( mt.TestCase{ @@ -93,13 +103,7 @@ func Test_CCIPMessaging(t *testing.T) { ExpectedExecutionState: testhelpers.EXECUTION_STATE_SUCCESS, // success because offRamp won't call an EOA ExtraAssertions: []func(t *testing.T){ func(t *testing.T) { - // TODO: remove this or make it a "require.Never" once we fix double execution! - doubleExecStart := time.Now() - require.NoError( - t, - testhelpers.ConfirmDoubleExecution(t, sourceChain, e.Env.Chains[destChain], state.Chains[destChain].OffRamp, nil, []uint64{1}), - ) - t.Logf("Confirmed double execution in %s", time.Since(doubleExecStart).String()) + }, }, }, @@ -167,6 +171,48 @@ func Test_CCIPMessaging(t *testing.T) { t.Logf("successfully manually executed message %x", out.MsgSentEvent.Message.Header.MessageId) }) + + monitorCancel() + wg.Wait() + // there should be no re-executions. + require.Equal(t, int32(0), ms.reExecutionsObserved.Load()) +} + +type monitorState struct { + reExecutionsObserved atomic.Int32 +} + +func (s *monitorState) incReExecutions() { + s.reExecutionsObserved.Add(1) +} + +func monitorReExecutions( + ctx context.Context, + t *testing.T, + state changeset.CCIPOnChainState, + destChain uint64, + ss *monitorState, +) { + sink := make(chan *offramp.OffRampSkippedAlreadyExecutedMessage) + sub, err := state.Chains[destChain].OffRamp.WatchSkippedAlreadyExecutedMessage(&bind.WatchOpts{ + Start: nil, + }, sink) + if err != nil { + t.Fatalf("failed to subscribe to already executed msg stream: %s", err.Error()) + } + + for { + select { + case <-ctx.Done(): + return + case subErr := <-sub.Err(): + t.Fatalf("subscription error: %s", subErr.Error()) + case ev := <-sink: + t.Logf("received an already executed event for seq nr %d and source chain %d", + ev.SequenceNumber, ev.SourceChainSelector) + ss.incReExecutions() + } + } } func manuallyExecute( diff --git a/integration-tests/smoke/ccip/ccip_rmn_test.go b/integration-tests/smoke/ccip/ccip_rmn_test.go index a94fcb170fa..7a0200455fb 100644 --- a/integration-tests/smoke/ccip/ccip_rmn_test.go +++ b/integration-tests/smoke/ccip/ccip_rmn_test.go @@ -35,6 +35,7 @@ import ( ) func TestRMN_IncorrectSig(t *testing.T) { + t.Skip("flaking - needs to be fixed") runRmnTestCase(t, rmnTestCase{ nodesWithIncorrectSigner: []int{0, 1}, name: "messages with incorrect RMN signature",