mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 09:00:42 +00:00
test: share schtasks install fixtures
This commit is contained in:
@@ -21,6 +21,14 @@ beforeEach(() => {
|
||||
});
|
||||
|
||||
describe("installScheduledTask", () => {
|
||||
const okSchtasksResponse = { code: 0, stdout: "", stderr: "" };
|
||||
const accessDeniedResponse = { code: 1, stdout: "", stderr: "ERROR: Access is denied." };
|
||||
const missingTaskResponse = {
|
||||
code: 1,
|
||||
stdout: "",
|
||||
stderr: "ERROR: The system cannot find the file specified.",
|
||||
};
|
||||
|
||||
async function withUserProfileDir(
|
||||
run: (tmpDir: string, env: Record<string, string>) => Promise<void>,
|
||||
) {
|
||||
@@ -36,6 +44,24 @@ describe("installScheduledTask", () => {
|
||||
}
|
||||
}
|
||||
|
||||
function installDefaultGatewayTask(env: Record<string, string>) {
|
||||
return installScheduledTask({
|
||||
env,
|
||||
stdout: new PassThrough(),
|
||||
programArguments: ["node", "gateway.js"],
|
||||
environment: {},
|
||||
});
|
||||
}
|
||||
|
||||
function expectInitialTaskQueries(): void {
|
||||
expect(schtasksCalls[0]).toEqual(["/Query"]);
|
||||
expect(schtasksCalls[1]).toEqual(["/Query", "/TN", "OpenClaw Gateway"]);
|
||||
}
|
||||
|
||||
function expectTaskRunCall(index: number): void {
|
||||
expect(schtasksCalls[index]).toEqual(["/Run", "/TN", "OpenClaw Gateway"]);
|
||||
}
|
||||
|
||||
it("writes quoted set assignments and escapes metacharacters", async () => {
|
||||
await withUserProfileDir(async (_tmpDir, env) => {
|
||||
const { scriptPath } = await installScheduledTask({
|
||||
@@ -139,95 +165,64 @@ describe("installScheduledTask", () => {
|
||||
|
||||
it("uses /Create when the task does not exist yet", async () => {
|
||||
await withUserProfileDir(async (_tmpDir, env) => {
|
||||
schtasksResponses.push(
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 1, stdout: "", stderr: "ERROR: The system cannot find the file specified." },
|
||||
);
|
||||
schtasksResponses.push(okSchtasksResponse, missingTaskResponse);
|
||||
|
||||
await installScheduledTask({
|
||||
env,
|
||||
stdout: new PassThrough(),
|
||||
programArguments: ["node", "gateway.js"],
|
||||
environment: {},
|
||||
});
|
||||
await installDefaultGatewayTask(env);
|
||||
|
||||
expect(schtasksCalls[0]).toEqual(["/Query"]);
|
||||
expect(schtasksCalls[1]).toEqual(["/Query", "/TN", "OpenClaw Gateway"]);
|
||||
expectInitialTaskQueries();
|
||||
expect(schtasksCalls[2]?.[0]).toBe("/Create");
|
||||
expect(schtasksCalls[3]).toEqual(["/Run", "/TN", "OpenClaw Gateway"]);
|
||||
expectTaskRunCall(3);
|
||||
});
|
||||
});
|
||||
|
||||
it("falls back to /Create when /Change fails on an existing task", async () => {
|
||||
await withUserProfileDir(async (_tmpDir, env) => {
|
||||
schtasksResponses.push(
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 1, stdout: "", stderr: "ERROR: Access is denied." },
|
||||
);
|
||||
schtasksResponses.push(okSchtasksResponse, okSchtasksResponse, accessDeniedResponse);
|
||||
|
||||
await installScheduledTask({
|
||||
env,
|
||||
stdout: new PassThrough(),
|
||||
programArguments: ["node", "gateway.js"],
|
||||
environment: {},
|
||||
});
|
||||
await installDefaultGatewayTask(env);
|
||||
|
||||
expect(schtasksCalls[0]).toEqual(["/Query"]);
|
||||
expect(schtasksCalls[1]).toEqual(["/Query", "/TN", "OpenClaw Gateway"]);
|
||||
expectInitialTaskQueries();
|
||||
expect(schtasksCalls[2]?.[0]).toBe("/Change");
|
||||
expect(schtasksCalls[3]?.[0]).toBe("/Create");
|
||||
expect(schtasksCalls[4]).toEqual(["/Run", "/TN", "OpenClaw Gateway"]);
|
||||
expectTaskRunCall(4);
|
||||
});
|
||||
});
|
||||
|
||||
it("throws when /Run fails after updating an existing task", async () => {
|
||||
await withUserProfileDir(async (_tmpDir, env) => {
|
||||
schtasksResponses.push(
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 1, stdout: "", stderr: "ERROR: Access is denied." },
|
||||
okSchtasksResponse,
|
||||
okSchtasksResponse,
|
||||
okSchtasksResponse,
|
||||
accessDeniedResponse,
|
||||
);
|
||||
|
||||
await expect(
|
||||
installScheduledTask({
|
||||
env,
|
||||
stdout: new PassThrough(),
|
||||
programArguments: ["node", "gateway.js"],
|
||||
environment: {},
|
||||
}),
|
||||
).rejects.toThrow("schtasks run failed: ERROR: Access is denied.");
|
||||
await expect(installDefaultGatewayTask(env)).rejects.toThrow(
|
||||
"schtasks run failed: ERROR: Access is denied.",
|
||||
);
|
||||
|
||||
expect(schtasksCalls[0]).toEqual(["/Query"]);
|
||||
expect(schtasksCalls[1]).toEqual(["/Query", "/TN", "OpenClaw Gateway"]);
|
||||
expectInitialTaskQueries();
|
||||
expect(schtasksCalls[2]?.[0]).toBe("/Change");
|
||||
expect(schtasksCalls[3]).toEqual(["/Run", "/TN", "OpenClaw Gateway"]);
|
||||
expectTaskRunCall(3);
|
||||
});
|
||||
});
|
||||
|
||||
it("throws when /Run fails after creating a new task", async () => {
|
||||
await withUserProfileDir(async (_tmpDir, env) => {
|
||||
schtasksResponses.push(
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 1, stdout: "", stderr: "ERROR: The system cannot find the file specified." },
|
||||
{ code: 0, stdout: "", stderr: "" },
|
||||
{ code: 1, stdout: "", stderr: "ERROR: Access is denied." },
|
||||
okSchtasksResponse,
|
||||
missingTaskResponse,
|
||||
okSchtasksResponse,
|
||||
accessDeniedResponse,
|
||||
);
|
||||
|
||||
await expect(
|
||||
installScheduledTask({
|
||||
env,
|
||||
stdout: new PassThrough(),
|
||||
programArguments: ["node", "gateway.js"],
|
||||
environment: {},
|
||||
}),
|
||||
).rejects.toThrow("schtasks run failed: ERROR: Access is denied.");
|
||||
await expect(installDefaultGatewayTask(env)).rejects.toThrow(
|
||||
"schtasks run failed: ERROR: Access is denied.",
|
||||
);
|
||||
|
||||
expect(schtasksCalls[0]).toEqual(["/Query"]);
|
||||
expect(schtasksCalls[1]).toEqual(["/Query", "/TN", "OpenClaw Gateway"]);
|
||||
expectInitialTaskQueries();
|
||||
expect(schtasksCalls[2]?.[0]).toBe("/Create");
|
||||
expect(schtasksCalls[3]).toEqual(["/Run", "/TN", "OpenClaw Gateway"]);
|
||||
expectTaskRunCall(3);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user