test(ha-prevote): frozen-then-resumed no-op scenario (task 5.2)

Two-angle scenario test (zero production change): a healthy PRIMARY and a
fresh-heartbeat STANDBY both DENY a higher-prospective-term preVoteRequest
without adopting the term or demoting; and a resumed standby whose round both
peers deny gets no majority -> stays CTRL_STANDBY/FOLLOWER, term byte-for-byte
unchanged, liveness re-armed. Regresses if the disruptive-server bug returns.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-06-16 06:54:27 +00:00
parent 6d22f2eb1a
commit 86ac7c4863
2 changed files with 222 additions and 1 deletions

View file

@ -72,7 +72,7 @@
- _Boundary: PreVote dispatch_
- _Depends: 1.1, 3.1, 4.1_ (shares the dispatch file with 3.1; owns only the opcode-to-handler routing, while 4.1 owns the handler)
- [ ] 5.2 Frozen-then-resumed no-op scenario test
- [x] 5.2 Frozen-then-resumed no-op scenario test
- Add a 3-node scenario test: primary alive, a resumed standby starts a PreVote round; both peers deny (primary role + fresh heartbeat).
- Observable: no real vote request is sent, the cluster term is unchanged across the event, and the primary stays primary (no demotion/truncate/self-restart).
- _Requirements: 4.1, 4.3, 4.4_