test(core): add real-world progressive RemoteFX difference fixtures from Haven - #1848
Conversation
…rom Haven Adds four binary fixtures captured from a live Windows session (Windows 11 24H2 KVM) via Haven's rdp-cli, exercising the RemoteFX Progressive TILE_FIRST difference-decoding path (flags & RFX_TILE_DIFFERENCE == 1) implemented in Devolutions#1698. - wts2_64x64_diff_2tiles.bin: 2 difference tiles at full quality - wts2_64x128_diff_3tiles.bin: 3 difference tiles at full quality - wts2_37x560_diff_column_9tiles.bin: 9-tile vertical column of diff tiles - wts2_progressive_tile_first_mixed_25tiles.bin: mixed 16 base + 9 diff tiles Includes wire-parsing assertions, tile flag checks, and ProgressiveDecoder missing-reference error handling tests in wire_to_surface_real_world.rs. Refs: Devolutions#1240, Devolutions#1698, Devolutions#1813
|
Hi GlassOnTin Thank you for the extra real-world captures! Can you fix the CI checks? I think the new reviewing pipeline should kick in as soon as it’s fixed |
|
Fixed and pushed (a085ac4). The three difference-tile assertions built the expected y_idx with |
|
The reviewer pipeline is currently broken, while I’m fixing it, I requested a Copilot review instead |
There was a problem hiding this comment.
🟡 Changes recommended
Moderate test-coverage gaps must be addressed before approval.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds four real-world Progressive RemoteFX difference fixtures and regression coverage.
Changes:
- Vendors four Windows 11 captures.
- Adds wire-format and decoder tests.
- Documents fixture metadata, licensing, and provenance.
File summaries
| File | Review |
|---|---|
crates/ironrdp-testsuite-core/tests/egfx/wire_to_surface_real_world.rs |
Needs stronger fixture assertions and successful difference-update decoding coverage. |
crates/ironrdp-testsuite-core/test_data/egfx/haven/README.md |
Needs corrected region metadata and complete reproducible provenance. |
Review details
Suppressed comments (1)
crates/ironrdp-testsuite-core/test_data/egfx/haven/README.md:32
WireToSurface2has no destination rectangle, and the mixed capture does not contain the single bounding rectangle shown here. Its progressive REGION contains three rectangles:(1243, 192, 1280, 256),(80, 256, 139, 752), and(1243, 256, 1280, 752). Label these as region rectangles and record the actual list so the fixture metadata matches the wire data.
| File | PDU | Dest rect | Tiles | Tile Type & Difference Flags |
- Files reviewed: 2/6 changed files
- Comments generated: 3
- Review effort level: Balanced
| let diff_count = region | ||
| .tiles | ||
| .iter() | ||
| .filter(|t| match t { | ||
| ProgressiveTile::First(f) => (f.flags & TILE_FLAG_DIFFERENCE) != 0, | ||
| _ => false, | ||
| }) | ||
| .count(); | ||
|
|
||
| assert_eq!(diff_count, 9, "expected exactly 9 difference-encoded tiles"); |
| let res = decoder.decode_bitmap(pdu.surface_id, pdu.codec_context_id, 1280, 800, &pdu.bitmap_data); | ||
| assert!(matches!( | ||
| res, | ||
| Err(ProgressiveDecodeError::MissingTileReference { x_idx: 3, y_idx: 2 }) |
| Binary fixtures captured from live Windows (Server 2025 and Windows 11 24H2 KVM) sessions via | ||
| [Haven](https://github.com/GlassHaven/Haven)'s `rdp-cli`. | ||
| Original captures by @GlassOnTin, recorded via Haven's EGFX PDU dumper (`EGFX_PDU_DUMP_DIR`). |
Summary
Follow-up regression pack for #1698 (
RFX_TILE_DIFFERENCEflag support in Progressive RemoteFX) requested in #1240, in the same shape as the #1813 fixture pack.Adds four real
WireToSurface2progressive RemoteFX binary captures from a live Windows session (Windows 11 24H2 KVM) recorded via Haven's EGFX dumper (rdp-cli). Each fixture contains difference-encodedTILE_FIRSTblocks (flags & RFX_TILE_DIFFERENCE == 0x01per MS-RDPRFX 2.2.2.3.1.2 and 3.1.8.1.7.1) emitted during dynamic GUI activity.Fixtures
Vendored at
crates/ironrdp-testsuite-core/test_data/egfx/haven/with provenance and license documentation inREADME.md:wts2_64x64_diff_2tiles.bin: 2 difference tiles at(3, 2)&(3, 3)(quality = 0xFF)wts2_64x128_diff_3tiles.bin: 3 difference tiles at(3, 2),(3, 3),(3, 4)(quality = 0xFF)wts2_37x560_diff_column_9tiles.bin: 9-tile vertical column alongx = 19, y = 3..=11(quality = 0xFF)wts2_progressive_tile_first_mixed_25tiles.bin: mixed set of 16 base tiles (flags = 0x00) and 9 difference tiles (flags = 0x01,quality = 0x00)Validation
crates/ironrdp-testsuite-core/tests/egfx/wire_to_surface_real_world.rs.ProgressiveDecodeError::MissingTileReference.ironrdp-testsuite-corepass.