Files
core2026/app/game-engine/test/turnDaemonMemoryReporter.test.ts
T

60 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { buildTurnDaemonMemoryReport } from '../src/turn/turnDaemonMemoryReporter.js';
const context = {
year: 214,
month: 12,
generals: 2461,
cities: 78,
nations: 3,
troops: 15,
events: 4,
generalTurnQueues: 2461,
nationTurnQueues: 18,
lifecycleState: 'paused',
};
describe('turn daemon memory reporting', () => {
it('reports bounded process and world-size fields without inspecting or cloning entities', () => {
const result = buildTurnDaemonMemoryReport(
'hwe',
'interval',
context,
{
rss: 1_258_291_200,
heapTotal: 1_100_000_000,
heapUsed: 900_000_000,
external: 20_000_000,
arrayBuffers: 10_000_000,
},
3_221_225_472
);
expect(result.warning).toBe(false);
expect(result.message).toContain('profile=hwe reason=interval');
expect(result.message).toContain('heapLimitMiB=3072');
expect(result.message).toContain('year=214 month=12 generals=2461');
expect(result.message).toContain('generalTurnQueues=2461 nationTurnQueues=18');
expect(result.message).toContain('lifecycle=paused');
});
it('marks samples at or above 80 percent of the V8 heap limit as warnings', () => {
const result = buildTurnDaemonMemoryReport(
'hwe',
'interval',
context,
{
rss: 1_500_000_000,
heapTotal: 1_400_000_000,
heapUsed: 1_288_490_189,
external: 0,
arrayBuffers: 0,
},
1_610_612_736
);
expect(result.warning).toBe(true);
});
});