test: stabilize Windows test env (#567) (thanks @erikpr1994)

This commit is contained in:
Peter Steinberger
2026-01-09 15:40:02 +01:00
parent c228df8f90
commit 17a7d4e8dd
2 changed files with 37 additions and 27 deletions

View File

@@ -50,35 +50,40 @@ beforeEach(() => {
}); });
describe("bash tool backgrounding", () => { describe("bash tool backgrounding", () => {
it("backgrounds after yield and can be polled", async () => { it(
const result = await bashTool.execute("call1", { "backgrounds after yield and can be polled",
command: joinCommands([yieldDelayCmd, "echo done"]), async () => {
yieldMs: 10, const result = await bashTool.execute("call1", {
}); command: joinCommands([yieldDelayCmd, "echo done"]),
yieldMs: 10,
expect(result.details.status).toBe("running");
const sessionId = (result.details as { sessionId: string }).sessionId;
let status = "running";
let output = "";
const deadline = Date.now() + (process.platform === "win32" ? 8000 : 2000);
while (Date.now() < deadline && status === "running") {
const poll = await processTool.execute("call2", {
action: "poll",
sessionId,
}); });
status = (poll.details as { status: string }).status;
const textBlock = poll.content.find((c) => c.type === "text");
output = textBlock?.text ?? "";
if (status === "running") {
await sleep(20);
}
}
expect(status).toBe("completed"); expect(result.details.status).toBe("running");
expect(output).toContain("done"); const sessionId = (result.details as { sessionId: string }).sessionId;
});
let status = "running";
let output = "";
const deadline =
Date.now() + (process.platform === "win32" ? 8000 : 2000);
while (Date.now() < deadline && status === "running") {
const poll = await processTool.execute("call2", {
action: "poll",
sessionId,
});
status = (poll.details as { status: string }).status;
const textBlock = poll.content.find((c) => c.type === "text");
output = textBlock?.text ?? "";
if (status === "running") {
await sleep(20);
}
}
expect(status).toBe("completed");
expect(output).toContain("done");
},
isWin ? 15_000 : 5_000,
);
it("supports explicit background", async () => { it("supports explicit background", async () => {
const result = await bashTool.execute("call1", { const result = await bashTool.execute("call1", {

View File

@@ -12,12 +12,16 @@ const originalXdgConfigHome = process.env.XDG_CONFIG_HOME;
const originalXdgDataHome = process.env.XDG_DATA_HOME; const originalXdgDataHome = process.env.XDG_DATA_HOME;
const originalXdgStateHome = process.env.XDG_STATE_HOME; const originalXdgStateHome = process.env.XDG_STATE_HOME;
const originalXdgCacheHome = process.env.XDG_CACHE_HOME; const originalXdgCacheHome = process.env.XDG_CACHE_HOME;
const originalStateDir = process.env.CLAWDBOT_STATE_DIR;
const originalTestHome = process.env.CLAWDBOT_TEST_HOME; const originalTestHome = process.env.CLAWDBOT_TEST_HOME;
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), "clawdbot-test-home-")); const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), "clawdbot-test-home-"));
process.env.HOME = tempHome; process.env.HOME = tempHome;
process.env.USERPROFILE = tempHome; process.env.USERPROFILE = tempHome;
process.env.CLAWDBOT_TEST_HOME = tempHome; process.env.CLAWDBOT_TEST_HOME = tempHome;
if (process.platform === "win32") {
process.env.CLAWDBOT_STATE_DIR = path.join(tempHome, ".clawdbot");
}
process.env.XDG_CONFIG_HOME = path.join(tempHome, ".config"); process.env.XDG_CONFIG_HOME = path.join(tempHome, ".config");
process.env.XDG_DATA_HOME = path.join(tempHome, ".local", "share"); process.env.XDG_DATA_HOME = path.join(tempHome, ".local", "share");
process.env.XDG_STATE_HOME = path.join(tempHome, ".local", "state"); process.env.XDG_STATE_HOME = path.join(tempHome, ".local", "state");
@@ -35,6 +39,7 @@ process.on("exit", () => {
restoreEnv("XDG_DATA_HOME", originalXdgDataHome); restoreEnv("XDG_DATA_HOME", originalXdgDataHome);
restoreEnv("XDG_STATE_HOME", originalXdgStateHome); restoreEnv("XDG_STATE_HOME", originalXdgStateHome);
restoreEnv("XDG_CACHE_HOME", originalXdgCacheHome); restoreEnv("XDG_CACHE_HOME", originalXdgCacheHome);
restoreEnv("CLAWDBOT_STATE_DIR", originalStateDir);
restoreEnv("CLAWDBOT_TEST_HOME", originalTestHome); restoreEnv("CLAWDBOT_TEST_HOME", originalTestHome);
try { try {
fs.rmSync(tempHome, { recursive: true, force: true }); fs.rmSync(tempHome, { recursive: true, force: true });