mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-14 01:06:38 +00:00
refactor(agent): dedupe harness and command workflows
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
import fs from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import type { CronEvent } from "./service.js";
|
||||
import { CronService } from "./service.js";
|
||||
import {
|
||||
createStartedCronServiceWithFinishedBarrier,
|
||||
createCronStoreHarness,
|
||||
createNoopLogger,
|
||||
installCronTestHooks,
|
||||
@@ -13,42 +13,12 @@ const noopLogger = createNoopLogger();
|
||||
const { makeStorePath } = createCronStoreHarness();
|
||||
installCronTestHooks({ logger: noopLogger });
|
||||
|
||||
function createFinishedBarrier() {
|
||||
const resolvers = new Map<string, (evt: CronEvent) => void>();
|
||||
return {
|
||||
waitForOk: (jobId: string) =>
|
||||
new Promise<CronEvent>((resolve) => {
|
||||
resolvers.set(jobId, resolve);
|
||||
}),
|
||||
onEvent: (evt: CronEvent) => {
|
||||
if (evt.action !== "finished" || evt.status !== "ok") {
|
||||
return;
|
||||
}
|
||||
const resolve = resolvers.get(evt.jobId);
|
||||
if (!resolve) {
|
||||
return;
|
||||
}
|
||||
resolvers.delete(evt.jobId);
|
||||
resolve(evt);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
describe("CronService interval/cron jobs fire on time", () => {
|
||||
it("fires an every-type main job when the timer fires a few ms late", async () => {
|
||||
const store = await makeStorePath();
|
||||
const enqueueSystemEvent = vi.fn();
|
||||
const requestHeartbeatNow = vi.fn();
|
||||
const finished = createFinishedBarrier();
|
||||
|
||||
const cron = new CronService({
|
||||
const { cron, enqueueSystemEvent, finished } = createStartedCronServiceWithFinishedBarrier({
|
||||
storePath: store.storePath,
|
||||
cronEnabled: true,
|
||||
log: noopLogger,
|
||||
enqueueSystemEvent,
|
||||
requestHeartbeatNow,
|
||||
runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })),
|
||||
onEvent: finished.onEvent,
|
||||
logger: noopLogger,
|
||||
});
|
||||
|
||||
await cron.start();
|
||||
@@ -86,23 +56,14 @@ describe("CronService interval/cron jobs fire on time", () => {
|
||||
|
||||
it("fires a cron-expression job when the timer fires a few ms late", async () => {
|
||||
const store = await makeStorePath();
|
||||
const enqueueSystemEvent = vi.fn();
|
||||
const requestHeartbeatNow = vi.fn();
|
||||
const finished = createFinishedBarrier();
|
||||
const { cron, enqueueSystemEvent, finished } = createStartedCronServiceWithFinishedBarrier({
|
||||
storePath: store.storePath,
|
||||
logger: noopLogger,
|
||||
});
|
||||
|
||||
// Set time to just before a minute boundary.
|
||||
vi.setSystemTime(new Date("2025-12-13T00:00:59.000Z"));
|
||||
|
||||
const cron = new CronService({
|
||||
storePath: store.storePath,
|
||||
cronEnabled: true,
|
||||
log: noopLogger,
|
||||
enqueueSystemEvent,
|
||||
requestHeartbeatNow,
|
||||
runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })),
|
||||
onEvent: finished.onEvent,
|
||||
});
|
||||
|
||||
await cron.start();
|
||||
const job = await cron.add({
|
||||
name: "every minute check",
|
||||
|
||||
Reference in New Issue
Block a user