mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
test(gateway): skip servers for handler fixtures (#118581)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
This commit is contained in:
committed by
GitHub
parent
2923ee40c4
commit
f62e42b69f
@@ -13,11 +13,11 @@ import { testState } from "../test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
getGatewayConfigModule,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "../test/server-sessions.test-helpers.js";
|
||||
import { createActiveRun, createChatAbortContext } from "./chat.abort.test-helpers.js";
|
||||
|
||||
setupGatewaySessionsTestHarness();
|
||||
setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
function requireStateDir(): string {
|
||||
const stateDir = process.env.OPENCLAW_STATE_DIR;
|
||||
|
||||
@@ -15,12 +15,12 @@ import {
|
||||
getGatewayConfigModule,
|
||||
directSessionReq,
|
||||
seedLinearSessionTranscript,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "../test/server-sessions.test-helpers.js";
|
||||
import { agentsHandlers } from "./agents.js";
|
||||
import type { GatewayRequestContext } from "./types.js";
|
||||
|
||||
setupGatewaySessionsTestHarness();
|
||||
setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
const UNKNOWN_AGENT_ID = "ghost";
|
||||
const UNKNOWN_SESSION_KEY = `agent:${UNKNOWN_AGENT_ID}:zzz`;
|
||||
|
||||
@@ -5,10 +5,10 @@ import { writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSelectedGlobalSessionStore } = setupGatewaySessionsTestHarness();
|
||||
const { createSelectedGlobalSessionStore } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
const mainModel = { id: "main-only", name: "Main Model", provider: "main-provider" };
|
||||
const workModel = { id: "work-only", name: "Work Model", provider: "work-provider" };
|
||||
|
||||
@@ -7,11 +7,11 @@ import { testState, writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
writeSingleLineSession,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
afterEach(() => {
|
||||
closeOpenClawAgentDatabasesForTest();
|
||||
|
||||
@@ -9,10 +9,10 @@ import { writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
const LIST_PARAMS = {
|
||||
agentId: "main",
|
||||
|
||||
@@ -15,10 +15,10 @@ import {
|
||||
directSessionReq,
|
||||
seedSessionTranscript,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
const LIST_PARAMS = {
|
||||
agentId: "main",
|
||||
|
||||
@@ -6,10 +6,10 @@ import { embeddedRunMock, writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
afterEach(() => {
|
||||
closeOpenClawStateDatabaseForTest();
|
||||
|
||||
@@ -3,12 +3,12 @@ import type { GatewaySessionRow } from "./session-utils.types.js";
|
||||
import { writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
import type { WorkerSessionPlacementReader } from "./worker-environments/placement-projector.js";
|
||||
import type { WorkerSessionPlacementRecord } from "./worker-environments/placement-store.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
function activePlacementRecord(): WorkerSessionPlacementRecord {
|
||||
return {
|
||||
|
||||
@@ -9,10 +9,10 @@ import { writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
test.each([
|
||||
{
|
||||
|
||||
@@ -15,10 +15,10 @@ import { writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
afterEach(() => {
|
||||
resetProcessRegistryForTests();
|
||||
|
||||
@@ -19,7 +19,7 @@ import { runExclusiveSessionLifecycle } from "../sessions/session-lifecycle-admi
|
||||
import { closeOpenClawStateDatabaseForTest } from "../state/openclaw-state-db.js";
|
||||
import { embeddedRunMock, testState, writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
bootstrapCacheMocks,
|
||||
subagentLifecycleHookMocks,
|
||||
subagentLifecycleHookState,
|
||||
@@ -37,7 +37,7 @@ import {
|
||||
sessionHookMocks,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
type ResetAcpState = {
|
||||
backend?: string;
|
||||
|
||||
@@ -8,12 +8,12 @@ import { writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
sessionLifecycleHookMocks,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
subagentLifecycleHookMocks,
|
||||
threadBindingMocks,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
afterEach(() => {
|
||||
closeOpenClawStateDatabaseForTest();
|
||||
|
||||
@@ -8,10 +8,10 @@ import {
|
||||
directSessionReq,
|
||||
seedSessionTranscript,
|
||||
sessionLifecycleHookMocks,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
type HookEvent = {
|
||||
sessionKey?: string;
|
||||
|
||||
@@ -9,7 +9,7 @@ import type { InternalSessionEntry } from "../config/sessions/types.js";
|
||||
import { beginSessionWorkAdmission } from "../sessions/session-lifecycle-admission.js";
|
||||
import { embeddedRunMock, testState, writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
bootstrapCacheMocks,
|
||||
sessionHookMocks,
|
||||
beforeResetHookMocks,
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
seedSessionTranscript,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
type HookEventRecord = Record<string, unknown> & {
|
||||
context?: Record<string, unknown> & {
|
||||
|
||||
@@ -12,12 +12,12 @@ import { listSessionStateEventsSince } from "../sessions/session-state-events.js
|
||||
import { normalizeSessionDeliveryState } from "../utils/delivery-context.shared.js";
|
||||
import { testState, writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
sessionStoreEntry,
|
||||
directSessionReq,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
type ResetSessionEntry = {
|
||||
sessionId?: string;
|
||||
|
||||
@@ -12,13 +12,13 @@ import { expect, test, vi } from "vitest";
|
||||
import { formatThinkingLevels } from "../auto-reply/thinking.js";
|
||||
import { testState, writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
getGatewayConfigModule,
|
||||
getSessionsHandlers,
|
||||
sessionStoreEntry,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
|
||||
const { createSessionStoreDir } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir } = setupGatewaySessionsHandlerTestHarness();
|
||||
|
||||
/**
|
||||
* Simulates the consumer-side resolution from session-controls.ts and
|
||||
|
||||
@@ -6,12 +6,12 @@ import { embeddedRunMock, writeSessionStore } from "./test-helpers.js";
|
||||
import {
|
||||
directSessionReq,
|
||||
sessionStoreEntry,
|
||||
setupGatewaySessionsTestHarness,
|
||||
setupGatewaySessionsHandlerTestHarness,
|
||||
} from "./test/server-sessions.test-helpers.js";
|
||||
import type { WorkerSessionPlacementReader } from "./worker-environments/placement-projector.js";
|
||||
import type { WorkerSessionPlacementRecord } from "./worker-environments/placement-store.js";
|
||||
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsTestHarness();
|
||||
const { createSessionStoreDir, seedActiveMainSession } = setupGatewaySessionsHandlerTestHarness();
|
||||
let uninstallResetGuard: (() => void) | undefined;
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -5,27 +5,17 @@ import fsSync from "node:fs";
|
||||
import fs from "node:fs/promises";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { expectDefined } from "@openclaw/normalization-core";
|
||||
import type { AssistantMessage, UserMessage } from "openclaw/plugin-sdk/llm";
|
||||
import { afterAll, beforeAll, beforeEach, expect, vi } from "vitest";
|
||||
import type { InternalSessionEntry as SessionEntry } from "../../config/sessions.js";
|
||||
import {
|
||||
loadTranscriptEvents,
|
||||
persistSessionTranscriptTurn,
|
||||
} from "../../config/sessions/session-accessor.js";
|
||||
import type { InternalHookEvent } from "../../hooks/internal-hooks.js";
|
||||
import { resetSystemEventsForTest } from "../../infra/system-events.js";
|
||||
import { createLazyRuntimeModule } from "../../shared/lazy-runtime.js";
|
||||
import type { GatewayRequestContext } from "../server-methods/types.js";
|
||||
import { startGatewayServerHarness, type GatewayServerHarness } from "../server.e2e-ws-harness.js";
|
||||
import {
|
||||
connectOk,
|
||||
embeddedRunMock,
|
||||
installGatewayTestHooks,
|
||||
agentDiscoveryMock,
|
||||
testState,
|
||||
writeSessionStore,
|
||||
} from "../test-helpers.js";
|
||||
import type { GatewayServerHarness } from "../server.e2e-ws-harness.js";
|
||||
import { embeddedRunMock, agentDiscoveryMock, testState } from "../test-helpers.runtime-state.js";
|
||||
import type { connectOk } from "../test-helpers.server.js";
|
||||
import { installGatewayTestHooks, writeSessionStore } from "../test-helpers.server.js";
|
||||
import { sessionHandlerTestSurface } from "./server-sessions-handlers.test-support.js";
|
||||
|
||||
export const getSessionManagerModule = createLazyRuntimeModule(
|
||||
@@ -36,6 +26,14 @@ export const getGatewayConfigModule = createLazyRuntimeModule(
|
||||
() => import("../../config/config.js"),
|
||||
);
|
||||
|
||||
const getSessionAccessorModule = createLazyRuntimeModule(
|
||||
() => import("../../config/sessions/session-accessor.js"),
|
||||
);
|
||||
|
||||
const getGatewayServerHarnessModule = createLazyRuntimeModule(
|
||||
() => import("../server.e2e-ws-harness.js"),
|
||||
);
|
||||
|
||||
export async function getSessionsHandlers() {
|
||||
return sessionHandlerTestSurface;
|
||||
}
|
||||
@@ -54,6 +52,7 @@ export async function seedSessionTranscript(params: {
|
||||
sessionKey: string;
|
||||
storePath: string;
|
||||
}): Promise<void> {
|
||||
const { persistSessionTranscriptTurn } = await getSessionAccessorModule();
|
||||
await persistSessionTranscriptTurn(
|
||||
{
|
||||
agentId: params.agentId,
|
||||
@@ -101,6 +100,7 @@ export async function loadSeededTranscriptEvents(params: {
|
||||
sessionKey: string;
|
||||
storePath: string;
|
||||
}): Promise<unknown[]> {
|
||||
const { loadTranscriptEvents } = await getSessionAccessorModule();
|
||||
return await loadTranscriptEvents({
|
||||
agentId: params.agentId,
|
||||
sessionId: params.sessionId,
|
||||
@@ -310,7 +310,18 @@ vi.mock("../../agents/agent-bundle-mcp-tools.js", () => ({
|
||||
retireSessionMcpRuntime: bundleMcpRuntimeMocks.retireSessionMcpRuntime,
|
||||
}));
|
||||
|
||||
export function setupGatewaySessionsHandlerTestHarness() {
|
||||
const { getHarness, openClient, ...handlerFixture } = createGatewaySessionsTestHarness(false);
|
||||
void getHarness;
|
||||
void openClient;
|
||||
return handlerFixture;
|
||||
}
|
||||
|
||||
export function setupGatewaySessionsTestHarness() {
|
||||
return createGatewaySessionsTestHarness(true);
|
||||
}
|
||||
|
||||
function createGatewaySessionsTestHarness(startServer: boolean) {
|
||||
installGatewayTestHooks({ scope: "suite" });
|
||||
|
||||
let harness: GatewayServerHarness | undefined;
|
||||
@@ -318,7 +329,10 @@ export function setupGatewaySessionsTestHarness() {
|
||||
let sessionStoreCaseSeq = 0;
|
||||
|
||||
beforeAll(async () => {
|
||||
harness = await startGatewayServerHarness();
|
||||
if (startServer) {
|
||||
const { startGatewayServerHarness } = await getGatewayServerHarnessModule();
|
||||
harness = await startGatewayServerHarness();
|
||||
}
|
||||
sharedSessionStoreDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-sessions-"));
|
||||
});
|
||||
|
||||
@@ -680,10 +694,11 @@ export async function directSessionReq<TPayload = unknown>(
|
||||
let result:
|
||||
| { ok: boolean; payload?: TPayload; error?: { code?: string; message?: string } }
|
||||
| undefined;
|
||||
await expectDefined(
|
||||
sessionsHandlers[method],
|
||||
"sessions handlers entry at method",
|
||||
)({
|
||||
const handler = sessionsHandlers[method];
|
||||
if (!handler) {
|
||||
throw new Error(`missing sessions handler for ${method}`);
|
||||
}
|
||||
await handler({
|
||||
req: {} as never,
|
||||
params,
|
||||
respond: (ok, payload, error) => {
|
||||
|
||||
Reference in New Issue
Block a user