mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 13:27:39 +00:00
79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import type {
|
|
AgentSideConnection,
|
|
LoadSessionRequest,
|
|
NewSessionRequest,
|
|
} from "@agentclientprotocol/sdk";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import type { GatewayClient } from "../gateway/client.js";
|
|
import { createInMemorySessionStore } from "./session.js";
|
|
import { AcpGatewayAgent } from "./translator.js";
|
|
|
|
function createConnection(): AgentSideConnection {
|
|
return {
|
|
sessionUpdate: vi.fn(async () => {}),
|
|
} as unknown as AgentSideConnection;
|
|
}
|
|
|
|
function createGateway(): GatewayClient {
|
|
return {
|
|
request: vi.fn(async () => ({ ok: true })),
|
|
} as unknown as GatewayClient;
|
|
}
|
|
|
|
function createNewSessionRequest(cwd = "/tmp"): NewSessionRequest {
|
|
return {
|
|
cwd,
|
|
mcpServers: [],
|
|
_meta: {},
|
|
} as unknown as NewSessionRequest;
|
|
}
|
|
|
|
function createLoadSessionRequest(sessionId: string, cwd = "/tmp"): LoadSessionRequest {
|
|
return {
|
|
sessionId,
|
|
cwd,
|
|
mcpServers: [],
|
|
_meta: {},
|
|
} as unknown as LoadSessionRequest;
|
|
}
|
|
|
|
describe("acp session creation rate limit", () => {
|
|
it("rate limits excessive newSession bursts", async () => {
|
|
const sessionStore = createInMemorySessionStore();
|
|
const agent = new AcpGatewayAgent(createConnection(), createGateway(), {
|
|
sessionStore,
|
|
sessionCreateRateLimit: {
|
|
maxRequests: 2,
|
|
windowMs: 60_000,
|
|
},
|
|
});
|
|
|
|
await agent.newSession(createNewSessionRequest());
|
|
await agent.newSession(createNewSessionRequest());
|
|
await expect(agent.newSession(createNewSessionRequest())).rejects.toThrow(
|
|
/session creation rate limit exceeded/i,
|
|
);
|
|
|
|
sessionStore.clearAllSessionsForTest();
|
|
});
|
|
|
|
it("does not count loadSession refreshes for an existing session ID", async () => {
|
|
const sessionStore = createInMemorySessionStore();
|
|
const agent = new AcpGatewayAgent(createConnection(), createGateway(), {
|
|
sessionStore,
|
|
sessionCreateRateLimit: {
|
|
maxRequests: 1,
|
|
windowMs: 60_000,
|
|
},
|
|
});
|
|
|
|
await agent.loadSession(createLoadSessionRequest("shared-session"));
|
|
await agent.loadSession(createLoadSessionRequest("shared-session"));
|
|
await expect(agent.loadSession(createLoadSessionRequest("new-session"))).rejects.toThrow(
|
|
/session creation rate limit exceeded/i,
|
|
);
|
|
|
|
sessionStore.clearAllSessionsForTest();
|
|
});
|
|
});
|