mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-22 13:41:15 +00:00
perf(test): poll ClickClack gateway faster (#109803)
This commit is contained in:
committed by
GitHub
parent
45f36640dc
commit
d023e8b412
@@ -15,6 +15,10 @@ class FakeSocket extends EventEmitter {
|
||||
});
|
||||
}
|
||||
|
||||
function waitForGatewayState<T>(assertion: () => T | Promise<T>): Promise<T> {
|
||||
return vi.waitFor(assertion, { interval: 1 });
|
||||
}
|
||||
|
||||
const mocks = vi.hoisted(() => ({
|
||||
createClickClackClient: vi.fn(),
|
||||
client: {
|
||||
@@ -166,7 +170,7 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal, { commandMenu });
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
expect(mocks.client.setBotCommands).toHaveBeenCalledTimes(1);
|
||||
expect(mocks.client.me.mock.invocationCallOrder[0]).toBeLessThan(
|
||||
@@ -190,7 +194,7 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal, { commandMenu: false });
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
expect(mocks.client.setBotCommands).not.toHaveBeenCalled();
|
||||
|
||||
@@ -226,7 +230,7 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
expect(ctx.log?.[level]).toHaveBeenCalledWith(message);
|
||||
expect(ctx.setStatus).toHaveBeenCalledWith({
|
||||
@@ -252,7 +256,7 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
expect(mocks.client.eventPage).toHaveBeenCalledWith("workspace-1", { includeTail: true });
|
||||
expect(mocks.client.websocket).toHaveBeenCalledWith("workspace-1", "cursor-501");
|
||||
@@ -277,9 +281,9 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
firstSocket.emit("close");
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
|
||||
expect(mocks.client.eventPage).toHaveBeenNthCalledWith(2, "workspace-1", {
|
||||
afterCursor: "",
|
||||
@@ -310,7 +314,7 @@ describe("ClickClack gateway", () => {
|
||||
runError = error;
|
||||
});
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
socket.emit("message", Buffer.from("{not json"));
|
||||
await new Promise((resolve) => {
|
||||
@@ -323,7 +327,7 @@ describe("ClickClack gateway", () => {
|
||||
|
||||
emitMessageEvent(socket, 1);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(1));
|
||||
expect(mocks.handleClickClackInbound.mock.calls[0]?.[0].access).toEqual({
|
||||
shouldDispatch: true,
|
||||
commandAuthorized: true,
|
||||
@@ -350,19 +354,19 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
for (const index of [1, 2]) {
|
||||
emitMessageEvent(firstSocket, index);
|
||||
}
|
||||
firstSocket.emit("close");
|
||||
|
||||
await vi.waitFor(() => expect(finishFirstEvent).toBeTypeOf("function"));
|
||||
await waitForGatewayState(() => expect(finishFirstEvent).toBeTypeOf("function"));
|
||||
expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(1);
|
||||
expect(mocks.client.websocket).toHaveBeenCalledTimes(1);
|
||||
|
||||
finishFirstEvent?.();
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
|
||||
expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(2);
|
||||
expect(mocks.client.eventPage).toHaveBeenLastCalledWith("workspace-1", {
|
||||
@@ -391,13 +395,13 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
for (const index of [1, 2]) {
|
||||
emitMessageEvent(firstSocket, index);
|
||||
}
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
|
||||
expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(3);
|
||||
expect(firstSocket.close).toHaveBeenCalledOnce();
|
||||
@@ -430,13 +434,13 @@ describe("ClickClack gateway", () => {
|
||||
const slowRun = startClickClackGatewayAccount(createGatewayContext(slowAbort.signal));
|
||||
const fastRun = startClickClackGatewayAccount(createGatewayContext(fastAbort.signal));
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
|
||||
emitMessageEvent(slowSocket, 1);
|
||||
await vi.waitFor(() => expect(finishSlowEvent).toBeTypeOf("function"));
|
||||
await waitForGatewayState(() => expect(finishSlowEvent).toBeTypeOf("function"));
|
||||
emitMessageEvent(fastSocket, 2);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(2));
|
||||
await waitForGatewayState(() => expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(2));
|
||||
expect(finishSlowEvent).toBeTypeOf("function");
|
||||
|
||||
finishSlowEvent?.();
|
||||
@@ -456,11 +460,13 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
emitMessageEvent(socket, 1);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.resolveClickClackInboundAccess).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() =>
|
||||
expect(mocks.resolveClickClackInboundAccess).toHaveBeenCalledTimes(1),
|
||||
);
|
||||
expect(mocks.handleClickClackInbound).not.toHaveBeenCalled();
|
||||
abort.abort();
|
||||
await run;
|
||||
@@ -499,11 +505,11 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
emitMessageEvent(socket, 1, { correlation_id: "bad correlation" });
|
||||
|
||||
await vi.waitFor(() => expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.handleClickClackInbound).toHaveBeenCalledTimes(1));
|
||||
expect(mocks.createClickClackClient).toHaveBeenCalledTimes(1);
|
||||
expect(mocks.handleClickClackInbound.mock.calls[0]?.[0]).not.toHaveProperty("correlationId");
|
||||
|
||||
@@ -520,11 +526,11 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
firstSocket.emit("error", new Error("gateway dropped"));
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
expect(ctx.log?.warn).toHaveBeenCalledWith(
|
||||
"[default] ClickClack websocket error; reconnecting: gateway dropped",
|
||||
);
|
||||
@@ -571,7 +577,7 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
abort.abort();
|
||||
await run;
|
||||
@@ -617,11 +623,11 @@ describe("ClickClack gateway", () => {
|
||||
const ctx = createGatewayContext(abort.signal);
|
||||
const run = startClickClackGatewayAccount(ctx);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(1));
|
||||
|
||||
emitMessageEvent(firstSocket, 1);
|
||||
|
||||
await vi.waitFor(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
await waitForGatewayState(() => expect(mocks.client.websocket).toHaveBeenCalledTimes(2));
|
||||
expect(ctx.log?.warn).toHaveBeenCalledWith(
|
||||
'[default] ClickClack event processing failed; reconnecting: {"code":"ECONNRESET","retryable":true}',
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user