mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-14 18:51:04 +00:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { afterEach, beforeAll, expect, test, vi } from "vitest";
|
|
let createExecTool: typeof import("./bash-tools.exec.js").createExecTool;
|
|
let resetProcessRegistryForTests: typeof import("./bash-process-registry.js").resetProcessRegistryForTests;
|
|
|
|
vi.mock("@lydell/node-pty", () => ({
|
|
spawn: () => {
|
|
const err = new Error("spawn EBADF");
|
|
(err as NodeJS.ErrnoException).code = "EBADF";
|
|
throw err;
|
|
},
|
|
}));
|
|
|
|
beforeAll(async () => {
|
|
({ createExecTool } = await import("./bash-tools.exec.js"));
|
|
({ resetProcessRegistryForTests } = await import("./bash-process-registry.js"));
|
|
});
|
|
|
|
afterEach(() => {
|
|
resetProcessRegistryForTests();
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
test("exec falls back when PTY spawn fails", async () => {
|
|
const tool = createExecTool({
|
|
allowBackground: false,
|
|
host: "gateway",
|
|
security: "full",
|
|
ask: "off",
|
|
});
|
|
const result = await tool.execute("toolcall", {
|
|
command: "printf ok",
|
|
pty: true,
|
|
});
|
|
|
|
expect(result.details.status).toBe("completed");
|
|
const text = result.content?.find((item) => item.type === "text")?.text ?? "";
|
|
expect(text).toContain("ok");
|
|
expect(text).toContain("PTY spawn failed");
|
|
});
|