97 lines
3.0 KiB
TypeScript
97 lines
3.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { parseSystemdShow, resolveSystemdUserUnitPath } from "./systemd.js";
|
|
|
|
describe("systemd runtime parsing", () => {
|
|
it("parses active state details", () => {
|
|
const output = [
|
|
"ActiveState=inactive",
|
|
"SubState=dead",
|
|
"MainPID=0",
|
|
"ExecMainStatus=2",
|
|
"ExecMainCode=exited",
|
|
].join("\n");
|
|
expect(parseSystemdShow(output)).toEqual({
|
|
activeState: "inactive",
|
|
subState: "dead",
|
|
execMainStatus: 2,
|
|
execMainCode: "exited",
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("resolveSystemdUserUnitPath", () => {
|
|
it("uses default service name when CLAWDBOT_PROFILE is default", () => {
|
|
const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "default" };
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/clawdbot-gateway.service",
|
|
);
|
|
});
|
|
|
|
it("uses default service name when CLAWDBOT_PROFILE is unset", () => {
|
|
const env = { HOME: "/home/test" };
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/clawdbot-gateway.service",
|
|
);
|
|
});
|
|
|
|
it("uses profile-specific service name when CLAWDBOT_PROFILE is set to a custom value", () => {
|
|
const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "jbphoenix" };
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/clawdbot-gateway-jbphoenix.service",
|
|
);
|
|
});
|
|
|
|
it("prefers CLAWDBOT_SYSTEMD_UNIT over CLAWDBOT_PROFILE", () => {
|
|
const env = {
|
|
HOME: "/home/test",
|
|
CLAWDBOT_PROFILE: "jbphoenix",
|
|
CLAWDBOT_SYSTEMD_UNIT: "custom-unit",
|
|
};
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/custom-unit.service",
|
|
);
|
|
});
|
|
|
|
it("handles CLAWDBOT_SYSTEMD_UNIT with .service suffix", () => {
|
|
const env = {
|
|
HOME: "/home/test",
|
|
CLAWDBOT_SYSTEMD_UNIT: "custom-unit.service",
|
|
};
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/custom-unit.service",
|
|
);
|
|
});
|
|
|
|
it("trims whitespace from CLAWDBOT_SYSTEMD_UNIT", () => {
|
|
const env = {
|
|
HOME: "/home/test",
|
|
CLAWDBOT_SYSTEMD_UNIT: " custom-unit ",
|
|
};
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/custom-unit.service",
|
|
);
|
|
});
|
|
|
|
it("handles case-insensitive 'Default' profile", () => {
|
|
const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "Default" };
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/clawdbot-gateway.service",
|
|
);
|
|
});
|
|
|
|
it("handles case-insensitive 'DEFAULT' profile", () => {
|
|
const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "DEFAULT" };
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/clawdbot-gateway.service",
|
|
);
|
|
});
|
|
|
|
it("trims whitespace from CLAWDBOT_PROFILE", () => {
|
|
const env = { HOME: "/home/test", CLAWDBOT_PROFILE: " myprofile " };
|
|
expect(resolveSystemdUserUnitPath(env)).toBe(
|
|
"/home/test/.config/systemd/user/clawdbot-gateway-myprofile.service",
|
|
);
|
|
});
|
|
});
|