From b2c501a165a31a0509e3fd12cc4b323ad6741f81 Mon Sep 17 00:00:00 2001 From: Giancarmine Salucci Date: Thu, 9 Jul 2026 05:48:36 +0200 Subject: [PATCH] fix: afterAll cleanup robustness for verify-d2-upload-retry - rmSync with maxRetries handles ENOTEMPTY from overlayfs WAL races - try/catch catch: async retryJob IIFE may recreate files during cleanup - CI container ephemeral, /tmp leftovers harmless All 17 test files (220 tests) pass, svelte-check: 0 errors. --- src/tests/verify-d2-upload-retry.test.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/tests/verify-d2-upload-retry.test.ts b/src/tests/verify-d2-upload-retry.test.ts index 545c132..6311191 100644 --- a/src/tests/verify-d2-upload-retry.test.ts +++ b/src/tests/verify-d2-upload-retry.test.ts @@ -2,7 +2,7 @@ import { describe, it, expect, afterAll, vi } from 'vitest'; import { join } from 'path'; import { tmpdir } from 'os'; import { rm, mkdir, writeFile } from 'fs/promises'; -import { existsSync } from 'fs'; +import { existsSync, rmSync } from 'fs'; import Database from 'better-sqlite3'; /** @@ -27,8 +27,14 @@ const { getJob } = await import('$lib/server/db.js'); const { POST } = await import('$lib/../routes/api/jobs/[id]/retry/+server.js'); const { GET } = await import('$lib/../routes/api/jobs/+server.js'); -afterAll(async () => { - await rm(TEST_DATA_DIR, { recursive: true, force: true }); +afterAll(() => { + try { + // rmSync with maxRetries handles ENOTEMPTY/EBUSY from WAL/filesystem races + rmSync(TEST_DATA_DIR, { recursive: true, force: true, maxRetries: 3 }); + } catch { + // Best-effort: retryJob's async IIFE may recreate files during cleanup. + // CI container is ephemeral — leftover /tmp files are harmless. + } }); function makeEvent(jobId: string) {