perf: 1200장수 용량 fixture와 E1 profile을 추가

900 NPC와 300 synthetic 사용자를 5분 턴으로 처리하는 결정론적 engine profile을 추가하고, 전용 PostgreSQL schema와 Redis DB에 300개 인증 session을 준비하는 격리 load fixture를 제공한다.
This commit is contained in:
2026-08-16 18:31:14 +00:00
parent 299470590a
commit 7e099326ec
16 changed files with 808 additions and 39 deletions
+3
View File
@@ -11,7 +11,10 @@ void test('the 300 viewer, 900 NPC, five-minute sample validates', async () => {
const config = validateLoadConfig(JSON.parse(await readFile(samplePath, 'utf8')));
assert.equal(config.capacity.authenticatedViewers, 300);
assert.equal(config.capacity.npcGenerals, 900);
assert.equal(config.capacity.humanGenerals, 300);
assert.equal(config.capacity.turnIntervalMs, 300_000);
assert.equal(config.isolation.redisDatabase, 15);
assert.equal(config.isolation.profileName, 'load-tests:capacity-300-900-5m');
assert.deepEqual(new Set(config.phases.map((phase) => phase.kind)), new Set(['idle', 'own', 'global', 'mixed']));
});
+46
View File
@@ -0,0 +1,46 @@
import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
import test from 'node:test';
import { validateLoadConfig } from '../src/config.js';
import { assertFixtureIsolation } from '../src/fixture.js';
const samplePath = new URL('../config/300-users-900-npcs-5m.json', import.meta.url);
void test('fixture accepts only the configured private schema and dedicated Redis database', async () => {
const config = validateLoadConfig(JSON.parse(await readFile(samplePath, 'utf8')));
assert.doesNotThrow(() =>
assertFixtureIsolation(config, {
databaseUrl: 'postgresql://fixture:secret@127.0.0.1:15432/sammo?schema=load_capacity_300_900_5m',
redisUrl: 'redis://127.0.0.1:16379/15',
})
);
});
void test('fixture refuses a shared schema, shared Redis database, and public host', async () => {
const config = validateLoadConfig(JSON.parse(await readFile(samplePath, 'utf8')));
assert.throws(
() =>
assertFixtureIsolation(config, {
databaseUrl: 'postgresql://fixture:secret@127.0.0.1:15432/sammo?schema=public',
redisUrl: 'redis://127.0.0.1:16379/15',
}),
/schema must exactly match/u
);
assert.throws(
() =>
assertFixtureIsolation(config, {
databaseUrl: 'postgresql://fixture:secret@127.0.0.1:15432/sammo?schema=load_capacity_300_900_5m',
redisUrl: 'redis://127.0.0.1:16379/0',
}),
/database must exactly match/u
);
assert.throws(
() =>
assertFixtureIsolation(config, {
databaseUrl: 'postgresql://fixture:secret@database.example.com:5432/sammo?schema=load_capacity_300_900_5m',
redisUrl: 'redis://127.0.0.1:16379/15',
}),
/loopback or private/u
);
});