mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 00:48:27 +00:00
perf(test): remove slow port inspection and reconnect sleeps
This commit is contained in:
@@ -2,6 +2,7 @@ import fs from "node:fs/promises";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import type { CronEvent } from "./service.js";
|
||||
import type { CronJob } from "./types.js";
|
||||
import { CronService } from "./service.js";
|
||||
|
||||
@@ -22,21 +23,25 @@ async function makeStorePath() {
|
||||
};
|
||||
}
|
||||
|
||||
async function waitForJob(
|
||||
cron: CronService,
|
||||
id: string,
|
||||
predicate: (job: CronJob | undefined) => boolean,
|
||||
) {
|
||||
let latest: CronJob | undefined;
|
||||
for (let i = 0; i < 30; i++) {
|
||||
const jobs = await cron.list({ includeDisabled: true });
|
||||
latest = jobs.find((job) => job.id === id);
|
||||
if (predicate(latest)) {
|
||||
return latest;
|
||||
}
|
||||
await vi.runOnlyPendingTimersAsync();
|
||||
}
|
||||
return latest;
|
||||
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", () => {
|
||||
@@ -57,6 +62,7 @@ describe("CronService interval/cron jobs fire on time", () => {
|
||||
const store = await makeStorePath();
|
||||
const enqueueSystemEvent = vi.fn();
|
||||
const requestHeartbeatNow = vi.fn();
|
||||
const finished = createFinishedBarrier();
|
||||
|
||||
const cron = new CronService({
|
||||
storePath: store.storePath,
|
||||
@@ -65,6 +71,7 @@ describe("CronService interval/cron jobs fire on time", () => {
|
||||
enqueueSystemEvent,
|
||||
requestHeartbeatNow,
|
||||
runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })),
|
||||
onEvent: finished.onEvent,
|
||||
});
|
||||
|
||||
await cron.start();
|
||||
@@ -84,7 +91,9 @@ describe("CronService interval/cron jobs fire on time", () => {
|
||||
vi.setSystemTime(new Date(firstDueAt + 5));
|
||||
await vi.runOnlyPendingTimersAsync();
|
||||
|
||||
const updated = await waitForJob(cron, job.id, (current) => current?.state.lastStatus === "ok");
|
||||
await finished.waitForOk(job.id);
|
||||
const jobs = await cron.list({ includeDisabled: true });
|
||||
const updated = jobs.find((current) => current.id === job.id);
|
||||
|
||||
expect(enqueueSystemEvent).toHaveBeenCalledWith("tick", { agentId: undefined });
|
||||
expect(updated?.state.lastStatus).toBe("ok");
|
||||
@@ -99,6 +108,7 @@ describe("CronService interval/cron jobs fire on time", () => {
|
||||
const store = await makeStorePath();
|
||||
const enqueueSystemEvent = vi.fn();
|
||||
const requestHeartbeatNow = vi.fn();
|
||||
const finished = createFinishedBarrier();
|
||||
|
||||
// Set time to just before a minute boundary.
|
||||
vi.setSystemTime(new Date("2025-12-13T00:00:59.000Z"));
|
||||
@@ -110,6 +120,7 @@ describe("CronService interval/cron jobs fire on time", () => {
|
||||
enqueueSystemEvent,
|
||||
requestHeartbeatNow,
|
||||
runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })),
|
||||
onEvent: finished.onEvent,
|
||||
});
|
||||
|
||||
await cron.start();
|
||||
@@ -128,7 +139,9 @@ describe("CronService interval/cron jobs fire on time", () => {
|
||||
vi.setSystemTime(new Date(firstDueAt + 5));
|
||||
await vi.runOnlyPendingTimersAsync();
|
||||
|
||||
const updated = await waitForJob(cron, job.id, (current) => current?.state.lastStatus === "ok");
|
||||
await finished.waitForOk(job.id);
|
||||
const jobs = await cron.list({ includeDisabled: true });
|
||||
const updated = jobs.find((current) => current.id === job.id);
|
||||
|
||||
expect(enqueueSystemEvent).toHaveBeenCalledWith("cron-tick", { agentId: undefined });
|
||||
expect(updated?.state.lastStatus).toBe("ok");
|
||||
|
||||
Reference in New Issue
Block a user