Skip to content

[Repo Assist] fix(tests): make node auto-approve tests deterministic#464

Draft
github-actions[bot] wants to merge 1 commit into
masterfrom
repo-assist/fix-auto-approve-test-determinism-460-8061da56b5719a5f
Draft

[Repo Assist] fix(tests): make node auto-approve tests deterministic#464
github-actions[bot] wants to merge 1 commit into
masterfrom
repo-assist/fix-auto-approve-test-determinism-460-8061da56b5719a5f

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

🤖 This PR was created by Repo Assist, an automated AI assistant.

Summary

Resolves timing-sensitivity in NodePairAutoApproveTests by introducing deterministic synchronisation signals to replace Task.Delay waits.

Root Cause

Several tests used await Task.Delay(200) for negative assertions ("nothing happened") and one test used await Task.Delay(1100) that directly depended on the production 1-second post-approve reconnect delay.

Fix

GatewayConnectionManager changes

  • Added postApproveDelay constructor parameter (defaults to TimeSpan.FromSeconds(1) for production; tests pass TimeSpan.Zero so post-approve reconnects complete instantly)
  • Added internal event EventHandler? AutoApproveDecisionCompleted that fires at the end of each auto-approve decision, regardless of outcome
  • Extracted the auto-approve body from OnNodePairingStatusChanged into RunNodeSideAutoApproveAsync so the event fires from a single try/finally
  • Updated the NodePairListUpdated lambda to fire the event after TryOperatorAutoApproveOwnNodePairAsync returns

NodePairAutoApproveTests changes

  • CreateConnectedManager now passes postApproveDelay: TimeSpan.Zero
  • Added WaitForAutoApproveDecisionAsync(manager) helper that returns a Task completing on the next AutoApproveDecisionCompleted event
  • All 6× Task.Delay(200) negative waits replaced with WaitForAutoApproveDecisionAsync
  • The Task.Delay(1100) post-approve wait replaced with await firstDecision

Trade-offs

  • The postApproveDelay is an optional parameter appended to the existing long constructor. No callers are affected (all existing callers use the default).
  • The AutoApproveDecisionCompleted event is internal and only accessible within OpenClaw.Connection and its test assembly — zero public API impact.

Test Status

All 229 OpenClaw.Connection.Tests pass (including all 9 NodePairAutoApprove tests).

Closes #460

Generated by 🌈 Repo Assist, see workflow run. Learn more.

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/repo-assist.md@97143ac59cb3a13ef2a77581f929f06719c7402a

Replace Task.Delay timing waits with deterministic synchronisation signals:

- Add postApproveDelay constructor parameter to GatewayConnectionManager
  (defaults to 1s for production; tests pass TimeSpan.Zero for instant completion)
- Add internal AutoApproveDecisionCompleted event that fires when each
  auto-approve handler finishes (regardless of whether an approval was made)
- Extract OnNodePairingStatusChanged auto-approve body into RunNodeSideAutoApproveAsync
  so the completion event fires from a single try/finally
- Update NodePairListUpdated lambda to fire AutoApproveDecisionCompleted after
  TryOperatorAutoApproveOwnNodePairAsync returns
- Replace all Task.Delay(200) negative-assertion waits and the Task.Delay(1100)
  post-approve wait with WaitForAutoApproveDecisionAsync helper

Eliminates the timing-sensitive 1100ms wait that depended on the production 1s
reconnect delay, plus six 200ms waits in negative-assertion tests.

Closes #460

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make node auto-approve tests deterministic

0 participants