diff --git a/tests/fixtures/processCaptureCancellation.mjs b/tests/fixtures/processCaptureCancellation.mjs index 6bfad03b6..501588b20 100644 --- a/tests/fixtures/processCaptureCancellation.mjs +++ b/tests/fixtures/processCaptureCancellation.mjs @@ -1,23 +1,27 @@ import { spawn } from "node:child_process"; -import { writeFile } from "node:fs/promises"; +import { rename, writeFile } from "node:fs/promises"; import { join } from "node:path"; const [mode, root] = process.argv.slice(2); +const publishReadyMarker = async (marker) => { + const destination = join(root, "ready.json"); + const temporary = join(root, "ready.json.tmp"); + await writeFile(temporary, JSON.stringify(marker)); + await rename(temporary, destination); +}; + if (mode === "settlement") { const child = spawn(process.execPath, [process.argv[1], "workload", root], { stdio: ["ignore", "ignore", "ignore", "ipc"], }); child.on("message", async (message) => { if (message !== "ready" || child.pid === undefined) return; - await writeFile( - join(root, "ready.json"), - JSON.stringify({ - rootPid: process.pid, - childPid: child.pid, - runId: process.env.REA_PROCESS_RUN_ID, - }), - ); + await publishReadyMarker({ + rootPid: process.pid, + childPid: child.pid, + runId: process.env.REA_PROCESS_RUN_ID, + }); child.disconnect(); child.unref(); process.stdout.write("root exiting; owned workload remains\n"); @@ -33,13 +37,10 @@ if (mode === "settlement") { setTimeout(() => process.exit(0), 12_000); if (mode === "workload") process.send?.("ready"); else { - await writeFile( - join(root, "ready.json"), - JSON.stringify({ - rootPid: process.pid, - runId: process.env.REA_PROCESS_RUN_ID, - }), - ); + await publishReadyMarker({ + rootPid: process.pid, + runId: process.env.REA_PROCESS_RUN_ID, + }); process.stdout.write("owned workload ready\n"); } }