test: harden windows timeout-sensitive suites

This commit is contained in:
Shakker
2026-03-30 19:40:16 +01:00
committed by Shakker
parent b878a34591
commit 56c9e2493b
4 changed files with 39 additions and 6 deletions

View File

@@ -2,12 +2,20 @@ import type { ChildProcess } from "node:child_process";
import { EventEmitter } from "node:events";
import fs from "node:fs";
import process from "node:process";
import { describe, expect, it, vi } from "vitest";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { OPENCLAW_CLI_ENV_VALUE } from "../infra/openclaw-exec-env.js";
import { attachChildProcessBridge } from "./child-process-bridge.js";
import { resolveCommandEnv, runCommandWithTimeout, shouldSpawnWithShell } from "./exec.js";
describe("runCommandWithTimeout", () => {
beforeEach(() => {
vi.useRealTimers();
});
afterEach(() => {
vi.useRealTimers();
});
it("never enables shell execution (Windows cmd.exe injection hardening)", () => {
expect(
shouldSpawnWithShell({

View File

@@ -1,5 +1,5 @@
import { statSync } from "node:fs";
import { afterEach, describe, expect, it, vi } from "vitest";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { withTempDir } from "../test-helpers/temp-dir.js";
import { createFlowRecord, getFlowById, resetFlowRegistryForTests } from "./flow-registry.js";
import { resolveFlowRegistryDir, resolveFlowRegistrySqlitePath } from "./flow-registry.paths.js";
@@ -33,7 +33,12 @@ async function withFlowRegistryTempDir<T>(run: (root: string) => Promise<T>): Pr
}
describe("flow-registry store runtime", () => {
beforeEach(() => {
vi.useRealTimers();
});
afterEach(() => {
vi.useRealTimers();
delete process.env.OPENCLAW_STATE_DIR;
resetFlowRegistryForTests();
});

View File

@@ -1,4 +1,4 @@
import { afterEach, describe, expect, it } from "vitest";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { withTempDir } from "../test-helpers/temp-dir.js";
import {
createFlowRecord,
@@ -11,8 +11,26 @@ import {
const ORIGINAL_STATE_DIR = process.env.OPENCLAW_STATE_DIR;
async function withFlowRegistryTempDir<T>(run: (root: string) => Promise<T>): Promise<T> {
return await withTempDir({ prefix: "openclaw-flow-registry-" }, async (root) => {
process.env.OPENCLAW_STATE_DIR = root;
resetFlowRegistryForTests();
try {
return await run(root);
} finally {
// Close the sqlite-backed registry before Windows temp-dir cleanup removes the store root.
resetFlowRegistryForTests();
}
});
}
describe("flow-registry", () => {
beforeEach(() => {
vi.useRealTimers();
});
afterEach(() => {
vi.useRealTimers();
if (ORIGINAL_STATE_DIR === undefined) {
delete process.env.OPENCLAW_STATE_DIR;
} else {
@@ -22,7 +40,7 @@ describe("flow-registry", () => {
});
it("creates, updates, lists, and deletes flow records", async () => {
await withTempDir({ prefix: "openclaw-flow-registry-" }, async (root) => {
await withFlowRegistryTempDir(async (root) => {
process.env.OPENCLAW_STATE_DIR = root;
resetFlowRegistryForTests();
@@ -64,7 +82,7 @@ describe("flow-registry", () => {
});
it("applies minimal defaults for new flow records", async () => {
await withTempDir({ prefix: "openclaw-flow-registry-" }, async (root) => {
await withFlowRegistryTempDir(async (root) => {
process.env.OPENCLAW_STATE_DIR = root;
resetFlowRegistryForTests();
@@ -86,7 +104,7 @@ describe("flow-registry", () => {
});
it("preserves endedAt when later updates change other flow fields", async () => {
await withTempDir({ prefix: "openclaw-flow-registry-" }, async (root) => {
await withFlowRegistryTempDir(async (root) => {
process.env.OPENCLAW_STATE_DIR = root;
resetFlowRegistryForTests();

View File

@@ -32,11 +32,13 @@ function createDeferred<T>() {
describe("cleanupSessionStateForTest", () => {
beforeEach(async () => {
vi.useRealTimers();
await cleanupSessionStateForTest();
acquireSessionWriteLockMock.mockClear();
});
afterEach(async () => {
vi.useRealTimers();
await cleanupSessionStateForTest();
vi.restoreAllMocks();
});