mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 21:40:43 +00:00
test: avoid diagnostic count filter allocations
This commit is contained in:
@@ -29,6 +29,16 @@ import type { InputItem, ResponseCreateEvent } from "./openai-ws-types.js";
|
||||
import { log } from "./pi-embedded-runner/logger.js";
|
||||
import { SYSTEM_PROMPT_CACHE_BOUNDARY } from "./system-prompt-cache-boundary.js";
|
||||
|
||||
function countMatching<T>(items: readonly T[], predicate: (item: T) => boolean) {
|
||||
let count = 0;
|
||||
for (const item of items) {
|
||||
if (predicate(item)) {
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Mock OpenAIWebSocketManager
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
@@ -2751,7 +2761,7 @@ describe("createOpenAIWebSocketStreamFn", () => {
|
||||
|
||||
expect(streamSimpleCalls.length).toBeGreaterThanOrEqual(1);
|
||||
expect(manager.closeCallCount).toBeGreaterThanOrEqual(1);
|
||||
expect(events.filter((event) => event.type === "start")).toHaveLength(1);
|
||||
expect(countMatching(events, (event) => event.type === "start")).toBe(1);
|
||||
expect(events.some((event) => event.type === "error")).toBe(false);
|
||||
const doneEvent = events.find((event) => event.type === "done");
|
||||
expect(doneEvent?.message?.content?.[0]?.text).toBe("http fallback response");
|
||||
@@ -2785,7 +2795,7 @@ describe("createOpenAIWebSocketStreamFn", () => {
|
||||
|
||||
expect(streamSimpleCalls.length).toBeGreaterThanOrEqual(1);
|
||||
expect(manager.closeCallCount).toBeGreaterThanOrEqual(1);
|
||||
expect(events.filter((event) => event.type === "start")).toHaveLength(1);
|
||||
expect(countMatching(events, (event) => event.type === "start")).toBe(1);
|
||||
expect(events.some((event) => event.type === "error")).toBe(false);
|
||||
const doneEvent = events.find((event) => event.type === "done");
|
||||
expect(doneEvent?.message?.content?.[0]?.text).toBe("http fallback response");
|
||||
@@ -2820,7 +2830,7 @@ describe("createOpenAIWebSocketStreamFn", () => {
|
||||
|
||||
expect(streamSimpleCalls).toHaveLength(0);
|
||||
expect(firstManager.closeCallCount).toBeGreaterThanOrEqual(1);
|
||||
expect(events.filter((event) => event.type === "start")).toHaveLength(1);
|
||||
expect(countMatching(events, (event) => event.type === "start")).toBe(1);
|
||||
const doneEvent = events.find((event) => event.type === "done");
|
||||
expect(doneEvent?.message?.content?.[0]?.text).toBe("retry succeeded");
|
||||
});
|
||||
|
||||
@@ -52,6 +52,16 @@ function flushDiagnosticEvents() {
|
||||
return new Promise<void>((resolve) => setImmediate(resolve));
|
||||
}
|
||||
|
||||
function countMatching<T>(items: readonly T[], predicate: (item: T) => boolean) {
|
||||
let count = 0;
|
||||
for (const item of items) {
|
||||
if (predicate(item)) {
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
describe("diagnostic session state pruning", () => {
|
||||
beforeEach(() => {
|
||||
vi.useFakeTimers();
|
||||
@@ -691,7 +701,7 @@ describe("stuck session diagnostics threshold", () => {
|
||||
markDiagnosticEmbeddedRunStarted({ sessionId: "s1", sessionKey: "main" });
|
||||
vi.advanceTimersByTime(16_000);
|
||||
|
||||
expect(events.filter((event) => event.type === "session.long_running")).toHaveLength(1);
|
||||
expect(countMatching(events, (event) => event.type === "session.long_running")).toBe(1);
|
||||
|
||||
vi.advanceTimersByTime(28_000);
|
||||
emitDiagnosticEvent({
|
||||
@@ -702,7 +712,7 @@ describe("stuck session diagnostics threshold", () => {
|
||||
});
|
||||
vi.advanceTimersByTime(2_000);
|
||||
|
||||
expect(events.filter((event) => event.type === "session.long_running")).toHaveLength(1);
|
||||
expect(countMatching(events, (event) => event.type === "session.long_running")).toBe(1);
|
||||
} finally {
|
||||
unsubscribe();
|
||||
}
|
||||
@@ -1038,14 +1048,14 @@ describe("stuck session diagnostics threshold", () => {
|
||||
|
||||
vi.advanceTimersByTime(30_000);
|
||||
vi.advanceTimersByTime(90_000);
|
||||
expect(events.filter((event) => event === "diagnostic.liveness.warning")).toHaveLength(1);
|
||||
expect(countMatching(events, (event) => event === "diagnostic.liveness.warning")).toBe(1);
|
||||
|
||||
vi.advanceTimersByTime(30_000);
|
||||
} finally {
|
||||
unsubscribe();
|
||||
}
|
||||
|
||||
expect(events.filter((event) => event === "diagnostic.liveness.warning")).toHaveLength(2);
|
||||
expect(countMatching(events, (event) => event === "diagnostic.liveness.warning")).toBe(2);
|
||||
});
|
||||
|
||||
it("does not start the heartbeat when diagnostics are disabled by config", () => {
|
||||
|
||||
Reference in New Issue
Block a user