62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
|
// health_check.js — проверяет что всё готово для UI-тестирования
|
|
|
|
const { execSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const CHROMIUM_PATH = path.join(
|
|
process.env.HOME,
|
|
'.cache/ms-playwright/chromium_headless_shell-1223/chrome-headless-shell-linux64/chrome-headless-shell'
|
|
);
|
|
|
|
const LIB_PATHS = [
|
|
path.join(process.env.HOME, 'chromium-libs/libs/usr/lib/x86_64-linux-gnu'),
|
|
path.join(process.env.HOME, 'chromium-libs/libs/lib/x86_64-linux-gnu')
|
|
];
|
|
|
|
const LD_LIBRARY_PATH = LIB_PATHS.join(':');
|
|
|
|
const checks = [];
|
|
|
|
// 1. Chromium binary exists
|
|
if (fs.existsSync(CHROMIUM_PATH)) {
|
|
checks.push({ name: 'Chromium binary', status: 'OK' });
|
|
} else {
|
|
checks.push({ name: 'Chromium binary', status: 'FAIL', detail: `Not found: ${CHROMIUM_PATH}` });
|
|
}
|
|
|
|
// 2. Libraries exist
|
|
if (fs.existsSync(LIB_PATHS[0])) {
|
|
const libs = fs.readdirSync(LIB_PATHS[0]).filter(f => f.endsWith('.so') || f.includes('.so.'));
|
|
checks.push({ name: 'Shared libraries', status: libs.length > 20 ? 'OK' : 'FAIL', detail: `${libs.length} .so files` });
|
|
} else {
|
|
checks.push({ name: 'Shared libraries', status: 'FAIL', detail: `Not found: ${LIB_PATHS[0]}` });
|
|
}
|
|
|
|
// 3. Chromium launches
|
|
try {
|
|
const env = { ...process.env, LD_LIBRARY_PATH };
|
|
execSync(`"${CHROMIUM_PATH}" --headless --disable-gpu --no-sandbox --dump-dom about:blank`, { env, timeout: 10000, stdio: 'pipe' });
|
|
checks.push({ name: 'Chromium launches', status: 'OK' });
|
|
} catch (e) {
|
|
checks.push({ name: 'Chromium launches', status: 'FAIL', detail: e.message.slice(0, 200) });
|
|
}
|
|
|
|
// 4. Playwright available
|
|
try {
|
|
require('playwright-core');
|
|
checks.push({ name: 'Playwright module', status: 'OK' });
|
|
} catch {
|
|
checks.push({ name: 'Playwright module', status: 'FAIL', detail: 'Run: npm install (in scripts/)' });
|
|
}
|
|
|
|
// Output
|
|
const allOk = checks.every(c => c.status === 'OK');
|
|
console.log(allOk ? '✅ All checks passed' : '❌ Some checks failed');
|
|
checks.forEach(c => {
|
|
const icon = c.status === 'OK' ? '✓' : '✗';
|
|
console.log(` ${icon} ${c.name}: ${c.status}${c.detail ? ' — ' + c.detail : ''}`);
|
|
});
|
|
process.exit(allOk ? 0 : 1);
|