agenthub/tests/discovery.test.ts

46 lines
1.5 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { discoverServer, getLanIPv4, resolveAdvertiseUrl, startDiscoveryBroadcaster } from '../src/discovery.js';
describe('discovery', () => {
it('returns a LAN IPv4 address', () => {
const ip = getLanIPv4();
expect(ip).toBeDefined();
expect(ip).not.toBe('127.0.0.1');
});
it('resolves advertise URL for 0.0.0.0 to LAN IP', () => {
const url = resolveAdvertiseUrl('0.0.0.0', 3377);
expect(url).toMatch(/^http:\/\/\d+\.\d+\.\d+\.\d+:3377$/);
});
it('resolves advertise URL for a specific host', () => {
const url = resolveAdvertiseUrl('127.0.0.1', 3377);
expect(url).toBe('http://127.0.0.1:3377');
});
it('discovers a broadcaster on localhost', async () => {
const port = 53378;
const url = 'http://127.0.0.1:3377';
const broadcaster = startDiscoveryBroadcaster(url, { port, intervalMs: 500 });
try {
const discovered = await discoverServer(3000, port);
expect(discovered).toBe(url);
} finally {
broadcaster.stop();
}
});
it('broadcasts the latest server URL without restarting the broadcaster', async () => {
const port = 53379;
let url = 'http://127.0.0.1:3377';
const broadcaster = startDiscoveryBroadcaster(() => url, { port, intervalMs: 50 });
try {
expect(await discoverServer(1000, port)).toBe(url);
url = 'http://127.0.0.1:4477';
expect(await discoverServer(1000, port)).toBe(url);
} finally {
broadcaster.stop();
}
});
});