Files
spore-ui/test/registry-integration-test.js
2025-10-21 20:17:18 +02:00

213 lines
5.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Registry Integration Test
*
* Tests the registry API integration to ensure the firmware registry functionality works correctly
*/
const http = require('http');
const fs = require('fs');
const path = require('path');
const REGISTRY_URL = 'http://localhost:8080';
const TIMEOUT = 10000; // 10 seconds
function makeRequest(path, method = 'GET', body = null, isFormData = false) {
return new Promise((resolve, reject) => {
const options = {
hostname: 'localhost',
port: 8080,
path: path,
method: method,
headers: {}
};
if (body && !isFormData) {
options.headers['Content-Type'] = 'application/json';
}
const req = http.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
const jsonData = JSON.parse(data);
resolve({ status: res.statusCode, data: jsonData });
} catch (error) {
resolve({ status: res.statusCode, data: data });
}
});
});
req.on('error', (error) => {
reject(error);
});
req.setTimeout(TIMEOUT, () => {
req.destroy();
reject(new Error('Request timeout'));
});
if (body) {
req.write(body);
}
req.end();
});
}
async function testRegistryHealth() {
console.log('Testing registry health endpoint...');
try {
const response = await makeRequest('/health');
if (response.status === 200 && response.data.status === 'healthy') {
console.log('✅ Registry health check passed');
return true;
} else {
console.log('❌ Registry health check failed:', response);
return false;
}
} catch (error) {
console.log('❌ Registry health check failed:', error.message);
return false;
}
}
async function testListFirmware() {
console.log('Testing list firmware endpoint...');
try {
const response = await makeRequest('/firmware');
if (response.status === 200 && Array.isArray(response.data)) {
console.log('✅ List firmware endpoint works, found', response.data.length, 'firmware entries');
return true;
} else {
console.log('❌ List firmware endpoint failed:', response);
return false;
}
} catch (error) {
console.log('❌ List firmware endpoint failed:', error.message);
return false;
}
}
async function testUploadFirmware() {
console.log('Testing upload firmware endpoint...');
// Create a small test firmware file
const testFirmwareContent = Buffer.from('test firmware content');
const metadata = {
name: 'test-firmware',
version: '1.0.0',
labels: {
platform: 'esp32',
app: 'test'
}
};
try {
// Create multipart form data
const boundary = '----formdata-test-boundary';
const formData = [
`--${boundary}`,
'Content-Disposition: form-data; name="metadata"',
'Content-Type: application/json',
'',
JSON.stringify(metadata),
`--${boundary}`,
'Content-Disposition: form-data; name="firmware"; filename="test.bin"',
'Content-Type: application/octet-stream',
'',
testFirmwareContent.toString(),
`--${boundary}--`
].join('\r\n');
const response = await makeRequest('/firmware', 'POST', formData, true);
if (response.status === 201 && response.data.success) {
console.log('✅ Upload firmware endpoint works');
return true;
} else {
console.log('❌ Upload firmware endpoint failed:', response);
return false;
}
} catch (error) {
console.log('❌ Upload firmware endpoint failed:', error.message);
return false;
}
}
async function testDownloadFirmware() {
console.log('Testing download firmware endpoint...');
try {
const response = await makeRequest('/firmware/test-firmware/1.0.0');
if (response.status === 200) {
console.log('✅ Download firmware endpoint works');
return true;
} else {
console.log('❌ Download firmware endpoint failed:', response);
return false;
}
} catch (error) {
console.log('❌ Download firmware endpoint failed:', error.message);
return false;
}
}
async function runTests() {
console.log('Starting Registry Integration Tests...\n');
const tests = [
{ name: 'Health Check', fn: testRegistryHealth },
{ name: 'List Firmware', fn: testListFirmware },
{ name: 'Upload Firmware', fn: testUploadFirmware },
{ name: 'Download Firmware', fn: testDownloadFirmware }
];
let passed = 0;
let total = tests.length;
for (const test of tests) {
console.log(`\n--- ${test.name} ---`);
try {
const result = await test.fn();
if (result) {
passed++;
}
} catch (error) {
console.log(`${test.name} failed with error:`, error.message);
}
}
console.log(`\n--- Test Results ---`);
console.log(`Passed: ${passed}/${total}`);
if (passed === total) {
console.log('🎉 All tests passed! Registry integration is working correctly.');
process.exit(0);
} else {
console.log('⚠️ Some tests failed. Please check the registry server.');
process.exit(1);
}
}
// Run tests if this script is executed directly
if (require.main === module) {
runTests().catch(error => {
console.error('Test runner failed:', error);
process.exit(1);
});
}
module.exports = {
testRegistryHealth,
testListFirmware,
testUploadFirmware,
testDownloadFirmware,
runTests
};