Files
flynn/src/gateway/server.discovery.test.ts
T
2026-02-16 01:48:59 -08:00

77 lines
2.7 KiB
TypeScript

import { describe, it, expect, beforeAll, beforeEach, vi } from 'vitest';
const startDiscoveryMock = vi.fn();
const stopDiscoveryMock = vi.fn();
vi.mock('./discovery.js', () => ({
startGatewayDiscovery: startDiscoveryMock,
}));
describe('GatewayServer discovery lifecycle', () => {
let GatewayServer: typeof import('./server.js').GatewayServer;
let server: import('./server.js').GatewayServer;
const baseConfig = {
port: 18910,
host: '0.0.0.0',
sessionManager: {
getSession: () => ({ id: 's1', addMessage: () => {}, getHistory: () => [], clear: () => {}, setHistory: () => {}, replaceHistory: () => {} }),
listSessions: () => [],
} as unknown as import('./server.js').GatewayServerConfig['sessionManager'],
modelClient: { chat: async () => ({ content: 'ok', usage: { inputTokens: 0, outputTokens: 0 }, stopReason: 'end_turn' }) },
systemPrompt: 'test',
toolRegistry: {
list: () => [],
get: () => undefined,
} as unknown as import('./server.js').GatewayServerConfig['toolRegistry'],
toolExecutor: { execute: async () => ({ success: true, output: '' }) } as unknown as import('./server.js').GatewayServerConfig['toolExecutor'],
version: '0.1.0-test',
} as const;
beforeAll(async () => {
({ GatewayServer } = await import('./server.js'));
});
beforeEach(() => {
vi.clearAllMocks();
startDiscoveryMock.mockResolvedValue({
stop: stopDiscoveryMock,
});
server = new GatewayServer({
...baseConfig,
discovery: {
enabled: true,
serviceName: 'flynn-test',
serviceType: '_flynn._tcp',
txtRecord: { env: 'test' },
},
});
});
it('starts and stops discovery when enabled', async () => {
const typedServer = server as unknown as { startDiscovery: (host: string, port: number) => Promise<void> };
await typedServer.startDiscovery('0.0.0.0', 18910);
await server.stop();
expect(startDiscoveryMock).toHaveBeenCalledOnce();
const [callConfig] = startDiscoveryMock.mock.calls[0] as [Record<string, unknown>];
expect(callConfig.serviceName).toBe('flynn-test');
expect(callConfig.serviceType).toBe('_flynn._tcp');
expect(callConfig.port).toBe(18910);
expect(callConfig.txtRecord).toMatchObject({
env: 'test',
version: '0.1.0-test',
});
expect(stopDiscoveryMock).toHaveBeenCalledOnce();
});
it('does not advertise when host is loopback', async () => {
const typedServer = server as unknown as { startDiscovery: (host: string, port: number) => Promise<void> };
await typedServer.startDiscovery('127.0.0.1', 18911);
await server.stop();
expect(startDiscoveryMock).not.toHaveBeenCalled();
expect(stopDiscoveryMock).not.toHaveBeenCalled();
});
});