test: reproduce #90 — capture completes black on desktop-size-only update - #342
Merged
Conversation
…date A framebuffer update whose only rectangle is the PSEUDO_DESKTOP_SIZE pseudo-encoding completes a pending non-incremental refresh: updateDesktopSize creates a black canvas (client.py) and _doConnection fires commitUpdate unconditionally once the rect count hits zero (rfb.py), so captureScreen saves the black canvas and the CLI exits before the server's pixel data arrives. TightVNC on Windows answers the first update request exactly this way, per the -v logs on the issue. The unit test replays the logged byte sequence into VNCDoToolClient and is marked expectedFailure so CI stays green; it belongs in tests/unit/test_client.py once fixed. tests/triage/issue_90/ carries a wire-level reproduction (scripted server + vncdo runs + logs and screenshots for both failing and working orderings) and is deleted at fix time along with the test file. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Aug 13, 2026
Merging this PR should carry exactly one file into main: the expectedFailure regression test. The scripted server, run logs and screenshots were debugging evidence, not tree content — they now live as text in an issue comment, which survives branch deletion and is where the next reader of #90 will look. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Failing reproduction for #90 (black captures against TightVNC on Windows, reported 2017–2025). This PR carries one file: the
expectedFailureregression test — it is safe to merge without pulling any debugging content into main.Mechanism. When the first framebuffer update contains only the
PSEUDO_DESKTOP_SIZEpseudo-rectangle — which TightVNC's first response is, per the-vlogs on the issue —updateDesktopSizereplacesself.screenwith a black canvas (vncdotool/client.py:413-421) and_doConnectionfirescommitUpdateunconditionally once the rectangle count hits zero (vncdotool/rfb.py:408-412). The pending capture completes, the black canvas is saved, and the CLI exits before the server's pixel data arrives. The QEMU key-event pseudo-rect is already special-cased as "no real update" (vncdotool/rfb.py:450-452); DesktopSize isn't.The test replays the logged byte sequence into
VNCDoToolClientwith a mocked transport and asserts the refresh does not complete without pixel data. It is marked@unittest.expectedFailureso CI stays green; when the fix lands, unittest will report an unexpected success — at that point move the test intotests/unit/test_client.py, drop the marker, rename it for the behaviour it checks, and delete the standalone file.Supporting evidence — a wire-level reproduction (scripted server replaying the TightVNC behaviour, real
vncdoCLI runs, failing/working/workaround/after-fix logs) — lives in the issue thread, not in this diff, so it stays readable and the repo stays clean.Relationship to #343: that PR fixes the bug and carries this test in final form (moved, un-marked, renamed). If #343 merges first, close this unmerged — merging both would leave an
expectedFailuretest that reports unexpected success on a fixed tree.