mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-04 20:00:22 +00:00
98 lines
2.8 KiB
TypeScript
98 lines
2.8 KiB
TypeScript
import { randomUUID } from "node:crypto";
|
|
import { describe, expect, it } from "vitest";
|
|
import {
|
|
getRemoteSkillEligibility,
|
|
recordRemoteNodeBins,
|
|
recordRemoteNodeInfo,
|
|
removeRemoteNodeInfo,
|
|
} from "./skills-remote.js";
|
|
|
|
describe("skills-remote", () => {
|
|
it("removes disconnected nodes from remote skill eligibility", () => {
|
|
const nodeId = `node-${randomUUID()}`;
|
|
const bin = `bin-${randomUUID()}`;
|
|
recordRemoteNodeInfo({
|
|
nodeId,
|
|
displayName: "Remote Mac",
|
|
platform: "darwin",
|
|
commands: ["system.run"],
|
|
});
|
|
recordRemoteNodeBins(nodeId, [bin]);
|
|
|
|
expect(getRemoteSkillEligibility()?.hasBin(bin)).toBe(true);
|
|
|
|
removeRemoteNodeInfo(nodeId);
|
|
|
|
expect(getRemoteSkillEligibility()?.hasBin(bin) ?? false).toBe(false);
|
|
});
|
|
|
|
it("supports idempotent remote node removal", () => {
|
|
const nodeId = `node-${randomUUID()}`;
|
|
expect(() => {
|
|
removeRemoteNodeInfo(nodeId);
|
|
removeRemoteNodeInfo(nodeId);
|
|
}).not.toThrow();
|
|
});
|
|
|
|
it("ignores non-mac and non-system.run nodes for eligibility", () => {
|
|
const linuxNodeId = `node-${randomUUID()}`;
|
|
const noRunNodeId = `node-${randomUUID()}`;
|
|
const bin = `bin-${randomUUID()}`;
|
|
try {
|
|
recordRemoteNodeInfo({
|
|
nodeId: linuxNodeId,
|
|
displayName: "Linux Box",
|
|
platform: "linux",
|
|
commands: ["system.run"],
|
|
});
|
|
recordRemoteNodeBins(linuxNodeId, [bin]);
|
|
|
|
recordRemoteNodeInfo({
|
|
nodeId: noRunNodeId,
|
|
displayName: "Remote Mac",
|
|
platform: "darwin",
|
|
commands: ["system.which"],
|
|
});
|
|
recordRemoteNodeBins(noRunNodeId, [bin]);
|
|
|
|
expect(getRemoteSkillEligibility()).toBeUndefined();
|
|
} finally {
|
|
removeRemoteNodeInfo(linuxNodeId);
|
|
removeRemoteNodeInfo(noRunNodeId);
|
|
}
|
|
});
|
|
|
|
it("aggregates bins and note labels across eligible mac nodes", () => {
|
|
const nodeA = `node-${randomUUID()}`;
|
|
const nodeB = `node-${randomUUID()}`;
|
|
const binA = `bin-${randomUUID()}`;
|
|
const binB = `bin-${randomUUID()}`;
|
|
try {
|
|
recordRemoteNodeInfo({
|
|
nodeId: nodeA,
|
|
displayName: "Mac Studio",
|
|
platform: "darwin",
|
|
commands: ["system.run"],
|
|
});
|
|
recordRemoteNodeBins(nodeA, [binA]);
|
|
|
|
recordRemoteNodeInfo({
|
|
nodeId: nodeB,
|
|
platform: "macOS",
|
|
commands: ["system.run"],
|
|
});
|
|
recordRemoteNodeBins(nodeB, [binB]);
|
|
|
|
const eligibility = getRemoteSkillEligibility();
|
|
expect(eligibility?.platforms).toEqual(["darwin"]);
|
|
expect(eligibility?.hasBin(binA)).toBe(true);
|
|
expect(eligibility?.hasAnyBin([`missing-${randomUUID()}`, binB])).toBe(true);
|
|
expect(eligibility?.note).toContain("Mac Studio");
|
|
expect(eligibility?.note).toContain(nodeB);
|
|
} finally {
|
|
removeRemoteNodeInfo(nodeA);
|
|
removeRemoteNodeInfo(nodeB);
|
|
}
|
|
});
|
|
});
|