Fix false stale Fleet reports caused by clock skew

This commit is contained in:
2026-09-19 20:17:43 -04:00
parent 345839fbd4
commit 1d073779fe
9 changed files with 224 additions and 15 deletions
+25
View File
@@ -13,6 +13,31 @@ afterEach(async () => fixture.cleanup());
const payload = gameEvent('round_change', 17);
it('timestamps initial telemetry and subsequent status and telemetry events with the server clock', async () => {
const { GET } = await import('../../src/routes/api/events/servers/+server.js');
const { emit } = await import('../../src/lib/server/pipeline/bus.js');
const startedAt = Date.parse('2026-09-19T12:00:00Z');
const clock = vi.spyOn(Date, 'now').mockReturnValue(startedAt);
const reader = (await GET()).body!.getReader();
const nextEvent = async () => {
const frame = new TextDecoder().decode((await reader.read()).value);
return JSON.parse(frame.split('\n').find(line => line.startsWith('data: '))!.slice(6));
};
try {
await reader.read(); // Initial SSE comment.
expect(await nextEvent()).toMatchObject({ snapshot: true, entries: [], serverNow: startedAt });
clock.mockReturnValue(startedAt + 30_000);
emit({ type: 'server-status', entries: [] });
expect(await nextEvent()).toEqual({ type: 'server-status', entries: [], serverNow: startedAt + 30_000 });
clock.mockReturnValue(startedAt + 31_000);
emit({ type: 'server-telemetry', entries: [] });
expect(await nextEvent()).toEqual({ type: 'server-telemetry', entries: [], serverNow: startedAt + 31_000 });
} finally {
await reader.cancel();
clock.mockRestore();
}
});
it('persists full player stats, broadcasts updates, and leaves RCON safety data untouched', async () => {
const { subscribe } = await import('../../src/lib/server/pipeline/bus.js');
const listener = vi.fn();