Files
boss/tests/omx-team-smoke-script.test.ts

67 lines
2.0 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import path from "node:path";
import { spawn } from "node:child_process";
function runSmoke(payload: unknown) {
return new Promise<{
exitCode: number | null;
stdout: string;
stderr: string;
}>((resolve, reject) => {
const scriptPath = path.resolve("scripts/omx-team-smoke.mjs");
const child = spawn(process.execPath, [scriptPath], {
cwd: "/Users/kris/code/boss",
stdio: ["pipe", "pipe", "pipe"],
});
let stdout = "";
let stderr = "";
child.stdout.setEncoding("utf8");
child.stderr.setEncoding("utf8");
child.stdout.on("data", (chunk) => {
stdout += chunk;
});
child.stderr.on("data", (chunk) => {
stderr += chunk;
});
child.on("error", reject);
child.on("close", (exitCode) => {
resolve({ exitCode, stdout, stderr });
});
child.stdin.write(JSON.stringify(payload));
child.stdin.end();
});
}
test("omx team smoke script emits completed JSON for valid dispatch execution payload", async () => {
const result = await runSmoke({
requestKind: "dispatch_execution",
requestId: "mastertask-omx-1",
dispatchExecutionId: "dx-omx-1",
targetProjectId: "thread-project-1",
targetThreadId: "thread-1",
workersRequested: 2,
objective: "并行协作链路 smoke",
});
assert.equal(result.exitCode, 0);
assert.equal(result.stderr, "");
const parsed = JSON.parse(result.stdout);
assert.equal(parsed.status, "completed");
assert.equal(parsed.backendId, "omx-team");
assert.equal(parsed.requestId, "mastertask-omx-1");
assert.equal(parsed.dispatchExecutionId, "dx-omx-1");
assert.match(parsed.rawThreadReply, /并行协作链路 smoke/);
});
test("omx team smoke script emits failed JSON for invalid payload", async () => {
const result = await runSmoke("not-an-object");
assert.equal(result.exitCode, 0);
const parsed = JSON.parse(result.stdout);
assert.equal(parsed.status, "failed");
assert.match(parsed.error, /INVALID_OMX_PAYLOAD/);
});