diff --git a/scripts/e2e/parallels-npm-update-smoke.sh b/scripts/e2e/parallels-npm-update-smoke.sh index 9f47c75cf07..b1f549af1bc 100755 --- a/scripts/e2e/parallels-npm-update-smoke.sh +++ b/scripts/e2e/parallels-npm-update-smoke.sh @@ -67,6 +67,7 @@ die() { cleanup() { if [[ -n "${SERVER_PID:-}" ]]; then kill "$SERVER_PID" >/dev/null 2>&1 || true + wait "$SERVER_PID" 2>/dev/null || true fi rm -rf "$MAIN_TGZ_DIR" } @@ -662,7 +663,7 @@ start_timeout_guard() { sleep 2 kill -9 "$pid" >/dev/null 2>&1 || true fi - ) & + ) >&2 & printf '%s\n' "$!" } @@ -670,6 +671,7 @@ stop_timeout_guard() { local pid="${1:-}" [[ -n "$pid" ]] || return 0 kill "$pid" >/dev/null 2>&1 || true + wait "$pid" 2>/dev/null || true } extract_log_progress() { diff --git a/test/scripts/parallels-npm-update-smoke.test.ts b/test/scripts/parallels-npm-update-smoke.test.ts new file mode 100644 index 00000000000..c0d483a2085 --- /dev/null +++ b/test/scripts/parallels-npm-update-smoke.test.ts @@ -0,0 +1,14 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +const SCRIPT_PATH = "scripts/e2e/parallels-npm-update-smoke.sh"; + +describe("parallels npm update smoke", () => { + it("does not leave guard/server children attached to the wrapper", () => { + const script = readFileSync(SCRIPT_PATH, "utf8"); + + expect(script).toContain('wait "$SERVER_PID" 2>/dev/null || true'); + expect(script).toContain(") >&2 &"); + expect(script).toContain('wait "$pid" 2>/dev/null || true'); + }); +});