Initial commit: Discord-Claude Gateway with event-driven agent runtime
This commit is contained in:
57
tests/unit/shutdown-handler.test.ts
Normal file
57
tests/unit/shutdown-handler.test.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
||||
import { registerShutdownHandler } from "../../src/shutdown-handler.js";
|
||||
|
||||
describe("registerShutdownHandler", () => {
|
||||
let mockGateway: { shutdown: ReturnType<typeof vi.fn> };
|
||||
let sigintListeners: Array<() => void>;
|
||||
let sigtermListeners: Array<() => void>;
|
||||
|
||||
beforeEach(() => {
|
||||
mockGateway = { shutdown: vi.fn() };
|
||||
sigintListeners = [];
|
||||
sigtermListeners = [];
|
||||
|
||||
vi.spyOn(process, "on").mockImplementation((event: string, listener: (...args: unknown[]) => void) => {
|
||||
if (event === "SIGINT") sigintListeners.push(listener as () => void);
|
||||
if (event === "SIGTERM") sigtermListeners.push(listener as () => void);
|
||||
return process;
|
||||
});
|
||||
vi.spyOn(console, "log").mockImplementation(() => {});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
it("registers listeners for SIGTERM and SIGINT", () => {
|
||||
registerShutdownHandler(mockGateway as never);
|
||||
expect(sigtermListeners).toHaveLength(1);
|
||||
expect(sigintListeners).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("calls gateway.shutdown() on SIGTERM", () => {
|
||||
registerShutdownHandler(mockGateway as never);
|
||||
sigtermListeners[0]();
|
||||
expect(mockGateway.shutdown).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it("calls gateway.shutdown() on SIGINT", () => {
|
||||
registerShutdownHandler(mockGateway as never);
|
||||
sigintListeners[0]();
|
||||
expect(mockGateway.shutdown).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it("prevents double-shutdown on repeated signals", () => {
|
||||
registerShutdownHandler(mockGateway as never);
|
||||
sigtermListeners[0]();
|
||||
sigintListeners[0]();
|
||||
sigtermListeners[0]();
|
||||
expect(mockGateway.shutdown).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it("logs the signal name", () => {
|
||||
registerShutdownHandler(mockGateway as never);
|
||||
sigtermListeners[0]();
|
||||
expect(console.log).toHaveBeenCalledWith("Received SIGTERM, shutting down...");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user