v2: /v2/test/chaos — параллельный хаос-тест внутри приложения (Promise.all)
This commit is contained in:
@@ -91,6 +91,48 @@ function createTestRouter() {
|
||||
}
|
||||
});
|
||||
|
||||
// ── GET /chaos — параллельный хаос-тест внутри приложения ────────────
|
||||
router.get('/chaos', async (req, res) => {
|
||||
const cids = ['WZ10001','WZ20001','WZ20002','WZ01112','WZ03709'];
|
||||
for (const c of cids) {
|
||||
await pool.query('DELETE FROM v2_entries WHERE company_id IN (SELECT id FROM v2_companies WHERE client_id=$1)',[c]).catch(()=>{});
|
||||
await pool.query('DELETE FROM v2_audit WHERE company_id IN (SELECT id FROM v2_companies WHERE client_id=$1)',[c]).catch(()=>{});
|
||||
await pool.query('DELETE FROM v2_companies WHERE client_id=$1',[c]).catch(()=>{});
|
||||
}
|
||||
const emails = ['u1@t.ru', 'u2@t.ru', 'u3@t.ru', 'admin@t.ru'];
|
||||
const cidMap = { 0:'WZ10001', 1:'WZ20002', 2:'WZ30001', 3:'WZ01112' };
|
||||
let ok = 0, errors = 0;
|
||||
const tasks = [];
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const idx = i % 4;
|
||||
const email = emails[idx];
|
||||
const clientId = cidMap[idx];
|
||||
const impBy = idx === 3 ? 'real@nubes.ru' : null;
|
||||
tasks.push((async () => {
|
||||
const co = await q.getOrCreateCompany(clientId, clientId);
|
||||
for (let j = 0; j < 15; j++) {
|
||||
try {
|
||||
await q.createEntry(co.id, (10+idx)+'.'+i+'.'+j+'.0/24', 'chaos', email, impBy);
|
||||
ok++;
|
||||
} catch (e) { errors++; }
|
||||
}
|
||||
})());
|
||||
}
|
||||
await Promise.all(tasks);
|
||||
const co1 = await q.getOrCreateCompany('WZ10001','WZ10001');
|
||||
const entries = await q.listEntries(co1.id);
|
||||
const cidrs = entries.map(e => e.value_cidr);
|
||||
const dupes = cidrs.length !== new Set(cidrs).size;
|
||||
const limit = await q.getLimit(co1);
|
||||
const audit = await q.getAudit(co1.id);
|
||||
for (const c of cids) {
|
||||
await pool.query('DELETE FROM v2_entries WHERE company_id IN (SELECT id FROM v2_companies WHERE client_id=$1)',[c]).catch(()=>{});
|
||||
await pool.query('DELETE FROM v2_audit WHERE company_id IN (SELECT id FROM v2_companies WHERE client_id=$1)',[c]).catch(()=>{});
|
||||
await pool.query('DELETE FROM v2_companies WHERE client_id=$1',[c]).catch(()=>{});
|
||||
}
|
||||
res.json({ ok: !dupes && entries.length <= limit, stats: { ok, errors }, checks: { noDupes: !dupes, withinLimit: entries.length <= limit, auditCount: audit.length, wZ10001Entries: entries.length, limit } });
|
||||
});
|
||||
|
||||
return router;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user