v2: fix chaos test — CIDR от 11 (10.x заблокирован), по 10 на компанию, проверка всех компаний
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ipwhitelist",
|
"name": "ipwhitelist",
|
||||||
"version": "0.5.88",
|
"version": "0.5.89",
|
||||||
"description": "IP WhiteList microservice for cloud provider",
|
"description": "IP WhiteList microservice for cloud provider",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
// ═══════════════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
version: '0.5.88',
|
version: '0.5.89',
|
||||||
iamUrl: process.env.V2_IAM_API_URL || 'https://auth-api.ngcloud.ru',
|
iamUrl: process.env.V2_IAM_API_URL || 'https://auth-api.ngcloud.ru',
|
||||||
appUrl: process.env.V2_APP_URL || 'https://whitelist.nodejsk8s.services.ngcloud.ru',
|
appUrl: process.env.V2_APP_URL || 'https://whitelist.nodejsk8s.services.ngcloud.ru',
|
||||||
};
|
};
|
||||||
|
|||||||
+33
-12
@@ -93,44 +93,65 @@ function createTestRouter() {
|
|||||||
|
|
||||||
// ── GET /chaos — параллельный хаос-тест внутри приложения ────────────
|
// ── GET /chaos — параллельный хаос-тест внутри приложения ────────────
|
||||||
router.get('/chaos', async (req, res) => {
|
router.get('/chaos', async (req, res) => {
|
||||||
const cids = ['WZ10001','WZ20001','WZ20002','WZ01112','WZ03709'];
|
const cids = ['WZ10001','WZ20002','WZ30001','WZ01112'];
|
||||||
|
// Очистка
|
||||||
for (const c of cids) {
|
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_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_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(()=>{});
|
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 emails = ['u1@t.ru', 'u2@t.ru', 'u3@t.ru', 'admin@t.ru'];
|
||||||
const cidMap = { 0:'WZ10001', 1:'WZ20002', 2:'WZ30001', 3:'WZ01112' };
|
// CIDR префиксы от 11 (10.x — заблокирован 10.0.0.0/8!)
|
||||||
|
const cidPrefix = { 0: 11, 1: 12, 2: 13, 3: 14 };
|
||||||
let ok = 0, errors = 0;
|
let ok = 0, errors = 0;
|
||||||
|
const perCompany = 10; // по 10 на компанию (лимит 15)
|
||||||
const tasks = [];
|
const tasks = [];
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let idx = 0; idx < 4; idx++) {
|
||||||
const idx = i % 4;
|
|
||||||
const email = emails[idx];
|
const email = emails[idx];
|
||||||
const clientId = cidMap[idx];
|
const clientId = cids[idx];
|
||||||
const impBy = idx === 3 ? 'real@nubes.ru' : null;
|
const impBy = idx === 3 ? 'real@nubes.ru' : null;
|
||||||
|
const prefix = cidPrefix[idx];
|
||||||
tasks.push((async () => {
|
tasks.push((async () => {
|
||||||
const co = await q.getOrCreateCompany(clientId, clientId);
|
const co = await q.getOrCreateCompany(clientId, clientId);
|
||||||
for (let j = 0; j < 15; j++) {
|
for (let j = 0; j < perCompany; j++) {
|
||||||
try {
|
try {
|
||||||
await q.createEntry(co.id, (10+idx)+'.'+i+'.'+j+'.0/24', 'chaos', email, impBy);
|
await q.createEntry(co.id, prefix + '.0.' + j + '.0/24', 'chaos', email, impBy);
|
||||||
ok++;
|
ok++;
|
||||||
} catch (e) { errors++; }
|
} catch (e) { errors++; }
|
||||||
}
|
}
|
||||||
})());
|
})());
|
||||||
}
|
}
|
||||||
await Promise.all(tasks);
|
await Promise.all(tasks);
|
||||||
const co1 = await q.getOrCreateCompany('WZ10001','WZ10001');
|
|
||||||
const entries = await q.listEntries(co1.id);
|
// Проверка ВСЕХ компаний
|
||||||
|
const checks = [];
|
||||||
|
let totalEntries = 0, totalAudit = 0, anyDupes = false, anyOverLimit = false;
|
||||||
|
for (const clientId of cids) {
|
||||||
|
const co = await q.getOrCreateCompany(clientId, clientId);
|
||||||
|
const entries = await q.listEntries(co.id);
|
||||||
const cidrs = entries.map(e => e.value_cidr);
|
const cidrs = entries.map(e => e.value_cidr);
|
||||||
const dupes = cidrs.length !== new Set(cidrs).size;
|
const dupes = cidrs.length !== new Set(cidrs).size;
|
||||||
const limit = await q.getLimit(co1);
|
const limit = await q.getLimit(co);
|
||||||
const audit = await q.getAudit(co1.id);
|
const audit = await q.getAudit(co.id);
|
||||||
|
totalEntries += entries.length;
|
||||||
|
totalAudit += audit.length;
|
||||||
|
if (dupes) anyDupes = true;
|
||||||
|
if (entries.length > limit) anyOverLimit = true;
|
||||||
|
checks.push({ clientId, entries: entries.length, audit: audit.length, dupes, overLimit: entries.length > limit, limit });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Очистка
|
||||||
for (const c of cids) {
|
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_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_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(()=>{});
|
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 } });
|
|
||||||
|
res.json({
|
||||||
|
ok: !anyDupes && !anyOverLimit && ok === 40,
|
||||||
|
stats: { ok, errors, totalEntries, totalAudit },
|
||||||
|
checks
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return router;
|
return router;
|
||||||
|
|||||||
Reference in New Issue
Block a user