59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|||
|
|
|
||
|
|
import { createGracefulShutdownRuntime } from './shutdown-runtime.js';
|
||
|
|
|
||
|
|
const createRuntime = (server) => createGracefulShutdownRuntime({
|
||
|
|
process: { exit: vi.fn() },
|
||
|
|
shutdownTimeoutMs: 1000,
|
||
|
|
getExitOnShutdown: () => false,
|
||
|
|
getIsShuttingDown: () => false,
|
||
|
|
setIsShuttingDown: vi.fn(),
|
||
|
|
syncToHmrState: vi.fn(),
|
||
|
|
openCodeWatcherRuntime: { stop: vi.fn() },
|
||
|
|
sessionRuntime: { dispose: vi.fn() },
|
||
|
|
scheduledTasksRuntime: { stop: vi.fn() },
|
||
|
|
getHealthCheckInterval: () => null,
|
||
|
|
clearHealthCheckInterval: vi.fn(),
|
||
|
|
getTerminalRuntime: () => null,
|
||
|
|
setTerminalRuntime: vi.fn(),
|
||
|
|
getMessageStreamRuntime: () => null,
|
||
|
|
setMessageStreamRuntime: vi.fn(),
|
||
|
|
shouldSkipOpenCodeStop: () => true,
|
||
|
|
getOpenCodePort: () => null,
|
||
|
|
getOpenCodeProcess: () => null,
|
||
|
|
setOpenCodeProcess: vi.fn(),
|
||
|
|
killProcessOnPort: vi.fn(),
|
||
|
|
waitForPortRelease: vi.fn(async () => true),
|
||
|
|
getServer: () => server,
|
||
|
|
getUiAuthController: () => null,
|
||
|
|
setUiAuthController: vi.fn(),
|
||
|
|
getActiveTunnelController: () => null,
|
||
|
|
setActiveTunnelController: vi.fn(),
|
||
|
|
tunnelAuthController: { clearActiveTunnel: vi.fn() },
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('graceful shutdown runtime', () => {
|
||
|
|
afterEach(() => {
|
||
|
|
vi.useRealTimers();
|
||
|
|
vi.restoreAllMocks();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('clears the server close timeout when the server closes first', async () => {
|
||
|
|
vi.useFakeTimers();
|
||
|
|
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||
|
|
const server = {
|
||
|
|
close: vi.fn((callback) => {
|
||
|
|
callback();
|
||
|
|
}),
|
||
|
|
};
|
||
|
|
|
||
|
|
const runtime = createRuntime(server);
|
||
|
|
await runtime.gracefulShutdown({ exitProcess: false });
|
||
|
|
|
||
|
|
await vi.advanceTimersByTimeAsync(1000);
|
||
|
|
|
||
|
|
expect(warnSpy).not.toHaveBeenCalledWith('Server close timeout reached, forcing shutdown');
|
||
|
|
expect(vi.getTimerCount()).toBe(0);
|
||
|
|
});
|
||
|
|
});
|