Thin standalone entry for pre-seeding N accounts before the first harness run. Wraps SessionPool.seed and writes .env.stresstest. End-to-end verified: ran against local dev with --count=4, all 4 accounts landed in the DB with is_test_account=TRUE, cred file written with correct format. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
#!/usr/bin/env tsx
|
|
/**
|
|
* Seed N soak-harness accounts via the register endpoint.
|
|
*
|
|
* Usage:
|
|
* TEST_URL=http://localhost:8000 \
|
|
* SOAK_INVITE_CODE=SOAKTEST \
|
|
* bun run seed -- --count=16
|
|
*
|
|
* The invite code must already exist and be flagged marks_as_test=TRUE
|
|
* in the target environment. See docs/soak-harness-bringup.md.
|
|
*/
|
|
|
|
import * as path from 'path';
|
|
import { SessionPool } from '../core/session-pool';
|
|
import { createLogger } from '../core/logger';
|
|
|
|
function parseArgs(argv: string[]): { count: number } {
|
|
const result = { count: 16 };
|
|
for (const arg of argv.slice(2)) {
|
|
const m = arg.match(/^--count=(\d+)$/);
|
|
if (m) result.count = parseInt(m[1], 10);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
async function main(): Promise<void> {
|
|
const { count } = parseArgs(process.argv);
|
|
const targetUrl = process.env.TEST_URL ?? 'http://localhost:8000';
|
|
const inviteCode = process.env.SOAK_INVITE_CODE;
|
|
if (!inviteCode) {
|
|
console.error('SOAK_INVITE_CODE env var is required');
|
|
console.error(' Local dev: SOAK_INVITE_CODE=SOAKTEST');
|
|
console.error(' Staging: SOAK_INVITE_CODE=5VC2MCCN');
|
|
process.exit(2);
|
|
}
|
|
|
|
const credFile = path.resolve(__dirname, '..', '.env.stresstest');
|
|
const logger = createLogger({ runId: `seed-${Date.now()}` });
|
|
|
|
logger.info('seed_start', { count, targetUrl, credFile });
|
|
try {
|
|
const accounts = await SessionPool.seed({
|
|
targetUrl,
|
|
inviteCode,
|
|
count,
|
|
credFile,
|
|
logger,
|
|
});
|
|
logger.info('seed_complete', { created: accounts.length });
|
|
console.error(`Seeded ${accounts.length} accounts → ${credFile}`);
|
|
} catch (err) {
|
|
logger.error('seed_failed', {
|
|
error: err instanceof Error ? err.message : String(err),
|
|
});
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|