mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-03 17:34:07 +00:00
Skip browser lifecycle cleanup when root browser support or the browser plugin entry is disabled, and make the browser maintenance facade respect activation before cached surface use. Also stabilize the resource-only MCP runtime test by waiting for the async rejection log that CI can observe late. Verification: - pnpm test src/plugin-sdk/browser-maintenance.test.ts src/browser-lifecycle-cleanup.test.ts src/auto-reply/reply/session.test.ts src/gateway/server.sessions.reset-cleanup.test.ts src/agents/auth-profiles/usage.test.ts - pnpm test src/agents/agent-bundle-mcp-runtime.test.ts - git diff --check - pnpm build - autoreview local: no accepted/actionable findings - GitHub Actions: CI 26693713166, CodeQL 26693713159, CodeQL Critical Quality 26693713157, OpenGrep PR Diff 26693713125, Workflow Sanity 26693713149, Dependency Guard 26693712478 Co-authored-by: Nicolas Van Eenaeme <nicolas@poison.be>
70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import type { OpenClawConfig } from "./config/types.openclaw.js";
|
|
|
|
const closeTrackedBrowserTabsForSessions = vi.hoisted(() => vi.fn(async () => 0));
|
|
|
|
vi.mock("./plugin-sdk/browser-maintenance.js", () => ({
|
|
closeTrackedBrowserTabsForSessions,
|
|
}));
|
|
|
|
const { cleanupBrowserSessionsForLifecycleEnd } = await import("./browser-lifecycle-cleanup.js");
|
|
|
|
describe("cleanupBrowserSessionsForLifecycleEnd", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it("normalizes session keys before closing browser sessions", async () => {
|
|
const onWarn = vi.fn();
|
|
|
|
await expect(
|
|
cleanupBrowserSessionsForLifecycleEnd({
|
|
sessionKeys: ["", " session-a ", "session-a", "session-b"],
|
|
onWarn,
|
|
}),
|
|
).resolves.toBeUndefined();
|
|
|
|
expect(closeTrackedBrowserTabsForSessions).toHaveBeenCalledWith({
|
|
sessionKeys: ["session-a", "session-b"],
|
|
onWarn,
|
|
});
|
|
});
|
|
|
|
it("skips cleanup when root browser support is disabled", async () => {
|
|
await expect(
|
|
cleanupBrowserSessionsForLifecycleEnd({
|
|
cfg: { browser: { enabled: false } } as OpenClawConfig,
|
|
sessionKeys: ["session-a"],
|
|
}),
|
|
).resolves.toBeUndefined();
|
|
|
|
expect(closeTrackedBrowserTabsForSessions).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("skips cleanup when the browser plugin entry is disabled", async () => {
|
|
await expect(
|
|
cleanupBrowserSessionsForLifecycleEnd({
|
|
cfg: { plugins: { entries: { browser: { enabled: false } } } } as OpenClawConfig,
|
|
sessionKeys: ["session-a"],
|
|
}),
|
|
).resolves.toBeUndefined();
|
|
|
|
expect(closeTrackedBrowserTabsForSessions).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("swallows browser cleanup failures", async () => {
|
|
const onError = vi.fn();
|
|
const error = new Error("cleanup failed");
|
|
closeTrackedBrowserTabsForSessions.mockRejectedValueOnce(error);
|
|
|
|
await expect(
|
|
cleanupBrowserSessionsForLifecycleEnd({
|
|
sessionKeys: ["session-a"],
|
|
onError,
|
|
}),
|
|
).resolves.toBeUndefined();
|
|
|
|
expect(onError).toHaveBeenCalledWith(error);
|
|
});
|
|
});
|