test(e2e): migrate block_building, multi_validator_node, publisher_funding, invalid_checkpoint_proposal to pipelining#23414
Merged
Conversation
Continues the pipelining e2e migration. Cherry-picks the actual test-side adjustments from #23328 (which was a mess of unrelated changes) and skips anything covered by #23327 or #23354. - e2e_block_building "clears up all nullifiers if tx processing fails": un-skipped under fixed world-state fork-close. Promise.race -> Promise.any so we wait for the surviving tx (the failing one's rejection no longer settles the race first). Reads the block via getTxReceipt(minedTxHash) instead of getBlockData('latest') -- the latter can race against empty pipelined checkpoints. - e2e_block_building > reorgs describe: un-skipped under the same fix. beforeEach now drives the proven tip with markAsProven() explicitly (AnvilTestWatcher.markAsProven is dormant under interval mining), and the open-ended while+sleep is bounded into a retryUntil. minTxsPerBlock: 1 keeps sequential block-number assertions tight under pipelining's empty-checkpoint cadence. - e2e_multi_validator_node test 2: rewrote the over-pinned arrayContaining assertion to "no withdrawn validator attests" -- the test's actual motivation. Committee selection is RNG-sampled over the active set, so the original assertion pinned to a non-deterministic subset. jest.setTimeout(15min) added at the describe level so waitForProven has wall-clock budget. - composed/ha/e2e_ha_full: replaced the strict `l1VoteCount === uniqueSlots.size` invariant (broken by design: HA dedup suppresses duplicate signatures, and the pipelined build-slot/target-slot offset means a vote signed in slot N mines in slot N+1) with an outcome assertion: poll until on-chain signal count for our payload >= 1, then assert payloadWithMostSignals matches, no (slot, validator) double-signs, every duty SIGNED. Pipelining opt-in held back behind a TODO. - e2e_publisher_funding_multi: sharpened TODO documenting why pipelining opt-in is held back -- second funder round goes silent, needs source-level investigation of the RunningPromise cycle in publisher_manager.ts.
Collaborator
Flakey Tests🤖 says: This CI run detected 1 tests that failed, but were tolerated due to a .test_patterns.yml entry. |
PhilWindle
approved these changes
May 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Migrates more e2e tests to pipelining
e2e_block_building: re-enables the nullifier-cleanup and reorg coverage underPIPELINING_SETUP_OPTS, avoidslatestblock races, and bounds proven-tip waits.e2e_multi_validator_node: opts intoPIPELINING_SETUP_OPTS, anchors PXE to the checkpointed chain, deploys accounts after epoch warps, removes unnecessary proving waits, and asserts attestations come from the checkpoint committee.e2e_publisher_funding_multi: opts intoPIPELINING_SETUP_OPTSand makes the second funding round deterministic by lowering a publisher balance after the first refill.e2e_slashing/broadcasted_invalid_checkpoint_proposal_slash: removes the non-pipelined override and runs with pipelining plusinboxLag: 2.