fix(test): Windows-testleg op de spiegel-CI groen (padscheiding, spawn-milieu, mock-contracten) #926

Closed
opened 2026-07-27 22:08:03 +00:00 by brenno · 1 comment
Owner

De volledige-matrix-CI op de GitHub-spiegel (brennodewinter/Ocideck, .github/workflows/ci.yml, draait op elke push) heeft een rode Windows-leg (Test (windows-2022)). Linux-gate, macOS, web-hardening, supply-chain en docs zijn groen; alleen Windows faalt, en al langer — alle recente main-pushes falen identiek.

Geen release-impact. De echte uitbrengpoort is Forgejo-op-tag (Mac-runner, make check-no-coverage); die kent geen Windows-leg. De spiegel-Windows-leg is puur een informatief, tweede faalmail-kanaal. Dit issue houdt de rode leg zichtbaar en werkt hem groen.

15 falende tests in 8 bestanden — allemaal testbugs

Geen enkele is een productbug: de app gebruikt overal p.join (platform-eigen), _hardenedEnv draagt de Windows-essentials (SystemRoot/PATHEXT/PATH), en de pin/guard-argv-opbouw slaagt óók op Windows. Het zijn de tests die POSIX-aannames maken.

Padscheiding (\ vs /) — 8 tests, fix = p.join in de verwachting:

  • test/import/bulk_import_runner_test.dart (5): verwacht /uit/een.md, code levert /uit\een.md.
  • test/slide_dedup_dialogs_test.dart (2): afbeeldingspad in vrije tekst, p.join(projectPath, 'images/foto.png').
  • test/save_destination_dialog_test.dart (1): regels 67 en 73 (regel 64 was al gefixt, deze twee overgeslagen).

Padnormalisatie — 1 test, fix = p.normalize:

  • test/import_note_l10n_test.dart: geeft parseFile een gemengd pad (lib/services/import\bulk_import_runner.dart) → analyzer eist een genormaliseerd pad.

Spawn-milieu — 1 test, fix = Windows-milieu meegeven:

  • test/git_cli_test.dart: debugSpawn('git', ['--version']) met léég milieu → Windows CreateProcess faalt (The parameter is incorrect). Geen echt codepad doet dit; het app-pad (probe(), via _hardenedEnv) slaagt op Windows.

Mock-contract — 3 tests, fix = overslaan op Windows mét reden:

  • test/image_service_coverage_test.dart: het pasteboard-pakket castt op Windows/Linux het kanaalresultaat naar String (pasteboard_platform_io.dart:41); de mock geeft Uint8List (de macOS-contractvorm). De service-logica zelf is platformvrij en wordt op macOS/Linux gedekt.

Onbereikbare lokale testserver — 2 tests, fix = echt-server-test overslaan op Windows mét reden:

  • test/git_native_cert_pin_test.dart (1) en test/git_network_guard_test.dart (1): de enige twee tests die een echte lokale HTTPS-server starten en er échte git tegenaan draaien. Op de windows-2022-runner is die server onbereikbaar (Failed to connect to localhost:52009 after 2 ms). De argv/config-opbouw eromheen slaagt wél op Windows (zustertests groen).

Open beveiligingsvraag (aparte opvolging)

De twee echt-server-tests bewaken dat native git http.curloptResolve (host-pinning) en sslCAInfo (cert-anker) daadwerkelijk honoreert — de NetGuard-belofte op de subproces-git-weg. Dat is op macOS/Linux geverifieerd, maar op Windows gebruikt git vaak schannel i.p.v. openssl/curl, waar sslCAInfo anders (of niet) werkt. Omdat de verbinding op de runner niet eens tot stand komt, is dit hier niet te beantwoorden. Openhouden: honoreert native git op Windows curloptResolve/sslCAInfo? Vraagt verificatie op een echte Windows-machine, niet enkel groen maken.

De volledige-matrix-CI op de GitHub-spiegel (`brennodewinter/Ocideck`, `.github/workflows/ci.yml`, draait op elke push) heeft een **rode Windows-leg** (`Test (windows-2022)`). Linux-gate, macOS, web-hardening, supply-chain en docs zijn groen; alleen Windows faalt, en al langer — alle recente main-pushes falen identiek. **Geen release-impact.** De echte uitbrengpoort is Forgejo-op-tag (Mac-runner, `make check-no-coverage`); die kent geen Windows-leg. De spiegel-Windows-leg is puur een informatief, tweede faalmail-kanaal. Dit issue houdt de rode leg zichtbaar en werkt hem groen. ## 15 falende tests in 8 bestanden — allemaal testbugs Geen enkele is een productbug: de app gebruikt overal `p.join` (platform-eigen), `_hardenedEnv` draagt de Windows-essentials (`SystemRoot`/`PATHEXT`/`PATH`), en de pin/guard-argv-opbouw slaagt óók op Windows. Het zijn de tests die POSIX-aannames maken. **Padscheiding (`\` vs `/`) — 8 tests, fix = `p.join` in de verwachting:** - `test/import/bulk_import_runner_test.dart` (5): verwacht `/uit/een.md`, code levert `/uit\een.md`. - `test/slide_dedup_dialogs_test.dart` (2): afbeeldingspad in vrije tekst, `p.join(projectPath, 'images/foto.png')`. - `test/save_destination_dialog_test.dart` (1): regels 67 en 73 (regel 64 was al gefixt, deze twee overgeslagen). **Padnormalisatie — 1 test, fix = `p.normalize`:** - `test/import_note_l10n_test.dart`: geeft `parseFile` een gemengd pad (`lib/services/import\bulk_import_runner.dart`) → analyzer eist een genormaliseerd pad. **Spawn-milieu — 1 test, fix = Windows-milieu meegeven:** - `test/git_cli_test.dart`: `debugSpawn('git', ['--version'])` met léég milieu → Windows `CreateProcess` faalt (`The parameter is incorrect`). Geen echt codepad doet dit; het app-pad (`probe()`, via `_hardenedEnv`) slaagt op Windows. **Mock-contract — 3 tests, fix = overslaan op Windows mét reden:** - `test/image_service_coverage_test.dart`: het `pasteboard`-pakket castt op Windows/Linux het kanaalresultaat naar `String` (`pasteboard_platform_io.dart:41`); de mock geeft `Uint8List` (de macOS-contractvorm). De service-logica zelf is platformvrij en wordt op macOS/Linux gedekt. **Onbereikbare lokale testserver — 2 tests, fix = echt-server-test overslaan op Windows mét reden:** - `test/git_native_cert_pin_test.dart` (1) en `test/git_network_guard_test.dart` (1): de enige twee tests die een echte lokale HTTPS-server starten en er échte git tegenaan draaien. Op de windows-2022-runner is die server onbereikbaar (`Failed to connect to localhost:52009 after 2 ms`). De argv/config-opbouw eromheen slaagt wél op Windows (zustertests groen). ## Open beveiligingsvraag (aparte opvolging) De twee echt-server-tests bewaken dat native git `http.curloptResolve` (host-pinning) en `sslCAInfo` (cert-anker) daadwerkelijk honoreert — de NetGuard-belofte op de subproces-git-weg. Dat is op macOS/Linux geverifieerd, maar op Windows gebruikt git vaak schannel i.p.v. openssl/curl, waar `sslCAInfo` anders (of niet) werkt. Omdat de verbinding op de runner niet eens tot stand komt, is dit hier niet te beantwoorden. **Openhouden:** honoreert native git op Windows `curloptResolve`/`sslCAInfo`? Vraagt verificatie op een echte Windows-machine, niet enkel groen maken.
Author
Owner

Opgelost en gemerged in #928 (merge-commit ba0853a508 op main).

De 15 deterministische testbugs uit dit issue zijn op de spiegel-Windows-leg groen: op branch-run 30310360646 slaagden alle acht betrokken bestanden (bulk_import_runner, save_destination_dialog, slide_dedup_dialogs, import_note_l10n, git_cli, image_service_coverage, git_native_cert_pin, git_network_guard). make check lokaal volledig groen, secrets- en SAST-scan schoon.

Twee zaken losgekoppeld als eigen issue:

  • #933 — native_git_mirror faalt intermitterend op de Windows-CI (git-timeouts + file-locking). Bestaande flakiness, al rood op main, blokkeert een volledig groene leg.
  • #934 — de open beveiligingsvraag: honoreert native git op Windows sslCAInfo/curloptResolve? Vraagt verificatie op een echte Windows-machine.
Opgelost en gemerged in #928 (merge-commit ba0853a508c02032130f5d1d23a74b144ca0529c op main). De 15 deterministische testbugs uit dit issue zijn op de spiegel-Windows-leg groen: op branch-run 30310360646 slaagden alle acht betrokken bestanden (bulk_import_runner, save_destination_dialog, slide_dedup_dialogs, import_note_l10n, git_cli, image_service_coverage, git_native_cert_pin, git_network_guard). `make check` lokaal volledig groen, secrets- en SAST-scan schoon. Twee zaken losgekoppeld als eigen issue: - #933 — native_git_mirror faalt intermitterend op de Windows-CI (git-timeouts + file-locking). Bestaande flakiness, al rood op main, blokkeert een volledig groene leg. - #934 — de open beveiligingsvraag: honoreert native git op Windows sslCAInfo/curloptResolve? Vraagt verificatie op een echte Windows-machine.
brenno 2026-07-27 23:15:06 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#926
No description provided.