fix(tasks): shard test state by vitest worker

This commit is contained in:
Vincent Koc
2026-04-11 11:50:19 +01:00
parent 2d4209c1bf
commit 8b29736b9c
2 changed files with 34 additions and 1 deletions

View File

@@ -0,0 +1,25 @@
import os from "node:os";
import path from "node:path";
import { describe, expect, it } from "vitest";
import { resolveTaskStateDir } from "./task-registry.paths.js";
describe("task registry paths", () => {
it("uses the Vitest worker id to shard test state dirs", () => {
expect(
resolveTaskStateDir({
VITEST: "true",
VITEST_POOL_ID: "7",
} as NodeJS.ProcessEnv),
).toBe(path.join(os.tmpdir(), "openclaw-test-state", `${process.pid}-7`));
});
it("prefers explicit state dir overrides over Vitest sharding", () => {
expect(
resolveTaskStateDir({
OPENCLAW_STATE_DIR: "/tmp/openclaw-custom-state",
VITEST: "true",
VITEST_POOL_ID: "7",
} as NodeJS.ProcessEnv),
).toBe("/tmp/openclaw-custom-state");
});
});

View File

@@ -1,5 +1,6 @@
import os from "node:os";
import path from "node:path";
import { isMainThread, threadId } from "node:worker_threads";
import { resolveStateDir } from "../config/paths.js";
export function resolveTaskStateDir(env: NodeJS.ProcessEnv = process.env): string {
@@ -8,7 +9,14 @@ export function resolveTaskStateDir(env: NodeJS.ProcessEnv = process.env): strin
return resolveStateDir(env);
}
if (env.VITEST || env.NODE_ENV === "test") {
return path.join(os.tmpdir(), "openclaw-test-state", String(process.pid));
const workerIdRaw = env.VITEST_WORKER_ID ?? env.VITEST_POOL_ID ?? "";
const workerId = Number.parseInt(workerIdRaw, 10);
const shardSuffix = Number.isFinite(workerId)
? `${process.pid}-${workerId}`
: isMainThread
? String(process.pid)
: `${process.pid}-${threadId}`;
return path.join(os.tmpdir(), "openclaw-test-state", shardSuffix);
}
return resolveStateDir(env);
}