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) { 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 }); } });