Fix false stale Fleet reports caused by clock skew
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user