test: cover retained repair backup cleanup failures · openclaw/openclaw@beb3311
2026-05-16
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -49,6 +49,7 @@ function requireFirstLogMessage(log: ReturnType<typeof vi.fn>): string {
|
49 | 49 | } |
50 | 50 | |
51 | 51 | afterEach(async () => { |
| 52 | +vi.restoreAllMocks(); |
52 | 53 | await Promise.all(tempDirs.splice(0).map((dir) => fs.rm(dir, { recursive: true, force: true }))); |
53 | 54 | }); |
54 | 55 | |
@@ -93,6 +94,25 @@ describe("repairSessionFileIfNeeded", () => {
|
93 | 94 | } |
94 | 95 | }); |
95 | 96 | |
| 97 | +it("reports retained backup path when successful repair backup cleanup fails", async () => { |
| 98 | +const { file } = await createTempSessionPath(); |
| 99 | +const { header, message } = buildSessionHeaderAndMessage(); |
| 100 | +const content = `${JSON.stringify(header)}\n${JSON.stringify(message)}\n{"type":"message"`; |
| 101 | +await fs.writeFile(file, content, "utf-8"); |
| 102 | +vi.spyOn(fs, "unlink").mockRejectedValueOnce(new Error("simulated cleanup failure")); |
| 103 | + |
| 104 | +const debug = vi.fn(); |
| 105 | +const result = await repairSessionFileIfNeeded({ sessionFile: file, debug }); |
| 106 | + |
| 107 | +expect(result.repaired).toBe(true); |
| 108 | +expect(result.backupPath).toMatch(/session\.jsonl\.bak-/); |
| 109 | +expect(debug.mock.calls.some(([message]) => String(message).includes("cleanup failed"))).toBe( |
| 110 | +true, |
| 111 | +); |
| 112 | +const siblings = await fs.readdir(path.dirname(file)); |
| 113 | +expect(siblings.filter((name) => name.includes(".bak-"))).toHaveLength(1); |
| 114 | +}); |
| 115 | + |
96 | 116 | it("does not drop CRLF-terminated JSONL lines", async () => { |
97 | 117 | const { file } = await createTempSessionPath(); |
98 | 118 | const { header, message } = buildSessionHeaderAndMessage(); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。