import fs from 'node:fs'; import assert from 'node:assert/strict'; import { execFileSync } from 'node:child_process'; import { createRequire } from 'node:module'; const pg = createRequire('/app/backend/package.json')('pg'); const database = process.env.MMAPP_OWN_SQL_DB; assert(/^mm_accept_166_\d+$/.test(database)); const url = new URL(process.env.DATABASE_URL); assert.equal(url.pathname, '/' + database); assert.equal(url.username, database); const client = new pg.Client({ connectionString: url.toString() }); await client.connect(); const role = (await client.query('SELECT rolsuper,rolcreatedb,rolcreaterole,rolbypassrls FROM pg_roles WHERE rolname=current_user')).rows[0]; assert(Object.values(role).every(v => v === false)); await client.end(); const pkg = JSON.parse(fs.readFileSync('/checks/package245.json')); assert.equal(pkg.scripts['test:traffic-flow'].split('geoip-download.test.ts').length - 1, 1); assert.equal(pkg.scripts['test:all'].split('npm run test:traffic-flow').length - 1, 1); fs.writeFileSync('/app/backend/package.json', JSON.stringify(pkg, null, 2)); const report = { date: '2026-10-14', block: '12.5.245', scope: 'Changed traffic-flow profile only, source acceptance image + current npm command metadata + owned PostgreSQL', passed: false, newGeoipHttpTestIncludedOnce: true, testAllProfileIncludedOnce: true, productionImagesChanged: false }; try { const started = Date.now(); const output = execFileSync('npm', ['--prefix', 'backend', 'run', 'test:traffic-flow'], { cwd: '/app', timeout: 180000, maxBuffer: 8 * 1024 ** 2, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'test', DATABASE_PATH: '/tmp/' + database + '/legacy.db', GEOIP_DIR: '/tmp/' + database + '/geoip' }, stdio: ['ignore', 'pipe', 'pipe'] }); fs.writeFileSync('/checks/traffic-flow245-private.log', output, { mode: 0o600 }); assert(output.includes('GeoIP HTTP: whole-body timeout, declared/chunked limits,304 and recovery passed')); report.durationMs = Date.now() - started; report.unavailableSqlBranches = output.split('\n').filter(s => /\bskip(?:ped)?\b/i.test(s) && /PostgreSQL|owned|database|MMAPP_OWN|не пустая БД/i.test(s)).map(s => s.trim()); const expectedOptionalSkips = ['Monthly SQL: skip (requires an owned isolated database)', 'IPv6 UDP/worker/SQL: skip (requires an owned isolated database)']; assert.deepEqual(report.unavailableSqlBranches, expectedOptionalSkips); report.optionalSqlBranchesRequireTheirOwnDedicatedDatabase = true; report.profileExitCode = 0; report.passed = true; } catch (e) { report.failure = { name: e.name }; if (e.stdout || e.stderr) fs.writeFileSync('/checks/traffic-flow245-private.log', String(e.stdout ?? '') + '\n' + String(e.stderr ?? ''), { mode: 0o600 }); process.exitCode = 1; } finally { fs.writeFileSync('/checks/traffic-flow245.json', JSON.stringify(report, null, 2) + '\n'); console.log(JSON.stringify(report)); }