Skip to content

pam/tests: Avoid snapshotting a half-rendered QR matrix#1625

Draft
adombeck wants to merge 1 commit into
mainfrom
1624-fix-flaky-TestCLIAuthenticate
Draft

pam/tests: Avoid snapshotting a half-rendered QR matrix#1625
adombeck wants to merge 1 commit into
mainfrom
1624-fix-flaky-TestCLIAuthenticate

Conversation

@adombeck

Copy link
Copy Markdown
Contributor

TestCLIAuthenticate/Authenticate_user_with_qr_code_in_a_TTY intermittently captured an extra terminal frame: a QR screen with a partially-drawn matrix appeared between the auth-method-selection frame and the first complete QR frame, failing the golden comparison.

The QR view (label, QR matrix, URL, Code) is rendered as a single string, but in a TTY the large ToString() matrix exceeds the 4096-byte PTY read buffer and arrives over several reads. WaitFor polls the growing buffer every 50ms, so a poll for the "Scan the qrcode" label (top of the view) can match while later reads carrying "Code:" (bottom) are still pending, snapshotting a half-drawn matrix. Whether this intermediate frame coincides with a poll boundary is timing-dependent, hence the flake; the non-TTY variants use the smaller ToSmallString() matrix that fits in one read, so they never hit it.

Discard the intermediate "Scan the qrcode" frame and keep only the "Code:" frame, which is a cumulative-screen superset capturing the same fully-rendered view.

TestCLIAuthenticate/Authenticate_user_with_qr_code_in_a_TTY
intermittently captured an extra terminal frame: a QR screen with a
partially-drawn matrix appeared between the auth-method-selection frame
and the first complete QR frame, failing the golden comparison.

The QR view (label, QR matrix, URL, Code) is rendered as a single
string, but in a TTY the large ToString() matrix exceeds the 4096-byte
PTY read buffer and arrives over several reads. WaitFor polls the
growing buffer every 50ms, so a poll for the "Scan the qrcode" label
(top of the view) can match while later reads carrying "Code:" (bottom)
are still pending, snapshotting a half-drawn matrix. Whether this
intermediate frame coincides with a poll boundary is timing-dependent,
hence the flake; the non-TTY variants use the smaller ToSmallString()
matrix that fits in one read, so they never hit it.

Discard the intermediate "Scan the qrcode" frame and keep only the
"Code:" frame, which is a cumulative-screen superset capturing the same
fully-rendered view.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.99%. Comparing base (31f8478) to head (0d1071b).
⚠️ Report is 10 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1625      +/-   ##
==========================================
+ Coverage   84.24%   87.99%   +3.75%     
==========================================
  Files          21       99      +78     
  Lines        1168     6832    +5664     
  Branches        0      111     +111     
==========================================
+ Hits          984     6012    +5028     
- Misses        184      764     +580     
- Partials        0       56      +56     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant