mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
test(discord): move ready abort proof to lifecycle (#122869)
This commit is contained in:
committed by
GitHub
parent
7c7c7524ad
commit
52cda537a4
@@ -380,6 +380,36 @@ describe("runDiscordGatewayLifecycle", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("returns promptly when abortSignal fires during the READY retry backoff", async () => {
|
||||
vi.useFakeTimers();
|
||||
try {
|
||||
const abortController = new AbortController();
|
||||
const { gateway } = createGatewayHarness();
|
||||
const { lifecycleParams, threadStop, gatewaySupervisor } = createLifecycleHarness({
|
||||
gateway,
|
||||
});
|
||||
lifecycleParams.abortSignal = abortController.signal;
|
||||
|
||||
const lifecyclePromise = runDiscordGatewayLifecycle(lifecycleParams);
|
||||
await vi.advanceTimersByTimeAsync(15_250);
|
||||
expect(gateway.disconnect).toHaveBeenCalledTimes(1);
|
||||
expect(gateway.connect).toHaveBeenCalledTimes(1);
|
||||
expect(waitForDiscordGatewayStopMock).not.toHaveBeenCalled();
|
||||
|
||||
abortController.abort(new Error("shutdown"));
|
||||
await vi.advanceTimersByTimeAsync(0);
|
||||
expect(waitForDiscordGatewayStopMock).toHaveBeenCalledTimes(1);
|
||||
await expect(lifecyclePromise).resolves.toBeUndefined();
|
||||
|
||||
expectLifecycleCleanup({ threadStop, waitCalls: 1, gatewaySupervisor });
|
||||
expect(vi.getTimerCount()).toBe(0);
|
||||
await vi.advanceTimersByTimeAsync(2_000);
|
||||
expect(gateway.connect).toHaveBeenCalledTimes(1);
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
});
|
||||
|
||||
it("waits for the stale startup socket to close before reconnecting", async () => {
|
||||
vi.useFakeTimers();
|
||||
try {
|
||||
@@ -711,49 +741,3 @@ describe("runDiscordGatewayLifecycle", () => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("waitForGatewayReady", () => {
|
||||
let waitForGatewayReady: (typeof import("../../test-api.js"))["discordGatewayLifecycleTesting"]["waitForGatewayReady"];
|
||||
|
||||
beforeAll(async () => {
|
||||
waitForGatewayReady = (await import("../../test-api.js")).discordGatewayLifecycleTesting
|
||||
.waitForGatewayReady;
|
||||
});
|
||||
|
||||
it("returns promptly when abortSignal fires during the READY retry backoff", async () => {
|
||||
vi.useFakeTimers();
|
||||
try {
|
||||
const controller = new AbortController();
|
||||
const gateway = {
|
||||
isConnected: false,
|
||||
connect: vi.fn(),
|
||||
disconnect: vi.fn(),
|
||||
ws: null,
|
||||
};
|
||||
const runtime: RuntimeEnv = {
|
||||
log: () => {},
|
||||
error: () => {},
|
||||
exit: () => {},
|
||||
};
|
||||
|
||||
const readyPromise = waitForGatewayReady({
|
||||
gateway,
|
||||
abortSignal: controller.signal,
|
||||
readyTimeoutMs: 200,
|
||||
runtime,
|
||||
});
|
||||
|
||||
await vi.advanceTimersByTimeAsync(250);
|
||||
expect(gateway.connect).toHaveBeenCalledTimes(1);
|
||||
controller.abort();
|
||||
|
||||
await expect(readyPromise).resolves.toBeUndefined();
|
||||
expect(vi.getTimerCount()).toBe(0);
|
||||
await vi.advanceTimersByTimeAsync(2_000);
|
||||
expect(gateway.connect).toHaveBeenCalledTimes(1);
|
||||
expect(gateway.disconnect).toHaveBeenCalledTimes(1);
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -573,7 +573,3 @@ export async function runDiscordGatewayLifecycle(params: {
|
||||
params.threadBindings.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// Test-only surface. Re-exported from the plugin root `test-api.ts` entry so Knip's
|
||||
// production scan sees the consumer; tests import `testing` from `test-api.js`.
|
||||
export const testing = { waitForGatewayReady };
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// Discord test API exposes the gateway lifecycle fixture.
|
||||
export { testing as discordGatewayLifecycleTesting } from "./src/monitor/provider.lifecycle.js";
|
||||
Reference in New Issue
Block a user