|
|
#!/usr/bin/env node |
|
|
|
|
|
const fs = require('fs') |
|
|
const path = require('path') |
|
|
|
|
|
|
|
|
async function testPricingFallback() { |
|
|
console.log('🧪 Testing pricing service fallback mechanism...\n') |
|
|
|
|
|
|
|
|
const dataDir = path.join(process.cwd(), 'data') |
|
|
const pricingFile = path.join(dataDir, 'model_pricing.json') |
|
|
const backupFile = path.join(dataDir, 'model_pricing.backup.json') |
|
|
|
|
|
|
|
|
if (fs.existsSync(pricingFile)) { |
|
|
console.log('📦 Backing up existing pricing file...') |
|
|
fs.copyFileSync(pricingFile, backupFile) |
|
|
} |
|
|
|
|
|
try { |
|
|
|
|
|
if (fs.existsSync(pricingFile)) { |
|
|
console.log('🗑️ Removing existing pricing file to test fallback...') |
|
|
fs.unlinkSync(pricingFile) |
|
|
} |
|
|
|
|
|
|
|
|
console.log('🚀 Initializing pricing service...\n') |
|
|
|
|
|
|
|
|
delete require.cache[require.resolve('../src/services/pricingService')] |
|
|
const pricingService = require('../src/services/pricingService') |
|
|
|
|
|
|
|
|
const originalDownload = pricingService._downloadFromRemote |
|
|
pricingService._downloadFromRemote = function () { |
|
|
return Promise.reject(new Error('Simulated network failure for testing')) |
|
|
} |
|
|
|
|
|
|
|
|
await pricingService.initialize() |
|
|
|
|
|
|
|
|
console.log('\n📊 Verifying fallback data...') |
|
|
const status = pricingService.getStatus() |
|
|
console.log(` - Initialized: ${status.initialized}`) |
|
|
console.log(` - Model count: ${status.modelCount}`) |
|
|
console.log(` - Last updated: ${status.lastUpdated}`) |
|
|
|
|
|
|
|
|
const testModels = ['claude-3-opus-20240229', 'gpt-4', 'gemini-pro'] |
|
|
console.log('\n💰 Testing model pricing retrieval:') |
|
|
|
|
|
for (const model of testModels) { |
|
|
const pricing = pricingService.getModelPricing(model) |
|
|
if (pricing) { |
|
|
console.log(` ✅ ${model}: Found pricing data`) |
|
|
} else { |
|
|
console.log(` ❌ ${model}: No pricing data`) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (fs.existsSync(pricingFile)) { |
|
|
console.log('\n✅ Fallback successfully created pricing file in data directory') |
|
|
const fileStats = fs.statSync(pricingFile) |
|
|
console.log(` - File size: ${(fileStats.size / 1024).toFixed(2)} KB`) |
|
|
} else { |
|
|
console.log('\n❌ Fallback failed to create pricing file') |
|
|
} |
|
|
|
|
|
|
|
|
pricingService._downloadFromRemote = originalDownload |
|
|
} finally { |
|
|
|
|
|
if (fs.existsSync(backupFile)) { |
|
|
console.log('\n📦 Restoring original pricing file...') |
|
|
fs.copyFileSync(backupFile, pricingFile) |
|
|
fs.unlinkSync(backupFile) |
|
|
} |
|
|
} |
|
|
|
|
|
console.log('\n✨ Fallback mechanism test completed!') |
|
|
} |
|
|
|
|
|
|
|
|
testPricingFallback().catch((error) => { |
|
|
console.error('❌ Test failed:', error) |
|
|
process.exit(1) |
|
|
}) |
|
|
|