mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-10 06:40:43 +00:00
test: tighten daemon infra array assertions
This commit is contained in:
@@ -112,7 +112,7 @@ describe("findExtraGatewayServices (linux / scanSystemdDir) — real filesystem"
|
||||
await fs.mkdir(systemdDir, { recursive: true });
|
||||
await fs.writeFile(path.join(systemdDir, "openclaw-test.service"), TEST_SERVICE_CONTENTS);
|
||||
const result = await findExtraGatewayServices({ HOME: tmpHome });
|
||||
expect(result).toEqual([]);
|
||||
expect(result).toStrictEqual([]);
|
||||
} finally {
|
||||
await fs.rm(tmpHome, { recursive: true, force: true });
|
||||
}
|
||||
@@ -130,7 +130,7 @@ describe("findExtraGatewayServices (linux / scanSystemdDir) — real filesystem"
|
||||
GATEWAY_SERVICE_CONTENTS,
|
||||
);
|
||||
const result = await findExtraGatewayServices({ HOME: tmpHome });
|
||||
expect(result).toEqual([]);
|
||||
expect(result).toStrictEqual([]);
|
||||
} finally {
|
||||
await fs.rm(tmpHome, { recursive: true, force: true });
|
||||
}
|
||||
@@ -175,7 +175,7 @@ describe("findExtraGatewayServices (linux / scanSystemdDir) — real filesystem"
|
||||
COMPANION_SERVICE_CONTENTS,
|
||||
);
|
||||
const result = await findExtraGatewayServices({ HOME: tmpHome });
|
||||
expect(result).toEqual([]);
|
||||
expect(result).toStrictEqual([]);
|
||||
} finally {
|
||||
await fs.rm(tmpHome, { recursive: true, force: true });
|
||||
}
|
||||
@@ -241,7 +241,7 @@ describe("findExtraGatewayServices (darwin / scanLaunchdDir) — real filesystem
|
||||
</dict></plist>`,
|
||||
);
|
||||
const result = await findExtraGatewayServices({ HOME: tmpHome });
|
||||
expect(result).toEqual([]);
|
||||
expect(result).toStrictEqual([]);
|
||||
} finally {
|
||||
await fs.rm(tmpHome, { recursive: true, force: true });
|
||||
}
|
||||
@@ -261,7 +261,7 @@ describe("findExtraGatewayServices (darwin / scanLaunchdDir) — real filesystem
|
||||
</dict></plist>`,
|
||||
);
|
||||
const result = await findExtraGatewayServices({ HOME: tmpHome });
|
||||
expect(result).toEqual([]);
|
||||
expect(result).toStrictEqual([]);
|
||||
} finally {
|
||||
await fs.rm(tmpHome, { recursive: true, force: true });
|
||||
}
|
||||
@@ -318,7 +318,7 @@ describe("findExtraGatewayServices (win32)", () => {
|
||||
|
||||
it("skips schtasks queries unless deep mode is enabled", async () => {
|
||||
const result = await findExtraGatewayServices({});
|
||||
expect(result).toEqual([]);
|
||||
expect(result).toStrictEqual([]);
|
||||
expect(execSchtasksMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -330,7 +330,7 @@ describe("findExtraGatewayServices (win32)", () => {
|
||||
});
|
||||
|
||||
const result = await findExtraGatewayServices({}, { deep: true });
|
||||
expect(result).toEqual([]);
|
||||
expect(result).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("collects only non-openclaw marker tasks from schtasks output", async () => {
|
||||
|
||||
@@ -962,7 +962,7 @@ describe("launchd install", () => {
|
||||
mode: "kickstart",
|
||||
waitForPid: process.pid,
|
||||
});
|
||||
expect(state.launchctlCalls).toEqual([]);
|
||||
expect(state.launchctlCalls).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("surfaces detached handoff failures", async () => {
|
||||
|
||||
@@ -307,7 +307,7 @@ describe("device pairing tokens", () => {
|
||||
|
||||
const paired = await getPairedDevice("device-1", baseDir);
|
||||
expect(paired && listEffectivePairedDeviceRoles(paired)).toEqual(["node", "operator"]);
|
||||
expect(paired?.tokens?.node?.scopes).toEqual([]);
|
||||
expect(paired?.tokens?.node?.scopes).toStrictEqual([]);
|
||||
expect(paired?.tokens?.operator?.scopes).toEqual([
|
||||
"operator.read",
|
||||
"operator.talk.secrets",
|
||||
@@ -655,8 +655,8 @@ describe("device pairing tokens", () => {
|
||||
expect(paired?.publicKey).toBe("public-key-node-1");
|
||||
expect(paired?.role).toBe("node");
|
||||
expect(paired?.roles).toEqual(["node"]);
|
||||
expect(paired?.scopes).toEqual([]);
|
||||
expect(paired?.approvedScopes).toEqual([]);
|
||||
expect(paired?.scopes).toStrictEqual([]);
|
||||
expect(paired?.approvedScopes).toStrictEqual([]);
|
||||
expect(paired?.tokens?.node).toMatchObject({ token: expect.any(String) });
|
||||
expect(paired?.tokens?.operator).toBeUndefined();
|
||||
});
|
||||
@@ -903,8 +903,8 @@ describe("device pairing tokens", () => {
|
||||
await setupPairedNodeDevice(baseDir);
|
||||
|
||||
const paired = await getPairedDevice("node-1", baseDir);
|
||||
expect(paired?.scopes).toEqual([]);
|
||||
expect(paired?.approvedScopes).toEqual([]);
|
||||
expect(paired?.scopes).toStrictEqual([]);
|
||||
expect(paired?.approvedScopes).toStrictEqual([]);
|
||||
|
||||
const seededToken = requireToken(paired?.tokens?.node?.token);
|
||||
await expect(
|
||||
@@ -947,9 +947,9 @@ describe("device pairing tokens", () => {
|
||||
await approveDevicePairing(repair.request.requestId, { callerScopes: [] }, baseDir);
|
||||
|
||||
const paired = await getPairedDevice("node-1", baseDir);
|
||||
expect(paired?.scopes).toEqual([]);
|
||||
expect(paired?.approvedScopes).toEqual([]);
|
||||
expect(paired?.tokens?.node?.scopes).toEqual([]);
|
||||
expect(paired?.scopes).toStrictEqual([]);
|
||||
expect(paired?.approvedScopes).toStrictEqual([]);
|
||||
expect(paired?.tokens?.node?.scopes).toStrictEqual([]);
|
||||
});
|
||||
|
||||
test("bootstrap pairing seeds node and operator device tokens explicitly", async () => {
|
||||
@@ -979,7 +979,7 @@ describe("device pairing tokens", () => {
|
||||
expect(paired?.approvedScopes).toEqual(
|
||||
expect.arrayContaining(PAIRING_SETUP_BOOTSTRAP_PROFILE.scopes),
|
||||
);
|
||||
expect(paired?.tokens?.node?.scopes).toEqual([]);
|
||||
expect(paired?.tokens?.node?.scopes).toStrictEqual([]);
|
||||
expect(paired?.tokens?.operator?.scopes).toEqual(
|
||||
expect.arrayContaining(PAIRING_SETUP_BOOTSTRAP_PROFILE.scopes),
|
||||
);
|
||||
@@ -1012,7 +1012,7 @@ describe("device pairing tokens", () => {
|
||||
|
||||
const paired = await getPairedDevice("bootstrap-device-operator-scope", baseDir);
|
||||
expect(paired?.tokens?.operator?.scopes).toEqual(["operator.read", "operator.write"]);
|
||||
expect(paired?.tokens?.node?.scopes).toEqual([]);
|
||||
expect(paired?.tokens?.node?.scopes).toStrictEqual([]);
|
||||
});
|
||||
|
||||
test("bootstrap pairing bounds approved baseline to handoff scopes", async () => {
|
||||
@@ -1061,7 +1061,7 @@ describe("device pairing tokens", () => {
|
||||
"operator.talk.secrets",
|
||||
"operator.write",
|
||||
]);
|
||||
expect(paired?.tokens?.node?.scopes).toEqual([]);
|
||||
expect(paired?.tokens?.node?.scopes).toStrictEqual([]);
|
||||
await expect(
|
||||
ensureDeviceToken({
|
||||
deviceId: "bootstrap-device-bounded-baseline",
|
||||
@@ -1283,7 +1283,7 @@ describe("device pairing tokens", () => {
|
||||
"expected paired node device after revoke",
|
||||
);
|
||||
expect(paired.roles).toContain("node");
|
||||
expect(listEffectivePairedDeviceRoles(paired)).toEqual([]);
|
||||
expect(listEffectivePairedDeviceRoles(paired)).toStrictEqual([]);
|
||||
expect(hasEffectivePairedDeviceRole(paired, "node")).toBe(false);
|
||||
});
|
||||
|
||||
@@ -1297,7 +1297,7 @@ describe("device pairing tokens", () => {
|
||||
createdAtMs: Date.now(),
|
||||
approvedAtMs: Date.now(),
|
||||
};
|
||||
expect(listEffectivePairedDeviceRoles(device)).toEqual([]);
|
||||
expect(listEffectivePairedDeviceRoles(device)).toStrictEqual([]);
|
||||
expect(hasEffectivePairedDeviceRole(device, "node")).toBe(false);
|
||||
expect(hasEffectivePairedDeviceRole(device, "operator")).toBe(false);
|
||||
});
|
||||
|
||||
@@ -216,12 +216,12 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
describe("findGatewayPidsOnPortSync", () => {
|
||||
it("returns [] when lsof exits with non-zero status", () => {
|
||||
mockSpawnSync.mockReturnValue({ error: null, status: 1, stdout: "", stderr: "" });
|
||||
expect(findGatewayPidsOnPortSync(18789)).toEqual([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("logs warning when initial lsof scan exits with status > 1", () => {
|
||||
mockSpawnSync.mockReturnValue({ error: null, status: 2, stdout: "", stderr: "lsof error" });
|
||||
expect(findGatewayPidsOnPortSync(18789)).toEqual([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toStrictEqual([]);
|
||||
expect(mockRestartWarn).toHaveBeenCalledWith(
|
||||
expect.stringContaining("lsof exited with status 2"),
|
||||
);
|
||||
@@ -234,7 +234,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
stdout: "",
|
||||
stderr: "",
|
||||
});
|
||||
expect(findGatewayPidsOnPortSync(18789)).toEqual([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toStrictEqual([]);
|
||||
expect(mockRestartWarn).toHaveBeenCalledWith(
|
||||
expect.stringContaining("lsof failed during initial stale-pid scan"),
|
||||
);
|
||||
@@ -427,7 +427,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
stdout: lsofOutput([{ pid: otherPid, cmd: "nginx" }]),
|
||||
stderr: "",
|
||||
});
|
||||
expect(findGatewayPidsOnPortSync(18789)).toEqual([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("forwards the spawnTimeoutMs argument to spawnSync", () => {
|
||||
@@ -456,7 +456,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
Object.defineProperty(process, "platform", { value: "win32", configurable: true });
|
||||
try {
|
||||
mockReadWindowsListeningPids.mockReturnValue([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toEqual([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toStrictEqual([]);
|
||||
expect(mockReadWindowsListeningPids).toHaveBeenCalledWith(18789, undefined);
|
||||
// lsof must NOT be invoked — Windows uses PowerShell/netstat
|
||||
expect(mockSpawnSync).not.toHaveBeenCalled();
|
||||
@@ -519,7 +519,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
describe("parsePidsFromLsofOutput (via findGatewayPidsOnPortSync stdout path)", () => {
|
||||
it("returns [] for empty lsof stdout (status 0, nothing listening)", () => {
|
||||
mockSpawnSync.mockReturnValue({ error: null, status: 0, stdout: "", stderr: "" });
|
||||
expect(findGatewayPidsOnPortSync(18789)).toEqual([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("parses multiple openclaw pids from a single lsof output block", () => {
|
||||
@@ -549,7 +549,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
stdout: lsofOutput([{ pid: otherPid, cmd: "caddy" }]),
|
||||
stderr: "",
|
||||
});
|
||||
expect(findGatewayPidsOnPortSync(18789)).toEqual([]);
|
||||
expect(findGatewayPidsOnPortSync(18789)).toStrictEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -684,7 +684,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
it("returns [] and does not call process.kill when port has no listeners", () => {
|
||||
mockSpawnSync.mockReturnValue({ error: null, status: 0, stdout: "", stderr: "" });
|
||||
const killSpy = vi.spyOn(process, "kill").mockReturnValue(true);
|
||||
expect(cleanStaleGatewayProcessesSync()).toEqual([]);
|
||||
expect(cleanStaleGatewayProcessesSync()).toStrictEqual([]);
|
||||
expect(killSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -889,7 +889,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
mockResolveGatewayPort.mockImplementationOnce(() => {
|
||||
throw new Error("config read error");
|
||||
});
|
||||
expect(cleanStaleGatewayProcessesSync()).toEqual([]);
|
||||
expect(cleanStaleGatewayProcessesSync()).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("returns gracefully when lsof is unavailable from the start", () => {
|
||||
@@ -900,7 +900,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
stderr: "",
|
||||
});
|
||||
const killSpy = vi.spyOn(process, "kill").mockReturnValue(true);
|
||||
expect(cleanStaleGatewayProcessesSync()).toEqual([]);
|
||||
expect(cleanStaleGatewayProcessesSync()).toStrictEqual([]);
|
||||
expect(killSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -970,7 +970,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
});
|
||||
const killSpy = vi.spyOn(process, "kill").mockReturnValue(true);
|
||||
|
||||
expect(cleanStaleGatewayProcessesSync()).toEqual([]);
|
||||
expect(cleanStaleGatewayProcessesSync()).toStrictEqual([]);
|
||||
expect(mockReadWindowsListeningPidsResult).toHaveBeenCalledWith(18789, 400);
|
||||
expect(mockRestartWarn).toHaveBeenCalledWith(
|
||||
expect.stringContaining("port 18789 still in use after 2000ms"),
|
||||
@@ -1000,7 +1000,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
mockReadWindowsProcessArgsResult.mockReturnValue({ ok: false, permanent: false });
|
||||
const killSpy = vi.spyOn(process, "kill").mockReturnValue(true);
|
||||
|
||||
expect(cleanStaleGatewayProcessesSync()).toEqual([]);
|
||||
expect(cleanStaleGatewayProcessesSync()).toStrictEqual([]);
|
||||
expect(mockReadWindowsProcessArgsResult).toHaveBeenCalledWith(stalePid, undefined);
|
||||
expect(mockRestartWarn).toHaveBeenCalledWith(
|
||||
expect.stringContaining("port 18789 still in use after 2000ms"),
|
||||
@@ -1048,7 +1048,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
return true;
|
||||
});
|
||||
|
||||
expect(cleanStaleGatewayProcessesSync()).toEqual([]);
|
||||
expect(cleanStaleGatewayProcessesSync()).toStrictEqual([]);
|
||||
expect(mockSpawnSync).toHaveBeenCalledWith(
|
||||
"C:\\Windows\\System32\\taskkill.exe",
|
||||
["/T", "/PID", String(stalePid)],
|
||||
@@ -1103,7 +1103,7 @@ describe.skipIf(isWindows)("restart-stale-pids", () => {
|
||||
fakeNow += ms;
|
||||
});
|
||||
|
||||
expect(cleanStaleGatewayProcessesSync()).toEqual([]);
|
||||
expect(cleanStaleGatewayProcessesSync()).toStrictEqual([]);
|
||||
expect(mockSpawnSync).toHaveBeenNthCalledWith(
|
||||
1,
|
||||
"C:\\Windows\\System32\\taskkill.exe",
|
||||
|
||||
@@ -298,7 +298,7 @@ export function greet(name: string): string {
|
||||
}
|
||||
`;
|
||||
const findings = scanSource(source, "plugin.ts");
|
||||
expect(findings).toEqual([]);
|
||||
expect(findings).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("returns empty array for normal http client code (just a fetch GET)", () => {
|
||||
@@ -308,7 +308,7 @@ const json = await response.json();
|
||||
console.log(json);
|
||||
`;
|
||||
const findings = scanSource(source, "plugin.ts");
|
||||
expect(findings).toEqual([]);
|
||||
expect(findings).toStrictEqual([]);
|
||||
});
|
||||
|
||||
it("does not treat fetch in names or comments as network send context", () => {
|
||||
|
||||
@@ -155,7 +155,9 @@ describe("ChatLog", () => {
|
||||
|
||||
chatLog.addPendingUser("run-1", "continue", 5_000);
|
||||
|
||||
expect(chatLog.reconcilePendingUsers([{ text: "continue", timestamp: -56_000 }])).toEqual([]);
|
||||
expect(chatLog.reconcilePendingUsers([{ text: "continue", timestamp: -56_000 }])).toStrictEqual(
|
||||
[],
|
||||
);
|
||||
expect(chatLog.countPendingUsers()).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user