test(ethclient/simulated): add rollback transaction coverage #31020#2174
test(ethclient/simulated): add rollback transaction coverage #31020#2174gzliudan wants to merge 1 commit intoXinFinOrg:dev-upgradefrom
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Adds a new simulated-backend test intended to validate Rollback() behavior and introduces a second funded test account to support multi-sender scenarios in simulated tests.
Changes:
- Add
rollback_test.gocovering rollback + subsequent transaction submission. - Add
testKey2/testAddr2globals for use across simulated backend tests.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| ethclient/simulated/rollback_test.go | New test + helpers around rollback and transaction inclusion checks |
| ethclient/simulated/backend_test.go | Adds a second test key/address for multi-account test setup |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| sim.Rollback() | ||
|
|
||
| if pendingStateHasTx(client, btx0) || pendingStateHasTx(client, tx0) || pendingStateHasTx(client, tx1) { | ||
| t.Fatalf("all transactions were not rolled back") | ||
| } |
There was a problem hiding this comment.
The rollback assertion here isn’t actually validating rollback: pendingStateHasTx relies on TransactionReceipt, which only exists after a block is committed, so these checks will always be false before Commit() even if the txs are still in the pending block. Consider validating rollback by calling client.TransactionByHash(tx.Hash()) (expect pending=true before rollback, ErrNotFound after rollback), and/or by committing after sending the post-rollback txs and asserting the pre-rollback tx receipts are still ErrNotFound after the commit.
| // pendingStateHasTx returns true if a given transaction was successfully included as of the latest pending state. | ||
| func pendingStateHasTx(client Client, tx *types.Transaction) bool { | ||
| ctx := context.Background() | ||
|
|
||
| var ( | ||
| receipt *types.Receipt | ||
| err error | ||
| ) | ||
|
|
||
| // Poll for receipt with timeout | ||
| deadline := time.Now().Add(2 * time.Second) | ||
| for time.Now().Before(deadline) { | ||
| receipt, err = client.TransactionReceipt(ctx, tx.Hash()) | ||
| if err == nil && receipt != nil { | ||
| break | ||
| } | ||
| time.Sleep(100 * time.Millisecond) | ||
| } |
There was a problem hiding this comment.
pendingStateHasTx is both misleading (it checks mined receipts, not pending state) and potentially slow/flaky: when a receipt is not found it will sleep/poll up to 2s, and this is called multiple times (can add several seconds to this test). In the simulated backend Commit() is synchronous, so after commit you can query the receipt once (no polling), and for pre-commit/pending checks use TransactionByHash instead.
Proposed changes
Ref: ethereum#31020
Types of changes
What types of changes does your code introduce to XDC network?
Put an
✅in the boxes that applyImpacted Components
Which parts of the codebase does this PR touch?
Put an
✅in the boxes that applyChecklist
Put an
✅in the boxes once you have confirmed below actions (or provide reasons on not doing so) that