Files
workinf_Blender_Wasm/web/tests/unit/server-job-process.test.mjs
mes123456 380cbed4ff
Some checks are pending
M6 deployable RC / quick (push) Waiting to run
M6 deployable RC / chromium (push) Blocked by required conditions
M6 deployable RC / release (push) Blocked by required conditions
Checkpoint web parity through Chromium input tasks
2026-08-19 10:39:03 -04:00

49 lines
2.4 KiB
JavaScript

import assert from "node:assert/strict";
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import test from "node:test";
import { fileURLToPath } from "node:url";
import { cleanupServerJobDirectory, createServerJobDirectory } from "../../../tools/web/server-job-isolation.mjs";
import { cancelServerJobProcess, startServerJobProcess } from "../../../tools/web/server-job-process.mjs";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
test("M13-04G cancels the real process group and cleans the job directory", async () => {
const temporary = await fs.mkdtemp(path.join(os.tmpdir(), "m13-04g-process-"));
const job = await createServerJobDirectory(temporary, "server:cancel");
const childScript = "const {spawn}=require('node:child_process'); const c=spawn(process.execPath,['-e','setInterval(()=>{},1000)'],{stdio:'ignore'}); setInterval(()=>{},1000);";
const handle = startServerJobProcess(process.execPath, ["-e", childScript], { cwd: root });
let cleanupCount = 0;
try {
const receipt = await cancelServerJobProcess(handle, async () => { cleanupCount += 1; await cleanupServerJobDirectory(job); });
assert.equal(receipt.state, "CANCELLED");
assert.equal(receipt.cleanupCount, 1);
assert.equal(cleanupCount, 1);
assert.match(receipt.treeSignal, /GROUP|ALREADY_EXITED/);
await assert.rejects(fs.stat(job.path), { code: "ENOENT" });
await assert.doesNotReject(handle.completion);
} finally {
await fs.rm(temporary, { recursive: true, force: true });
}
});
test("M13-04G repeated cancellation is idempotent", async () => {
const temporary = await fs.mkdtemp(path.join(os.tmpdir(), "m13-04g-idempotent-"));
const job = await createServerJobDirectory(temporary, "server:repeat");
const handle = startServerJobProcess(process.execPath, ["-e", "setInterval(()=>{},1000)"], { cwd: root });
let cleanupCount = 0;
const cleanup = async () => { cleanupCount += 1; await cleanupServerJobDirectory(job); };
try {
const first = await cancelServerJobProcess(handle, cleanup);
const second = await cancelServerJobProcess(handle, cleanup);
assert.equal(first.state, "CANCELLED");
assert.equal(second.state, "CANCELLED");
assert.equal(first.cleanupCount, 1);
assert.equal(second.cleanupCount, 1);
assert.equal(cleanupCount, 1);
} finally {
await fs.rm(temporary, { recursive: true, force: true });
}
});