Files
boss/tests/omx-team-backend-config.test.ts
2026-04-03 02:22:02 +08:00

111 lines
3.8 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import os from "node:os";
import path from "node:path";
import { mkdtemp, rm, writeFile } from "node:fs/promises";
import {
getOmxTeamBackendAvailabilityForTesting,
getOmxTeamBackendConfigForTesting,
isOmxTeamBackendConfiguredForTesting,
} from "@/lib/execution/backends/omx-team-config";
function snapshotEnv() {
return {
BOSS_OMX_ENABLED: process.env.BOSS_OMX_ENABLED,
BOSS_OMX_COMMAND: process.env.BOSS_OMX_COMMAND,
BOSS_OMX_ARGS: process.env.BOSS_OMX_ARGS,
BOSS_OMX_WORKDIR: process.env.BOSS_OMX_WORKDIR,
BOSS_OMX_TIMEOUT_MS: process.env.BOSS_OMX_TIMEOUT_MS,
};
}
function restoreEnv(snapshot: ReturnType<typeof snapshotEnv>) {
for (const [key, value] of Object.entries(snapshot)) {
if (value === undefined) {
delete process.env[key];
} else {
process.env[key] = value;
}
}
}
test("OMX backend 默认关闭", () => {
const previous = snapshotEnv();
delete process.env.BOSS_OMX_ENABLED;
delete process.env.BOSS_OMX_COMMAND;
delete process.env.BOSS_OMX_ARGS;
delete process.env.BOSS_OMX_WORKDIR;
delete process.env.BOSS_OMX_TIMEOUT_MS;
const config = getOmxTeamBackendConfigForTesting();
assert.equal(config.enabled, false);
assert.equal(config.command, undefined);
assert.deepEqual(config.args, []);
assert.equal(config.timeoutMs, 45000);
assert.equal(isOmxTeamBackendConfiguredForTesting(config), false);
restoreEnv(previous);
});
test("OMX backend 在配置完整时返回 command、args 和 timeout", () => {
const previous = snapshotEnv();
process.env.BOSS_OMX_ENABLED = "true";
process.env.BOSS_OMX_COMMAND = "node";
process.env.BOSS_OMX_ARGS = "scripts/omx-team-smoke.mjs --smoke";
process.env.BOSS_OMX_WORKDIR = "/tmp/boss-omx";
process.env.BOSS_OMX_TIMEOUT_MS = "120000";
const config = getOmxTeamBackendConfigForTesting();
assert.equal(config.enabled, true);
assert.equal(config.command, "node");
assert.deepEqual(config.args, ["scripts/omx-team-smoke.mjs", "--smoke"]);
assert.equal(config.cwd, "/tmp/boss-omx");
assert.equal(config.timeoutMs, 120000);
assert.equal(isOmxTeamBackendConfiguredForTesting(config), true);
restoreEnv(previous);
});
test("OMX backend availability 会在可执行命令和脚本都存在时返回 ready", async () => {
const previous = snapshotEnv();
const tempDir = await mkdtemp(path.join(os.tmpdir(), "boss-omx-config-"));
const scriptPath = path.join(tempDir, "omx-team-smoke.mjs");
await writeFile(scriptPath, "console.log('ok');\n", "utf8");
process.env.BOSS_OMX_ENABLED = "true";
process.env.BOSS_OMX_COMMAND = process.execPath;
process.env.BOSS_OMX_ARGS = scriptPath;
process.env.BOSS_OMX_WORKDIR = tempDir;
try {
const availability = await getOmxTeamBackendAvailabilityForTesting();
assert.equal(availability.status, "ready");
assert.equal(availability.selectable, true);
assert.equal(availability.reason, "ready");
} finally {
restoreEnv(previous);
await rm(tempDir, { recursive: true, force: true });
}
});
test("OMX backend availability 会在脚本参数不存在时返回不可选", async () => {
const previous = snapshotEnv();
const tempDir = await mkdtemp(path.join(os.tmpdir(), "boss-omx-config-"));
const missingScript = path.join(tempDir, "missing-omx-script.mjs");
process.env.BOSS_OMX_ENABLED = "true";
process.env.BOSS_OMX_COMMAND = process.execPath;
process.env.BOSS_OMX_ARGS = missingScript;
process.env.BOSS_OMX_WORKDIR = tempDir;
try {
const availability = await getOmxTeamBackendAvailabilityForTesting();
assert.equal(availability.status, "misconfigured");
assert.equal(availability.selectable, false);
assert.equal(availability.reason, "script_not_found");
} finally {
restoreEnv(previous);
await rm(tempDir, { recursive: true, force: true });
}
});