test(windows): native_git_mirror-flakiness op de spiegel-CI wegnemen (#933) #937

Merged
brenno merged 2 commits from fix/933-native-git-mirror-flaky into main 2026-07-27 23:57:45 +00:00
Owner

Neemt de intermitterende roodkleuring van test/native_git_mirror_test.dart op
de volledige-matrix-CI van de GitHub-spiegel (Test (windows-2022)) weg. Het is
bestaande, Windows-specifieke flakiness — niet door #926/#928 veroorzaakt.

Twee oorzaken, allebei onder gelijktijdige belasting

  • TimeoutException after 0:00:30 — de echte git-subprocessen (clone/commit/
    push/diff) halen de standaard-testlimiet van 30s niet als flutter test
    meerdere git-zware bestanden tegelijk draait; git is traag op de Windows-CI.
  • PathAccessException ... errno = 32 — de tearDown kreeg de tempmap niet
    weg omdat git (of de virusscanner) de handle nog vasthield, waarna de map de
    volgende test besmette (destination path '…/seed' already exists).

Aanpak (de eerste twee uit de issue)

  1. Windows-veilige opruiming. Nieuwe hulp test/support/temp_dir.dart
    deleteTempDir probeert de recursieve delete een paar keer opnieuw met een
    korte pauze (het bekende errno-32-patroon) en berust na de laatste poging
    zonder te gooien: een achtergebleven map in de wegwerp-systemTemp van een
    CI-runner is onschadelijk, maar een tearDown die gooit velt een geslaagde
    test. Beide tearDowns in de suite gebruiken hem nu.
  2. Ruimere timeout, alléén op Windows. Een @OnPlatform-annotatie geeft de
    hele suite op Windows drie minuten per test; elders blijft de strakke 30s
    staan, zodat een echte vastloper lokaal snel opvalt.

Aanpak 3 uit de issue (de groep minder gelijktijdig draaien) is bewust niet
gedaan: die verlengt de hele Windows-leg, en 1+2 zouden het grootste deel van de
cascade al moeten wegnemen. Achter de hand als de spiegel-CI nog rood blijft.

Regressietest

test/support_temp_dir_test.dart bewijst de herhaal-lus met een geïnjecteerde
delete (twee keer geweigerd → derde poging lukt; en: na de laatste poging berust
het zonder te gooien). De échte Windows-vergrendeling is op macOS niet na te
bootsen, dus dít is de vorm die het gedrág vastlegt dat de flakiness wegneemt.

Bewaker

Overgeslagen — bewust, niet stilzwijgend. Dit is een test-only wijziging: geen
bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte
geraakt.

Poorten

  • make check — groen (opmaak, analyse, conventies, privacygrens, methodelengte,
    dode code, hardgecodeerde tekst, commentaartaal, de volledige testsuite, de
    dekkingsvloer én de per-bestand-vloer).
  • make check-secrets — schoon (gitleaks: geen lekken; trufflehog: 0 geheimen).
  • make sast — 0 bevindingen (semgrep, lokale regels).
  • DAST (ZAP) — niet gedraaid; niet van toepassing op een test-only wijziging, het
    geserveerde weboppervlak verandert niet.

Verificatie

Niet lokaal te reproduceren (macOS). De bevestiging komt van de spiegel-CI
(~46 min/ronde): de Windows-leg hoort na deze wijziging groen te blijven.

Neemt de intermitterende roodkleuring van `test/native_git_mirror_test.dart` op de volledige-matrix-CI van de GitHub-spiegel (`Test (windows-2022)`) weg. Het is bestaande, Windows-specifieke flakiness — niet door #926/#928 veroorzaakt. ## Twee oorzaken, allebei onder gelijktijdige belasting - **`TimeoutException after 0:00:30`** — de echte git-subprocessen (clone/commit/ push/diff) halen de standaard-testlimiet van 30s niet als `flutter test` meerdere git-zware bestanden tegelijk draait; git is traag op de Windows-CI. - **`PathAccessException ... errno = 32`** — de `tearDown` kreeg de tempmap niet weg omdat git (of de virusscanner) de handle nog vasthield, waarna de map de volgende test besmette (`destination path '…/seed' already exists`). ## Aanpak (de eerste twee uit de issue) 1. **Windows-veilige opruiming.** Nieuwe hulp `test/support/temp_dir.dart` — `deleteTempDir` probeert de recursieve delete een paar keer opnieuw met een korte pauze (het bekende errno-32-patroon) en berust na de laatste poging zonder te gooien: een achtergebleven map in de wegwerp-`systemTemp` van een CI-runner is onschadelijk, maar een `tearDown` die gooit velt een geslaagde test. Beide `tearDown`s in de suite gebruiken hem nu. 2. **Ruimere timeout, alléén op Windows.** Een `@OnPlatform`-annotatie geeft de hele suite op Windows drie minuten per test; elders blijft de strakke 30s staan, zodat een echte vastloper lokaal snel opvalt. Aanpak 3 uit de issue (de groep minder gelijktijdig draaien) is bewust *niet* gedaan: die verlengt de hele Windows-leg, en 1+2 zouden het grootste deel van de cascade al moeten wegnemen. Achter de hand als de spiegel-CI nog rood blijft. ## Regressietest `test/support_temp_dir_test.dart` bewijst de herhaal-lus met een geïnjecteerde delete (twee keer geweigerd → derde poging lukt; en: na de laatste poging berust het zonder te gooien). De échte Windows-vergrendeling is op macOS niet na te bootsen, dus dít is de vorm die het gedrág vastlegt dat de flakiness wegneemt. ## Bewaker Overgeslagen — bewust, niet stilzwijgend. Dit is een test-only wijziging: geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte geraakt. ## Poorten - `make check` — groen (opmaak, analyse, conventies, privacygrens, methodelengte, dode code, hardgecodeerde tekst, commentaartaal, de volledige testsuite, de dekkingsvloer én de per-bestand-vloer). - `make check-secrets` — schoon (gitleaks: geen lekken; trufflehog: 0 geheimen). - `make sast` — 0 bevindingen (semgrep, lokale regels). - DAST (ZAP) — niet gedraaid; niet van toepassing op een test-only wijziging, het geserveerde weboppervlak verandert niet. ## Verificatie Niet lokaal te reproduceren (macOS). De bevestiging komt van de spiegel-CI (~46 min/ronde): de Windows-leg hoort na deze wijziging groen te blijven.
De git-zware suites ruimen hun `Directory.systemTemp`-map in tearDown op met
`deleteSync(recursive: true)`. Op de Windows-CI faalt dat intermitterend met
errno 32 — de map is nog vergrendeld door een net afgesloten git-subproces of de
virusscanner — waarna de tearDown gooit en een geslaagde test alsnog rood kleurt.

`deleteTempDir` probeert de opruiming een paar keer opnieuw met een korte pauze
(het bekende Windows-patroon) en berust na de laatste poging zonder te gooien: een
achtergebleven map in de wegwerp-systemTemp van een CI-runner is onschadelijk. Op
elk ander platform is het een gewone deleteSync bij de eerste poging.

De regressietest bewijst de herhaal-lus met een geïnjecteerde delete, want de
echte Windows-vergrendeling is op macOS niet na te bootsen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
test(windows): native_git_mirror krijgt de opruim-helper en een ruimere timeout (#933)
All checks were successful
scans / scans (pull_request) Successful in 3m18s
db8c5b6b48
Deze suite liet op de volledige-matrix-CI van de GitHub-spiegel (`Test
(windows-2022)`) intermitterend een handvol tests aflopen. Twee oorzaken,
allebei Windows-specifiek en onder gelijktijdige belasting:

- `TimeoutException after 0:00:30`: de echte git-subprocessen (clone/commit/
  push/diff) halen de standaard-testlimiet van 30s niet als `flutter test`
  meerdere git-zware bestanden tegelijk draait. Een `@OnPlatform`-annotatie geeft
  ze op Windows drie minuten; elders blijft de strakke 30s staan, zodat een echte
  vastloper lokaal snel opvalt.
- `PathAccessException ... errno = 32`: de tearDown kreeg de tempmap niet weg
  omdat git de handle nog vasthield, wat de map naar de volgende test besmette.
  De tearDowns gebruiken nu `deleteTempDir`, die het opnieuw probeert.

Niet lokaal te reproduceren (macOS); de bevestiging komt van de spiegel-CI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 5f97de9fd1 into main 2026-07-27 23:57:45 +00:00
Sign in to join this conversation.
No description provided.