pvea_proxmox
Version:
proxmox api library for node.js.
182 lines (151 loc) • 5.15 kB
JavaScript
// Node.js compatibility test for pvea_proxmox
const { execSync } = require('child_process');
function testNodeVersion() {
console.log('Testing Node.js compatibility...');
const nodeVersion = process.version;
const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
console.log(`Current Node.js version: ${nodeVersion}`);
if (majorVersion >= 16) {
console.log('✓ Node.js version is compatible (>=16.0.0)');
return true;
} else {
console.error('✗ Node.js version is too old. Required: >=16.0.0');
return false;
}
}
function testESModules() {
console.log('\nTesting ES6+ features compatibility...');
try {
// Test modern JavaScript features
const asyncFunction = async () => 'test';
const arrow = () => 'arrow';
const { test } = { test: 'destructuring' };
const spread = [...[1, 2, 3]];
const template = `template ${test}`;
// Test optional chaining (Node 14+)
const obj = { nested: { value: 'test' } };
const optional = obj?.nested?.value;
// Test nullish coalescing (Node 14+)
const nullish = null ?? 'default';
console.log('✓ Modern JavaScript features are supported');
console.log(' - Async/await: ✓');
console.log(' - Arrow functions: ✓');
console.log(' - Destructuring: ✓');
console.log(' - Spread operator: ✓');
console.log(' - Template literals: ✓');
console.log(' - Optional chaining: ✓');
console.log(' - Nullish coalescing: ✓');
return true;
} catch (error) {
console.error('✗ Modern JavaScript features test failed:', error.message);
return false;
}
}
function testHttpsModule() {
console.log('\nTesting HTTPS module compatibility...');
try {
const https = require('https');
const agent = new https.Agent({
rejectUnauthorized: false
});
console.log('✓ HTTPS module is working correctly');
return true;
} catch (error) {
console.error('✗ HTTPS module test failed:', error.message);
return false;
}
}
function testQuerystringModule() {
console.log('\nTesting querystring module...');
try {
const qs = require('querystring');
const encoded = qs.encode({ test: 'value', param: 'data' });
if (encoded === 'test=value¶m=data') {
console.log('✓ Querystring module is working correctly');
return true;
} else {
console.error('✗ Querystring module test failed: unexpected output');
return false;
}
} catch (error) {
console.error('✗ Querystring module test failed:', error.message);
return false;
}
}
function testPveaRequire() {
console.log('\nTesting pvea_proxmox module loading...');
try {
const pveajs = require('../lib/pvea.js');
// Test if we can create an instance without errors
const pvea = new pveajs('test.example.com', 'test@pve', 'password', null, 8006, true);
console.log('✓ pvea_proxmox module loads successfully');
console.log('✓ Class instantiation works correctly');
return true;
} catch (error) {
console.error('✗ pvea_proxmox module test failed:', error.message);
return false;
}
}
function testPackageEngines() {
console.log('\nTesting package.json engines compatibility...');
try {
const packageJson = require('../package.json');
const requiredNode = packageJson.engines?.node;
if (requiredNode) {
console.log(`✓ Package specifies Node.js requirement: ${requiredNode}`);
return true;
} else {
console.error('✗ No Node.js engine requirement specified in package.json');
return false;
}
} catch (error) {
console.error('✗ Package.json engines test failed:', error.message);
return false;
}
}
async function runCompatibilityTests() {
console.log('🔍 Running Node.js compatibility tests for pvea_proxmox...\n');
const tests = [
testNodeVersion,
testESModules,
testHttpsModule,
testQuerystringModule,
testPveaRequire,
testPackageEngines
];
let passed = 0;
let failed = 0;
for (const test of tests) {
try {
const result = test();
if (result) {
passed++;
} else {
failed++;
}
} catch (error) {
console.error(`Test failed with error: ${error.message}`);
failed++;
}
}
console.log(`\n📊 Compatibility Test Results:`);
console.log(` ✅ Passed: ${passed}`);
console.log(` ❌ Failed: ${failed}`);
if (failed === 0) {
console.log('\n🎉 All compatibility tests passed!');
console.log('📦 This package is compatible with Node.js 16+ including Node.js 22');
console.log('\n💡 Recommended Node.js versions:');
console.log(' • Node.js 18.x (LTS)');
console.log(' • Node.js 20.x (LTS)');
console.log(' • Node.js 22.x (Current)');
process.exit(0);
} else {
console.log('\n❌ Some compatibility tests failed');
process.exit(1);
}
}
// Run tests if this file is executed directly
if (require.main === module) {
runCompatibilityTests();
}
module.exports = { runCompatibilityTests };