Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

fix: `very_good test` intermittently crashes (exit 255) because test events split across stdout chunks are dropped

Aperta
#1,784 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
57/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
dart, flutter
Ambito
cli, testing

Direzione di ricerca

Read lib/src/very_good_test_runner.dart, especially mapToTestEvents and _splitLines, then inspect the related tests for event stream parsing. Reproduce parsing with a JSON event split across stdout chunks and verify that it is emitted as one event, including when a multibyte character crosses a chunk boundary. The issue also points to test_cli_runner.dart null assertions as a possible follow-up.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Description

very_good test intermittently crashes with exit code 255 after the tests have run. No test failed, and no coverage file is written:

Unhandled exception:
Null check operator used on a null value
#0      _testCommand.<anonymous closure> (package:very_good_cli/src/cli/test_cli_runner.dart:580:45)
#1      _RootZone.runUnaryGuarded (dart:async/zone.dart:963:10)
#2      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)

This looks like the same symptom as #1627. That issue was closed because it could no longer be reproduced. I think the cause explains why it is intermittent.

Root cause

very_good_test_runner 0.4.0 (the latest; very_good_cli 1.5.0 depends on ^0.4.0) turns the flutter test --machine stdout into events like this (lib/src/very_good_test_runner.dart, mapToTestEvents):

return map(utf8.decode)
    .expand<String>(_splitLines)
    .map<Map<String, Object?>>(_tryDecode)
    .where((value) => value.isNotEmpty)
    .map(TestEvent.fromJson);

_splitLines splits each raw stdout chunk on \n. Lines are not buffered across chunk boundaries. A JSON event that straddles two chunks becomes two fragments. _tryDecode fails on both and returns {}, and the where drops them silently. When the lost event is a testStart, the later testDone for that ID reaches tests[event.testID]! in test_cli_runner.dart and throws.

Where a chunk boundary falls depends on pipe timing. That explains why the crash is rare, why it does not follow any particular test, and why it "goes away" on a rerun. Suites that emit many long print events (for example many Skip: messages) make it more likely.

Suggested fix

Decode and split lines across chunks, for example:

return transform(utf8.decoder)
    .transform(const LineSplitter())
    .map((line) => line.trim())
    .map<Map<String, Object?>>(_tryDecode)
    .where((value) => value.isNotEmpty)
    .map(TestEvent.fromJson);

utf8.decoder as a transformer also handles a multi-byte character that is split across chunks. utf8.decode per chunk would throw on one. Separately, the ! lookups in test_cli_runner.dart (tests[event.testID]!, suites[test.suiteID]!) could degrade gracefully instead of crashing the whole run, as #1627 already suggested.

Environment
Item Value
very_good_cli 1.5.0
very_good_test_runner 0.4.0
Flutter 3.47.7 (stable) on macOS, Apple Silicon
Command very_good test --coverage --min-coverage 100 --test-randomize-ordering-seed random
Suite size ~11,000 tests
Frequency 2 of ~10 full runs in one day; reruns of the same tree pass
Lingua principale
Dart
Stelle
2.4k
Fork
245
Merge medio
2g 16h
PR unite (30g)
21

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di VeryGoodOpenSource/very_good_cli

Tutte le issue di VeryGoodOpenSource/very_good_cli

Issue simili

Altre issue su Dart

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.