mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
test(memory): share short-timeout test helper
This commit is contained in:
@@ -2,6 +2,7 @@ import fs from "node:fs/promises";
|
|||||||
import os from "node:os";
|
import os from "node:os";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
import { useFastShortTimeouts } from "../../test/helpers/fast-short-timeouts.js";
|
||||||
import type { OpenClawConfig } from "../config/config.js";
|
import type { OpenClawConfig } from "../config/config.js";
|
||||||
import { getMemorySearchManager, type MemoryIndexManager } from "./index.js";
|
import { getMemorySearchManager, type MemoryIndexManager } from "./index.js";
|
||||||
import { createOpenAIEmbeddingProviderMock } from "./test-embeddings-mock.js";
|
import { createOpenAIEmbeddingProviderMock } from "./test-embeddings-mock.js";
|
||||||
@@ -25,22 +26,6 @@ describe("memory indexing with OpenAI batches", () => {
|
|||||||
let indexPath: string;
|
let indexPath: string;
|
||||||
let manager: MemoryIndexManager | null = null;
|
let manager: MemoryIndexManager | null = null;
|
||||||
|
|
||||||
function useFastShortTimeouts() {
|
|
||||||
const realSetTimeout = setTimeout;
|
|
||||||
const spy = vi.spyOn(global, "setTimeout").mockImplementation(((
|
|
||||||
handler: TimerHandler,
|
|
||||||
timeout?: number,
|
|
||||||
...args: unknown[]
|
|
||||||
) => {
|
|
||||||
const delay = typeof timeout === "number" ? timeout : 0;
|
|
||||||
if (delay > 0 && delay <= 2000) {
|
|
||||||
return realSetTimeout(handler, 0, ...args);
|
|
||||||
}
|
|
||||||
return realSetTimeout(handler, delay, ...args);
|
|
||||||
}) as typeof setTimeout);
|
|
||||||
return () => spy.mockRestore();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function readOpenAIBatchUploadRequests(body: FormData) {
|
async function readOpenAIBatchUploadRequests(body: FormData) {
|
||||||
let uploadedRequests: Array<{ custom_id?: string }> = [];
|
let uploadedRequests: Array<{ custom_id?: string }> = [];
|
||||||
const entries = body.entries() as IterableIterator<[string, FormDataEntryValue]>;
|
const entries = body.entries() as IterableIterator<[string, FormDataEntryValue]>;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import fs from "node:fs/promises";
|
import fs from "node:fs/promises";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { describe, expect, it, vi } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
import { useFastShortTimeouts } from "../../test/helpers/fast-short-timeouts.js";
|
||||||
import { installEmbeddingManagerFixture } from "./embedding-manager.test-harness.js";
|
import { installEmbeddingManagerFixture } from "./embedding-manager.test-harness.js";
|
||||||
|
|
||||||
const fx = installEmbeddingManagerFixture({
|
const fx = installEmbeddingManagerFixture({
|
||||||
@@ -88,22 +89,11 @@ describe("memory embedding batches", () => {
|
|||||||
return texts.map(() => [0, 1, 0]);
|
return texts.map(() => [0, 1, 0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
const realSetTimeout = setTimeout;
|
const restoreFastTimeouts = useFastShortTimeouts();
|
||||||
const setTimeoutSpy = vi.spyOn(global, "setTimeout").mockImplementation(((
|
|
||||||
handler: TimerHandler,
|
|
||||||
timeout?: number,
|
|
||||||
...args: unknown[]
|
|
||||||
) => {
|
|
||||||
const delay = typeof timeout === "number" ? timeout : 0;
|
|
||||||
if (delay > 0 && delay <= 2000) {
|
|
||||||
return realSetTimeout(handler, 0, ...args);
|
|
||||||
}
|
|
||||||
return realSetTimeout(handler, delay, ...args);
|
|
||||||
}) as typeof setTimeout);
|
|
||||||
try {
|
try {
|
||||||
await managerSmall.sync({ reason: "test" });
|
await managerSmall.sync({ reason: "test" });
|
||||||
} finally {
|
} finally {
|
||||||
setTimeoutSpy.mockRestore();
|
restoreFastTimeouts();
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(calls).toBe(3);
|
expect(calls).toBe(3);
|
||||||
|
|||||||
17
test/helpers/fast-short-timeouts.ts
Normal file
17
test/helpers/fast-short-timeouts.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { vi } from "vitest";
|
||||||
|
|
||||||
|
export function useFastShortTimeouts(maxDelayMs = 2000): () => void {
|
||||||
|
const realSetTimeout = setTimeout;
|
||||||
|
const spy = vi.spyOn(global, "setTimeout").mockImplementation(((
|
||||||
|
handler: TimerHandler,
|
||||||
|
timeout?: number,
|
||||||
|
...args: unknown[]
|
||||||
|
) => {
|
||||||
|
const delay = typeof timeout === "number" ? timeout : 0;
|
||||||
|
if (delay > 0 && delay <= maxDelayMs) {
|
||||||
|
return realSetTimeout(handler, 0, ...args);
|
||||||
|
}
|
||||||
|
return realSetTimeout(handler, delay, ...args);
|
||||||
|
}) as typeof setTimeout);
|
||||||
|
return () => spy.mockRestore();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user