mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-09 15:59:30 +00:00
perf(test): avoid deadline sleeps and broad tool imports
This commit is contained in:
parent
a1466b2400
commit
3ebcfb8ee3
2 changed files with 21 additions and 13 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
import { createDeferred } from "../shared/deferred.js";
|
||||
import { runCodeModeScriptHeadless, testing, type CodeModeHeadlessResult } from "./code-mode.js";
|
||||
import {
|
||||
createToolSearchCatalogRef,
|
||||
|
|
@ -49,6 +50,7 @@ function expectFailed(result: CodeModeHeadlessResult) {
|
|||
|
||||
describe("headless Code Mode", () => {
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
expect(testing.activeRuns.size).toBe(0);
|
||||
testing.activeRuns.clear();
|
||||
testing.resumingRunIds.clear();
|
||||
|
|
@ -174,7 +176,10 @@ describe("headless Code Mode", () => {
|
|||
});
|
||||
|
||||
it("enforces one wall-clock deadline across worker and tool legs", async () => {
|
||||
vi.useFakeTimers({ toFake: ["setTimeout", "clearTimeout", "Date"] });
|
||||
const toolStarted = createDeferred();
|
||||
const slow = fakeTool("slow_leg", async (_toolCallId, _input, signal) => {
|
||||
toolStarted.resolve();
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
const timer = setTimeout(resolve, 30_000);
|
||||
signal?.addEventListener(
|
||||
|
|
@ -188,16 +193,19 @@ describe("headless Code Mode", () => {
|
|||
});
|
||||
return jsonResult({ ok: true });
|
||||
});
|
||||
const result = expectFailed(
|
||||
await runCodeModeScriptHeadless({
|
||||
ctx: createHeadlessHarness([slow]),
|
||||
code: `
|
||||
await tools.call("openclaw:core:slow_leg", {});
|
||||
return true;
|
||||
`,
|
||||
wallClockMs: 15_000,
|
||||
}),
|
||||
);
|
||||
const resultPromise = runCodeModeScriptHeadless({
|
||||
ctx: createHeadlessHarness([slow]),
|
||||
code: `
|
||||
await tools.call("openclaw:core:slow_leg", {});
|
||||
return true;
|
||||
`,
|
||||
wallClockMs: 15_000,
|
||||
});
|
||||
|
||||
// Advance the shared deadline only after the real worker reaches the tool leg.
|
||||
await toolStarted.promise;
|
||||
await vi.advanceTimersByTimeAsync(15_000);
|
||||
const result = expectFailed(await resultPromise);
|
||||
|
||||
expect(result.code).toBe("timeout");
|
||||
expect(result.toolCallCount).toBe(1);
|
||||
|
|
|
|||
|
|
@ -314,11 +314,11 @@ vi.mock("../model-auth.js", () => ({
|
|||
},
|
||||
}));
|
||||
|
||||
vi.mock("../openclaw-tools.js", async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import("../openclaw-tools.js")>();
|
||||
// Client-cap filtering has dedicated coverage; this suite only needs image-tool propagation.
|
||||
vi.mock("../openclaw-tools.js", async () => {
|
||||
const { createImageTool: createImageToolLocal } = await import("./image-tool.js");
|
||||
return {
|
||||
filterToolsByClientCaps: actual.filterToolsByClientCaps,
|
||||
filterToolsByClientCaps: (tools: unknown[]) => tools,
|
||||
createOpenClawTools: vi.fn((options?: MockOpenClawToolsOptions) => {
|
||||
const imageTool = createImageToolLocal({
|
||||
config: options?.config,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue