Skip to main content
Glama
demo-run-all-tests.cjs18.2 kB
#!/usr/bin/env node /** * Demo Version of Simple All-in-One Test Runner * Shows what the real script would produce with working credentials */ const fs = require('fs'); const path = require('path'); // Simulated test results const MOCK_RESULTS = [ // SAOLA Direct Customer Results { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/invoices/caui', testName: 'Basic unblended costs', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1250, responseSize: 15240, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/invoices/caui', testName: 'Service breakdown (amortized)', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1850, responseSize: 22400, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/invoices/caui', testName: 'EC2 costs only', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1100, responseSize: 8500, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/budgets/v2/i/', testName: 'All budgets (metadata)', category: 'Budget Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 890, responseSize: 12800, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/budgets/v2/i/', testName: 'AWS budgets only', category: 'Budget Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 920, responseSize: 9600, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/recommendationsNew/heatmap/summary', testName: 'Recommendations summary', category: 'Recommendations', method: 'POST', success: true, statusCode: 200, hasData: true, duration: 2100, responseSize: 18600, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/recommendations/report', testName: 'Legacy recommendations', category: 'Recommendations (Legacy)', method: 'GET', success: false, statusCode: 404, hasData: false, duration: 800, responseSize: 156, error: 'No legacy recommendations available' }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/users', testName: 'User information', category: 'User Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 650, responseSize: 4200, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/users/plain-sub-users', testName: 'Customer divisions', category: 'MSP Management', method: 'GET', success: false, statusCode: 403, hasData: false, duration: 400, responseSize: 120, error: 'Not available for direct customers' }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/anomaly-detection', testName: 'Recent anomalies', category: 'Anomaly Detection', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1800, responseSize: 14500, error: null }, { account: 'SAOLA (Direct Customer)', customer: 'Direct', endpoint: '/invoices/service-names/distinct', testName: 'Service names (limited)', category: 'Service Discovery', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 750, responseSize: 6800, error: null }, // AllCloud MSP - Bank Leumi Results { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/invoices/caui', testName: 'Basic unblended costs', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1850, responseSize: 28400, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/invoices/caui', testName: 'Service breakdown (amortized)', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 2200, responseSize: 35600, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/invoices/caui', testName: 'EC2 costs only', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1400, responseSize: 18200, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/budgets/v2/i/', testName: 'All budgets (metadata)', category: 'Budget Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1200, responseSize: 16800, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/budgets/v2/i/', testName: 'AWS budgets only', category: 'Budget Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1100, responseSize: 14200, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/recommendationsNew/heatmap/summary', testName: 'Recommendations summary', category: 'Recommendations', method: 'POST', success: true, statusCode: 200, hasData: true, duration: 3200, responseSize: 24800, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/recommendations/report', testName: 'Legacy recommendations', category: 'Recommendations (Legacy)', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1800, responseSize: 12600, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/users', testName: 'User information', category: 'User Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 850, responseSize: 5400, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/users/plain-sub-users', testName: 'Customer divisions', category: 'MSP Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1200, responseSize: 28000, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/anomaly-detection', testName: 'Recent anomalies', category: 'Anomaly Detection', method: 'GET', success: false, statusCode: 403, hasData: false, duration: 600, responseSize: 200, error: 'Insufficient permissions for anomaly data' }, { account: 'AllCloud (MSP)', customer: 'Bank Leumi', endpoint: '/invoices/service-names/distinct', testName: 'Service names (limited)', category: 'Service Discovery', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 900, responseSize: 8500, error: null }, // AllCloud MSP - Bank Hapoalim Results { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/invoices/caui', testName: 'Basic unblended costs', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1650, responseSize: 22100, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/invoices/caui', testName: 'Service breakdown (amortized)', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1900, responseSize: 26800, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/invoices/caui', testName: 'EC2 costs only', category: 'Cost Analysis', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1200, responseSize: 14500, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/budgets/v2/i/', testName: 'All budgets (metadata)', category: 'Budget Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1050, responseSize: 13200, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/budgets/v2/i/', testName: 'AWS budgets only', category: 'Budget Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 980, responseSize: 11800, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/recommendationsNew/heatmap/summary', testName: 'Recommendations summary', category: 'Recommendations', method: 'POST', success: true, statusCode: 200, hasData: true, duration: 2800, responseSize: 19400, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/recommendations/report', testName: 'Legacy recommendations', category: 'Recommendations (Legacy)', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1600, responseSize: 9800, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/users', testName: 'User information', category: 'User Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 720, responseSize: 4800, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/users/plain-sub-users', testName: 'Customer divisions', category: 'MSP Management', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 1100, responseSize: 25600, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/anomaly-detection', testName: 'Recent anomalies', category: 'Anomaly Detection', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 2200, responseSize: 16800, error: null }, { account: 'AllCloud (MSP)', customer: 'Bank Hapoalim', endpoint: '/invoices/service-names/distinct', testName: 'Service names (limited)', category: 'Service Discovery', method: 'GET', success: true, statusCode: 200, hasData: true, duration: 850, responseSize: 7900, error: null } ]; class DemoTestRunner { constructor() { this.results = MOCK_RESULTS; this.startTime = Date.now() - 65000; // Simulate 65 second run } log(message, level = 'info') { const timestamp = new Date().toISOString().split('.')[0]; const emoji = { info: '📋', success: '✅', error: '❌', warning: '⚠️', test: '🧪', title: '🚀' }[level] || '📋'; console.log(`${timestamp} ${emoji} ${message}`); } async simulateRun() { this.log('🚀 SIMPLE ENDPOINT TEST RUNNER', 'title'); this.log('Comprehensive testing of all Umbrella API endpoints', 'info'); this.log('Testing 2 accounts with 11 endpoint variations\n'); // Simulate SAOLA account testing this.log('\n' + '='.repeat(50), 'info'); this.log('Testing SAOLA (Direct Customer)', 'title'); this.log('='.repeat(50), 'info'); this.log('Authenticating SAOLA (Direct Customer)...', 'info'); this.log('SAOLA (Direct Customer) authentication successful', 'success'); // Show some SAOLA tests const saolaResults = this.results.filter(r => r.account === 'SAOLA (Direct Customer)'); saolaResults.slice(0, 3).forEach(r => { this.log(`Testing: SAOLA - ${r.testName}`, 'test'); if (r.success) { this.log(`✅ SAOLA - ${r.testName} - ${r.statusCode} - ${r.duration}ms (${r.responseSize} bytes)`, 'success'); } else { this.log(`❌ SAOLA - ${r.testName} - ${r.statusCode} - ${r.error}`, 'error'); } }); this.log('... (8 more SAOLA tests completed)', 'info'); // Simulate AllCloud account testing this.log('\n' + '='.repeat(50), 'info'); this.log('Testing AllCloud (MSP)', 'title'); this.log('='.repeat(50), 'info'); this.log('Authenticating AllCloud (MSP)...', 'info'); this.log('AllCloud (MSP) authentication successful', 'success'); // Show Bank Leumi tests const leumiResults = this.results.filter(r => r.customer === 'Bank Leumi'); leumiResults.slice(0, 3).forEach(r => { this.log(`Testing: AllCloud - ${r.testName} (Bank Leumi)`, 'test'); if (r.success) { this.log(`✅ AllCloud - ${r.testName} (Bank Leumi) - ${r.statusCode} - ${r.duration}ms (${r.responseSize} bytes)`, 'success'); } else { this.log(`❌ AllCloud - ${r.testName} (Bank Leumi) - ${r.statusCode} - ${r.error}`, 'error'); } }); this.log('... (8 more Bank Leumi tests completed)', 'info'); // Show Bank Hapoalim tests this.log('... (11 Bank Hapoalim tests completed)', 'info'); this.generateReport(); } generateReport() { const duration = Date.now() - this.startTime; const totalTests = this.results.length; const successfulTests = this.results.filter(r => r.success).length; this.log('\n' + '='.repeat(60), 'info'); this.log('📊 COMPREHENSIVE TEST RESULTS', 'title'); this.log('='.repeat(60), 'info'); this.log(`Total Tests: ${totalTests}`, 'info'); this.log(`Successful: ${successfulTests} (${((successfulTests/totalTests)*100).toFixed(1)}%)`, 'success'); this.log(`Failed: ${totalTests - successfulTests} (${(((totalTests - successfulTests)/totalTests)*100).toFixed(1)}%)`, 'error'); this.log(`Duration: ${(duration/1000).toFixed(1)}s`, 'info'); // Account performance this.log('\n📊 ACCOUNT PERFORMANCE:', 'info'); const accountGroups = {}; this.results.forEach(r => { if (!accountGroups[r.account]) { accountGroups[r.account] = { total: 0, success: 0, withData: 0, totalSize: 0 }; } accountGroups[r.account].total++; if (r.success) accountGroups[r.account].success++; if (r.hasData) accountGroups[r.account].withData++; accountGroups[r.account].totalSize += r.responseSize; }); Object.entries(accountGroups).forEach(([account, stats]) => { const successRate = ((stats.success/stats.total)*100).toFixed(1); const dataRate = ((stats.withData/stats.total)*100).toFixed(1); const dataSize = (stats.totalSize/1024).toFixed(1); this.log(`${account}:`, 'info'); this.log(` Success: ${stats.success}/${stats.total} (${successRate}%)`, 'info'); this.log(` With Data: ${stats.withData}/${stats.total} (${dataRate}%)`, 'info'); this.log(` Data Retrieved: ${dataSize}KB`, 'info'); }); // Category performance this.log('\n📂 CATEGORY PERFORMANCE:', 'info'); const categoryGroups = {}; this.results.forEach(r => { if (!categoryGroups[r.category]) { categoryGroups[r.category] = { total: 0, success: 0 }; } categoryGroups[r.category].total++; if (r.success) categoryGroups[r.category].success++; }); Object.entries(categoryGroups).forEach(([category, stats]) => { const rate = ((stats.success/stats.total)*100).toFixed(1); this.log(`${category}: ${stats.success}/${stats.total} (${rate}%)`, 'info'); }); // MSP Customer comparison this.log('\n🏦 MSP CUSTOMER COMPARISON:', 'info'); const mspCustomers = ['Bank Leumi', 'Bank Hapoalim']; mspCustomers.forEach(customer => { const customerResults = this.results.filter(r => r.customer === customer); const successful = customerResults.filter(r => r.success).length; const withData = customerResults.filter(r => r.hasData).length; const totalSize = customerResults.reduce((sum, r) => sum + r.responseSize, 0); this.log(`${customer}:`, 'info'); this.log(` Endpoint Tests: ${successful}/${customerResults.length} successful (${((successful/customerResults.length)*100).toFixed(1)}%)`, 'info'); this.log(` Data Retrieved: ${(totalSize/1024).toFixed(1)}KB`, 'info'); }); // Top working endpoints const working = this.results.filter(r => r.success && r.hasData); this.log('\n✅ TOP WORKING ENDPOINTS:', 'success'); working.slice(0, 10).forEach(r => { const customerInfo = r.customer !== 'Direct' ? ` (${r.customer})` : ''; this.log(` ${r.endpoint} - ${r.testName}${customerInfo} - ${r.duration}ms`, 'info'); }); // Failed endpoints const failed = this.results.filter(r => !r.success); if (failed.length > 0) { this.log('\n❌ FAILED ENDPOINTS:', 'error'); failed.forEach(r => { const customerInfo = r.customer !== 'Direct' ? ` (${r.customer})` : ''; this.log(` ${r.endpoint}${customerInfo} - ${r.error}`, 'warning'); }); } // Save reports this.saveReports(); } saveReports() { const timestamp = Date.now(); // Summary report const summary = { testRun: { timestamp: new Date().toISOString(), duration: Date.now() - this.startTime, totalTests: this.results.length, successfulTests: this.results.filter(r => r.success).length, successRate: ((this.results.filter(r => r.success).length/this.results.length)*100).toFixed(1) }, results: this.results }; const summaryPath = path.join(__dirname, `demo-test-summary-${timestamp}.json`); fs.writeFileSync(summaryPath, JSON.stringify(summary, null, 2)); this.log(`\nSummary Report: ${summaryPath}`, 'success'); // Detailed results const detailedPath = path.join(__dirname, `demo-test-results-${timestamp}.json`); fs.writeFileSync(detailedPath, JSON.stringify(this.results, null, 2)); this.log(`Detailed Results: ${detailedPath}`, 'success'); // CSV report const csvHeaders = [ 'Account', 'Customer', 'Endpoint', 'TestName', 'Category', 'Method', 'Success', 'StatusCode', 'HasData', 'Duration(ms)', 'ResponseSize(bytes)', 'Error' ]; const csvRows = this.results.map(r => [ r.account, r.customer, r.endpoint, r.testName, r.category, r.method, r.success, r.statusCode, r.hasData, r.duration, r.responseSize, r.error || '' ]); const csvContent = [csvHeaders.join(','), ...csvRows.map(row => row.map(cell => `"${cell}"`).join(',') )].join('\n'); const csvPath = path.join(__dirname, `demo-test-results-${timestamp}.csv`); fs.writeFileSync(csvPath, csvContent); this.log(`CSV Export: ${csvPath}`, 'success'); this.log('\n🎉 All endpoint testing completed!', 'title'); this.log('✨ This demo shows what you\'d get with real credentials!', 'info'); } } // Main execution async function main() { console.log('🧪 DEMO: Simple All-in-One Test Runner Results'); console.log('==============================================='); console.log('This shows what the real script produces with working credentials\n'); const demo = new DemoTestRunner(); await demo.simulateRun(); } if (require.main === module) { main().catch(error => { console.error('❌ Demo failed:', error); process.exit(1); }); } module.exports = { DemoTestRunner };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/daviddraiumbrella/invoice-monitoring'

If you have feedback or need assistance with the MCP directory API, please join our Discord server