
























11import { spawn } from "node:child_process";
2-import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2+import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
33import { tmpdir } from "node:os";
44import path from "node:path";
55import { setTimeout as delay } from "node:timers/promises";
@@ -51,6 +51,29 @@ describe("E2E temp state dirs", () => {
5151}
5252});
535354+it.runIf(process.platform !== "win32")("retries generated state cleanup after a failed removal", async () => {
55+const root = mkdtempSync(path.join(tmpdir(), "openclaw-e2e-temp-state-retry-"));
56+const lockedParent = path.join(root, "locked");
57+mkdirSync(lockedParent);
58+59+const state = await createE2eStateDir(`${path.relative(tmpdir(), lockedParent)}${path.sep}state-`, {
60+OPENCLAW_STATE_DIR: "",
61+});
62+63+try {
64+chmodSync(lockedParent, 0o500);
65+expect(() => state.cleanup()).toThrow();
66+expect(existsSync(state.stateDir)).toBe(true);
67+} finally {
68+chmodSync(lockedParent, 0o700);
69+}
70+71+state.cleanup();
72+expect(existsSync(state.stateDir)).toBe(false);
73+74+rmSync(root, { force: true, recursive: true });
75+});
76+5477it("cleans generated state dirs on termination signals", async () => {
5578const root = mkdtempSync(path.join(tmpdir(), "openclaw-e2e-temp-state-signal-"));
5679try {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。