From e9b017d9dc4de7e2b849cd5ca1e741ab1b60456c Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 23 Jun 2026 16:46:39 +0200 Subject: [PATCH] fix(qa): reject duplicate abort leak controls --- scripts/embedded-run-abort-leak.ts | 17 +++++++++++++++++ test/scripts/embedded-run-abort-leak.test.ts | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/scripts/embedded-run-abort-leak.ts b/scripts/embedded-run-abort-leak.ts index 68c079e565f..76d3062cb0c 100644 --- a/scripts/embedded-run-abort-leak.ts +++ b/scripts/embedded-run-abort-leak.ts @@ -34,6 +34,16 @@ type Options = { quiet: boolean; }; +const VALUE_FLAGS = new Set([ + "--iters", + "--batches", + "--snap-dir", + "--mode", + "--max-rss-growth-mb", + "--max-tracked-retention", + "--scope-bytes", +]); + function readValue(raw: string | undefined, flag: string): string { const value = raw?.trim() ?? ""; if (!value || value.startsWith("-")) { @@ -53,9 +63,16 @@ function parseArgs(argv: string[]): Options { scopeBytes: 2_000_000, quiet: false, }; + const seenValueFlags = new Set(); for (let i = 0; i < argv.length; i += 1) { const arg = argv[i]; const next = argv[i + 1]; + if (VALUE_FLAGS.has(arg)) { + if (seenValueFlags.has(arg)) { + fail(`${arg} was provided more than once`); + } + seenValueFlags.add(arg); + } switch (arg) { case "--iters": opts.iters = parsePositiveInt(next, arg); diff --git a/test/scripts/embedded-run-abort-leak.test.ts b/test/scripts/embedded-run-abort-leak.test.ts index 73dbcc37f4e..13f8508f05f 100644 --- a/test/scripts/embedded-run-abort-leak.test.ts +++ b/test/scripts/embedded-run-abort-leak.test.ts @@ -53,6 +53,24 @@ describe("scripts/embedded-run-abort-leak", () => { expect(readdirSync(looseThresholdProbe.snapDir)).toEqual([]); }); + it("rejects duplicate thresholds before writing heap snapshots", () => { + const snapDir = makeTempRoot(); + const result = runHarness([ + "--snap-dir", + snapDir, + "--iters", + "1", + "--iters", + "2", + "--quiet", + ]); + + expect(result.status).toBe(2); + expect(result.stdout).toBe(""); + expect(result.stderr).toContain("error: --iters was provided more than once"); + expect(readdirSync(snapDir)).toEqual([]); + }); + it("rejects missing snapshot directories before writing heap snapshots", () => { const result = runHarness(["--snap-dir", "--quiet", "--iters", "1", "--batches", "1"]);