From ec2278192db366de601badffdc9a9983945ad526 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Thu, 19 Mar 2026 14:39:22 -0700 Subject: [PATCH] fix(ci): reduce test runtime retention hotspots --- src/infra/channel-summary.test.ts | 13 ++------ src/memory/qmd-manager.test.ts | 49 +++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/src/infra/channel-summary.test.ts b/src/infra/channel-summary.test.ts index 24eb8ca966d..01a4450a640 100644 --- a/src/infra/channel-summary.test.ts +++ b/src/infra/channel-summary.test.ts @@ -1,19 +1,12 @@ -import { beforeEach, describe, expect, it, vi } from "vitest"; +import { describe, expect, it, vi } from "vitest"; +import { listChannelPlugins } from "../channels/plugins/index.js"; import type { ChannelPlugin } from "../channels/plugins/types.js"; +import { buildChannelSummary } from "./channel-summary.js"; vi.mock("../channels/plugins/index.js", () => ({ listChannelPlugins: vi.fn(), })); -let buildChannelSummary: typeof import("./channel-summary.js").buildChannelSummary; -let listChannelPlugins: typeof import("../channels/plugins/index.js").listChannelPlugins; - -beforeEach(async () => { - vi.resetModules(); - ({ buildChannelSummary } = await import("./channel-summary.js")); - ({ listChannelPlugins } = await import("../channels/plugins/index.js")); -}); - function makeSlackHttpSummaryPlugin(): ChannelPlugin { return { id: "slack", diff --git a/src/memory/qmd-manager.test.ts b/src/memory/qmd-manager.test.ts index 0f08affe6a0..f283459c61d 100644 --- a/src/memory/qmd-manager.test.ts +++ b/src/memory/qmd-manager.test.ts @@ -104,16 +104,26 @@ describe("QmdMemoryManager", () => { let stateDir: string; let cfg: OpenClawConfig; const agentId = "main"; + const openManagers = new Set(); + + function trackManager(manager: T): T { + if (manager) { + openManagers.add(manager); + } + return manager; + } async function createManager(params?: { mode?: "full" | "status"; cfg?: OpenClawConfig }) { const cfgToUse = params?.cfg ?? cfg; const resolved = resolveMemoryBackendConfig({ cfg: cfgToUse, agentId }); - const manager = await QmdMemoryManager.create({ - cfg: cfgToUse, - agentId, - resolved, - mode: params?.mode ?? "status", - }); + const manager = trackManager( + await QmdMemoryManager.create({ + cfg: cfgToUse, + agentId, + resolved, + mode: params?.mode ?? "status", + }), + ); expect(manager).toBeTruthy(); if (!manager) { throw new Error("manager missing"); @@ -161,7 +171,14 @@ describe("QmdMemoryManager", () => { } as OpenClawConfig; }); - afterEach(() => { + afterEach(async () => { + await Promise.all( + Array.from(openManagers, async (manager) => { + await manager.close(); + }), + ); + openManagers.clear(); + await fs.rm(tmpRoot, { recursive: true, force: true }); vi.useRealTimers(); delete process.env.OPENCLAW_STATE_DIR; if (originalPath === undefined) { @@ -365,12 +382,14 @@ describe("QmdMemoryManager", () => { }); const resolved = resolveMemoryBackendConfig({ cfg, agentId: devAgentId }); - const manager = await QmdMemoryManager.create({ - cfg, - agentId: devAgentId, - resolved, - mode: "full", - }); + const manager = trackManager( + await QmdMemoryManager.create({ + cfg, + agentId: devAgentId, + resolved, + mode: "full", + }), + ); expect(manager).toBeTruthy(); await manager?.close(); @@ -755,7 +774,7 @@ describe("QmdMemoryManager", () => { const resolved = resolveMemoryBackendConfig({ cfg, agentId }); const createPromise = QmdMemoryManager.create({ cfg, agentId, resolved, mode: "status" }); await vi.advanceTimersByTimeAsync(0); - const manager = await createPromise; + const manager = trackManager(await createPromise); expect(manager).toBeTruthy(); if (!manager) { throw new Error("manager missing"); @@ -1985,7 +2004,7 @@ describe("QmdMemoryManager", () => { const resolved = resolveMemoryBackendConfig({ cfg, agentId }); const createPromise = QmdMemoryManager.create({ cfg, agentId, resolved, mode: "status" }); await vi.advanceTimersByTimeAsync(0); - const manager = await createPromise; + const manager = trackManager(await createPromise); expect(manager).toBeTruthy(); if (!manager) { throw new Error("manager missing");