fix(ci): stabilize windows tests
This commit is contained in:
@@ -16,6 +16,8 @@ const echoAfterDelay = (message: string) =>
|
|||||||
joinCommands([shortDelayCmd, `echo ${message}`]);
|
joinCommands([shortDelayCmd, `echo ${message}`]);
|
||||||
const echoLines = (lines: string[]) =>
|
const echoLines = (lines: string[]) =>
|
||||||
joinCommands(lines.map((line) => `echo ${line}`));
|
joinCommands(lines.map((line) => `echo ${line}`));
|
||||||
|
const normalizeText = (value?: string) =>
|
||||||
|
(value ?? "").replace(/\r\n/g, "\n").replace(/\r/g, "\n").trim();
|
||||||
|
|
||||||
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
|
|
||||||
@@ -171,7 +173,7 @@ describe("bash tool backgrounding", () => {
|
|||||||
limit: 2,
|
limit: 2,
|
||||||
});
|
});
|
||||||
const textBlock = log.content.find((c) => c.type === "text");
|
const textBlock = log.content.find((c) => c.type === "text");
|
||||||
expect(textBlock?.text?.trim()).toBe("two\nthree");
|
expect(normalizeText(textBlock?.text)).toBe("two\nthree");
|
||||||
expect((log.details as { totalLines?: number }).totalLines).toBe(3);
|
expect((log.details as { totalLines?: number }).totalLines).toBe(3);
|
||||||
expect(status).toBe("completed");
|
expect(status).toBe("completed");
|
||||||
});
|
});
|
||||||
@@ -191,7 +193,7 @@ describe("bash tool backgrounding", () => {
|
|||||||
limit: 1,
|
limit: 1,
|
||||||
});
|
});
|
||||||
const textBlock = log.content.find((c) => c.type === "text");
|
const textBlock = log.content.find((c) => c.type === "text");
|
||||||
expect(textBlock?.text?.trim()).toBe("beta");
|
expect(normalizeText(textBlock?.text)).toBe("beta");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("scopes process sessions by scopeKey", async () => {
|
it("scopes process sessions by scopeKey", async () => {
|
||||||
|
|||||||
@@ -4,46 +4,52 @@ import path from "node:path";
|
|||||||
|
|
||||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
|
||||||
|
const itUnix = process.platform === "win32" ? it.skip : it;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vi.resetModules();
|
vi.resetModules();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("resolvePythonExecutablePath", () => {
|
describe("resolvePythonExecutablePath", () => {
|
||||||
it("resolves a working python path and caches the result", async () => {
|
itUnix(
|
||||||
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-python-"));
|
"resolves a working python path and caches the result",
|
||||||
const originalPath = process.env.PATH;
|
async () => {
|
||||||
try {
|
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-python-"));
|
||||||
const realPython = path.join(tmp, "python-real");
|
const originalPath = process.env.PATH;
|
||||||
await fs.writeFile(realPython, "#!/bin/sh\nexit 0\n", "utf-8");
|
try {
|
||||||
await fs.chmod(realPython, 0o755);
|
const realPython = path.join(tmp, "python-real");
|
||||||
|
await fs.writeFile(realPython, "#!/bin/sh\nexit 0\n", "utf-8");
|
||||||
|
await fs.chmod(realPython, 0o755);
|
||||||
|
|
||||||
const shimDir = path.join(tmp, "shims");
|
const shimDir = path.join(tmp, "shims");
|
||||||
await fs.mkdir(shimDir, { recursive: true });
|
await fs.mkdir(shimDir, { recursive: true });
|
||||||
const shim = path.join(shimDir, "python3");
|
const shim = path.join(shimDir, "python3");
|
||||||
await fs.writeFile(
|
await fs.writeFile(
|
||||||
shim,
|
shim,
|
||||||
`#!/bin/sh\nif [ "$1" = "-c" ]; then\n echo "${realPython}"\n exit 0\nfi\nexit 1\n`,
|
`#!/bin/sh\nif [ "$1" = "-c" ]; then\n echo "${realPython}"\n exit 0\nfi\nexit 1\n`,
|
||||||
"utf-8",
|
"utf-8",
|
||||||
);
|
);
|
||||||
await fs.chmod(shim, 0o755);
|
await fs.chmod(shim, 0o755);
|
||||||
|
|
||||||
process.env.PATH = `${shimDir}${path.delimiter}/usr/bin`;
|
process.env.PATH = `${shimDir}${path.delimiter}/usr/bin`;
|
||||||
|
|
||||||
const { resolvePythonExecutablePath } = await import(
|
const { resolvePythonExecutablePath } = await import(
|
||||||
"./gmail-setup-utils.js"
|
"./gmail-setup-utils.js"
|
||||||
);
|
);
|
||||||
|
|
||||||
const resolved = await resolvePythonExecutablePath();
|
const resolved = await resolvePythonExecutablePath();
|
||||||
expect(resolved).toBe(realPython);
|
expect(resolved).toBe(realPython);
|
||||||
|
|
||||||
process.env.PATH = "/bin";
|
process.env.PATH = "/bin";
|
||||||
const cached = await resolvePythonExecutablePath();
|
const cached = await resolvePythonExecutablePath();
|
||||||
expect(cached).toBe(realPython);
|
expect(cached).toBe(realPython);
|
||||||
} finally {
|
} finally {
|
||||||
process.env.PATH = originalPath;
|
process.env.PATH = originalPath;
|
||||||
await fs.rm(tmp, { recursive: true, force: true });
|
await fs.rm(tmp, { recursive: true, force: true });
|
||||||
}
|
}
|
||||||
}, 60_000);
|
},
|
||||||
|
60_000,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("ensureTailscaleEndpoint", () => {
|
describe("ensureTailscaleEndpoint", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user