Stop the strict acceptance from waiting for itself

A scenario whose body ran past about 19 s idled until 45 s after its
start, and twice one never exited and hit the runner's 300 s timeout
after it had passed: something of Chrome outlived Browser.close and kept
its stdout and stderr open.

- scripts/qa/browser.mjs closes Chrome within 5 s, kills its process
  group and closes its pipes; the harness then finishes and exits with
  the scenario's code. QA_EXIT_DIAGNOSTICS=1 keeps the old ending and
  prints the open handles and Chrome's process tree 5 s after finish.
- Every strict page starts with its clock at the 18:30 UTC nearest to
  the real time, so Navara's sun is up over the test cities whenever the
  acceptance runs; a scenario can ask for its own instant or the real
  clock (Wildlife does, for its freshness fixtures).
- The runner records a scenario that passed but did not exit as hung,
  kills the whole process group on a timeout, runs a failed scenario
  once more and reports one that passes then as flaky, and appends each
  run to --history=FILE; scripts/report-acceptance-flake.mjs reads it.
This commit is contained in:
German Khokhlov committed 2026-11-10 14:10:46 +04:00
1 parent a913e5466e
commit ed6ae54ef6
19 files changed
+1039 -104

No files matched your search

+15
View File
@@ -0,0 +1,15 @@
import { readFileSync } from 'node:fs';
import { formatFlakeReport } from './qa/acceptance.mjs';
try {
if (process.argv.length !== 3)
throw new Error('Usage: node scripts/report-acceptance-flake.mjs FILE');
const history = readFileSync(process.argv[2], 'utf8')
.split('\n')
.filter((line) => line.trim())
.map((line) => JSON.parse(line));
console.log(formatFlakeReport(history));
} catch (error) {
console.error(error.message);
process.exitCode = 1;
}