94 lines
2.8 KiB
JavaScript
94 lines
2.8 KiB
JavaScript
/**
|
||
* GMP-Agent健康检查测试 · GH-GMP-004 · 录册A02
|
||
*
|
||
* 测试项:
|
||
* 1. Node.js版本 >= 20
|
||
* 2. 必要的标准库可用
|
||
* 3. 文件系统可写
|
||
* 4. 环境变量可读
|
||
* 5. GMP目录结构正确
|
||
*/
|
||
|
||
'use strict';
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
const os = require('os');
|
||
|
||
let passed = 0;
|
||
let failed = 0;
|
||
|
||
function assert(condition, message) {
|
||
if (condition) {
|
||
passed++;
|
||
console.log(` ✅ ${message}`);
|
||
} else {
|
||
failed++;
|
||
console.error(` ❌ ${message}`);
|
||
}
|
||
}
|
||
|
||
console.log('\n🧪 test-health.js · GMP-Agent健康检查\n');
|
||
|
||
// Test 1: Node.js版本
|
||
const nodeVersion = parseInt(process.versions.node.split('.')[0]);
|
||
assert(nodeVersion >= 20, `Node.js版本 >= 20(实际v${process.versions.node})`);
|
||
|
||
// Test 2: 标准库可用
|
||
let stdlibOk = true;
|
||
try {
|
||
require('fs');
|
||
require('path');
|
||
require('child_process');
|
||
require('events');
|
||
require('http');
|
||
require('os');
|
||
require('crypto');
|
||
} catch (err) {
|
||
stdlibOk = false;
|
||
}
|
||
assert(stdlibOk, '所有必要标准库可用(fs/path/child_process/events/http/os/crypto)');
|
||
|
||
// Test 3: 文件系统可写
|
||
const testFile = path.join(os.tmpdir(), `gmp-health-test-${Date.now()}.tmp`);
|
||
try {
|
||
fs.writeFileSync(testFile, 'health-check', 'utf-8');
|
||
const content = fs.readFileSync(testFile, 'utf-8');
|
||
assert(content === 'health-check', '文件系统读写正常');
|
||
fs.unlinkSync(testFile);
|
||
} catch (err) {
|
||
assert(false, `文件系统读写正常(错误: ${err.message})`);
|
||
}
|
||
|
||
// Test 4: 环境变量可读
|
||
assert(typeof process.env === 'object', '环境变量对象可访问');
|
||
assert(typeof process.env.PATH === 'string' || typeof process.env.Path === 'string', 'PATH环境变量存在');
|
||
|
||
// Test 5: GMP目录结构(如果在仓库内运行)
|
||
const gmpAgentDir = path.join(__dirname, '..');
|
||
const srcDir = path.join(gmpAgentDir, 'src');
|
||
if (fs.existsSync(srcDir)) {
|
||
assert(fs.existsSync(path.join(srcDir, 'logger.js')), 'src/logger.js 存在');
|
||
assert(fs.existsSync(path.join(srcDir, 'test-runner.js')), 'src/test-runner.js 存在');
|
||
} else {
|
||
console.log(' ⏭️ 跳过目录结构检查(非仓库环境)');
|
||
}
|
||
|
||
// Test 6: JSON序列化正常(确保日志模块能工作)
|
||
try {
|
||
const obj = { timestamp: new Date().toISOString(), level: 'info', message: '测试中文消息', emoji: '🔥' };
|
||
const json = JSON.stringify(obj);
|
||
const parsed = JSON.parse(json);
|
||
assert(parsed.message === '测试中文消息', 'JSON中文序列化/反序列化正常');
|
||
assert(parsed.emoji === '🔥', 'JSON emoji序列化正常');
|
||
} catch {
|
||
assert(false, 'JSON序列化正常');
|
||
}
|
||
|
||
// ─── 结果 ──────────────────────────────────────────────
|
||
console.log(`\n📊 结果: ${passed} passed, ${failed} failed\n`);
|
||
|
||
if (failed > 0) {
|
||
process.exit(1);
|
||
}
|