Files
openclaw/src/signal/probe.test.ts
2026-02-16 00:18:27 +00:00

70 lines
2.2 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
import { classifySignalCliLogLine } from "./daemon.js";
import { probeSignal } from "./probe.js";
const signalCheckMock = vi.fn();
const signalRpcRequestMock = vi.fn();
vi.mock("./client.js", () => ({
signalCheck: (...args: unknown[]) => signalCheckMock(...args),
signalRpcRequest: (...args: unknown[]) => signalRpcRequestMock(...args),
}));
describe("probeSignal", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("extracts version from {version} result", async () => {
signalCheckMock.mockResolvedValueOnce({
ok: true,
status: 200,
error: null,
});
signalRpcRequestMock.mockResolvedValueOnce({ version: "0.13.22" });
const res = await probeSignal("http://127.0.0.1:8080", 1000);
expect(res.ok).toBe(true);
expect(res.version).toBe("0.13.22");
expect(res.status).toBe(200);
});
it("returns ok=false when /check fails", async () => {
signalCheckMock.mockResolvedValueOnce({
ok: false,
status: 503,
error: "HTTP 503",
});
const res = await probeSignal("http://127.0.0.1:8080", 1000);
expect(res.ok).toBe(false);
expect(res.status).toBe(503);
expect(res.version).toBe(null);
});
});
describe("classifySignalCliLogLine", () => {
it("treats INFO/DEBUG as log (even if emitted on stderr)", () => {
expect(classifySignalCliLogLine("INFO DaemonCommand - Started")).toBe("log");
expect(classifySignalCliLogLine("DEBUG Something")).toBe("log");
});
it("treats WARN/ERROR as error", () => {
expect(classifySignalCliLogLine("WARN Something")).toBe("error");
expect(classifySignalCliLogLine("WARNING Something")).toBe("error");
expect(classifySignalCliLogLine("ERROR Something")).toBe("error");
});
it("treats failures without explicit severity as error", () => {
expect(classifySignalCliLogLine("Failed to initialize HTTP Server - oops")).toBe("error");
expect(classifySignalCliLogLine('Exception in thread "main"')).toBe("error");
});
it("returns null for empty lines", () => {
expect(classifySignalCliLogLine("")).toBe(null);
expect(classifySignalCliLogLine(" ")).toBe(null);
});
});