From 50c7aef22fe820c848a5b1d6de69d9d2a2dab3ab Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 22 Feb 2026 11:28:20 +0000 Subject: [PATCH] test: stabilize session lock tests and move out of e2e --- ...e2e.test.ts => session-write-lock.test.ts} | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) rename src/agents/{session-write-lock.e2e.test.ts => session-write-lock.test.ts} (89%) diff --git a/src/agents/session-write-lock.e2e.test.ts b/src/agents/session-write-lock.test.ts similarity index 89% rename from src/agents/session-write-lock.e2e.test.ts rename to src/agents/session-write-lock.test.ts index 12865204d..ceb8cf6d1 100644 --- a/src/agents/session-write-lock.e2e.test.ts +++ b/src/agents/session-write-lock.test.ts @@ -110,7 +110,7 @@ describe("acquireSessionWriteLock", () => { it("derives max hold from timeout plus grace", () => { expect(resolveSessionLockMaxHoldFromTimeout({ timeoutMs: 600_000 })).toBe(720_000); - expect(resolveSessionLockMaxHoldFromTimeout({ timeoutMs: 1_000, minMs: 5_000 })).toBe(123_000); + expect(resolveSessionLockMaxHoldFromTimeout({ timeoutMs: 1_000, minMs: 5_000 })).toBe(121_000); }); it("clamps max hold for effectively no-timeout runs", () => { @@ -181,26 +181,32 @@ describe("acquireSessionWriteLock", () => { it("removes held locks on termination signals", async () => { const signals = ["SIGINT", "SIGTERM", "SIGQUIT", "SIGABRT"] as const; - for (const signal of signals) { - const root = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-lock-cleanup-")); - try { - const sessionFile = path.join(root, "sessions.json"); - const lockPath = `${sessionFile}.lock`; - await acquireSessionWriteLock({ sessionFile, timeoutMs: 500 }); - const keepAlive = () => {}; - if (signal === "SIGINT") { - process.on(signal, keepAlive); - } + const originalKill = process.kill.bind(process); + process.kill = ((_pid: number, _signal?: NodeJS.Signals) => true) as typeof process.kill; + try { + for (const signal of signals) { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-lock-cleanup-")); + try { + const sessionFile = path.join(root, "sessions.json"); + const lockPath = `${sessionFile}.lock`; + await acquireSessionWriteLock({ sessionFile, timeoutMs: 500 }); + const keepAlive = () => {}; + if (signal === "SIGINT") { + process.on(signal, keepAlive); + } - __testing.handleTerminationSignal(signal); + __testing.handleTerminationSignal(signal); - await expect(fs.stat(lockPath)).rejects.toThrow(); - if (signal === "SIGINT") { - process.off(signal, keepAlive); + await expect(fs.stat(lockPath)).rejects.toThrow(); + if (signal === "SIGINT") { + process.off(signal, keepAlive); + } + } finally { + await fs.rm(root, { recursive: true, force: true }); } - } finally { - await fs.rm(root, { recursive: true, force: true }); } + } finally { + process.kill = originalKill; } });