import { describe, expect, it, vi } from "vitest" ;
import {
buildCliRespawnPlan,
EXPERIMENTAL_WARNING_FLAG,
OPENCLAW_NODE_EXTRA_CA_CERTS_READY,
OPENCLAW_NODE_OPTIONS_READY,
} from "./entry.respawn.js" ;
const shouldSkipRespawnForArgvMock = vi.hoisted(() => vi.fn(() => false ));
const isTruthyEnvValueMock = vi.hoisted(() =>
vi.fn((value: string | undefined) => value === "1" || value === "true" ),
);
vi.mock("./cli/respawn-policy.js" , () => ({
shouldSkipRespawnForArgv: shouldSkipRespawnForArgvMock,
}));
vi.mock("./infra/env.js" , () => ({
isTruthyEnvValue: isTruthyEnvValueMock,
}));
describe("buildCliRespawnPlan" , () => {
it("returns null when respawn policy skips the argv" , () => {
shouldSkipRespawnForArgvMock.mockReturnValueOnce(true );
expect(
buildCliRespawnPlan({
argv: ["node" , "openclaw" , "status" ],
env: {},
execArgv: [],
autoNodeExtraCaCerts: "/etc/ssl/certs/ca-certificates.crt" ,
}),
).toBeNull();
});
it("adds NODE_EXTRA_CA_CERTS and warning suppression in one respawn" , () => {
const plan = buildCliRespawnPlan({
argv: ["node" , "openclaw" , "gateway" , "run" ],
env: {},
execArgv: [],
autoNodeExtraCaCerts: "/etc/ssl/certs/ca-certificates.crt" ,
});
expect(plan).not.toBeNull();
expect(plan?.argv[0 ]).toBe(EXPERIMENTAL_WARNING_FLAG);
expect(plan?.env.NODE_EXTRA_CA_CERTS).toBe("/etc/ssl/certs/ca-certificates.crt" );
expect(plan?.env[OPENCLAW_NODE_EXTRA_CA_CERTS_READY]).toBe("1" );
expect(plan?.env[OPENCLAW_NODE_OPTIONS_READY]).toBe("1" );
});
it("does not overwrite an existing NODE_EXTRA_CA_CERTS value" , () => {
const plan = buildCliRespawnPlan({
argv: ["node" , "openclaw" , "gateway" , "run" ],
env: { NODE_EXTRA_CA_CERTS: "/custom/ca.pem" },
execArgv: [],
autoNodeExtraCaCerts: "/etc/ssl/certs/ca-certificates.crt" ,
});
expect(plan?.env.NODE_EXTRA_CA_CERTS).toBe("/custom/ca.pem" );
});
it("returns null when both respawn guards are already satisfied" , () => {
expect(
buildCliRespawnPlan({
argv: ["node" , "openclaw" , "gateway" , "run" ],
env: {
[OPENCLAW_NODE_EXTRA_CA_CERTS_READY]: "1" ,
[OPENCLAW_NODE_OPTIONS_READY]: "1" ,
},
execArgv: [EXPERIMENTAL_WARNING_FLAG],
autoNodeExtraCaCerts: "/etc/ssl/certs/ca-certificates.crt" ,
}),
).toBeNull();
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland