Files
openclaw/src/config/io.validation-fails-closed.test.ts
Peter Steinberger f53e10e3fd fix(config): fail closed on invalid config load (#9040, thanks @joetomasone)
Land #9040 by @joetomasone. Add fail-closed config loading, compat coverage, and changelog entry for #5052.

Co-authored-by: Joe Tomasone <joe@tomasone.com>
2026-03-07 22:39:26 +00:00

58 lines
1.6 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
import { clearConfigCache, loadConfig } from "./config.js";
import { withTempHomeConfig } from "./test-helpers.js";
describe("config validation fail-closed behavior", () => {
beforeEach(() => {
clearConfigCache();
vi.restoreAllMocks();
});
it("throws INVALID_CONFIG instead of returning an empty config", async () => {
await withTempHomeConfig(
{
agents: { list: [{ id: "main" }] },
nope: true,
channels: {
whatsapp: {
dmPolicy: "allowlist",
allowFrom: ["+1234567890"],
},
},
},
async () => {
const spy = vi.spyOn(console, "error").mockImplementation(() => {});
let thrown: unknown;
try {
loadConfig();
} catch (err) {
thrown = err;
}
expect(thrown).toBeInstanceOf(Error);
expect((thrown as { code?: string } | undefined)?.code).toBe("INVALID_CONFIG");
expect(spy).toHaveBeenCalled();
},
);
});
it("still loads valid security settings unchanged", async () => {
await withTempHomeConfig(
{
agents: { list: [{ id: "main" }] },
channels: {
whatsapp: {
dmPolicy: "allowlist",
allowFrom: ["+1234567890"],
},
},
},
async () => {
const cfg = loadConfig();
expect(cfg.channels?.whatsapp?.dmPolicy).toBe("allowlist");
expect(cfg.channels?.whatsapp?.allowFrom).toEqual(["+1234567890"]);
},
);
});
});