File size: 3,070 Bytes
69b897d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
// 测试定价服务的fallback机制
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')
// 1. 备份现有文件
if (fs.existsSync(pricingFile)) {
console.log('📦 Backing up existing pricing file...')
fs.copyFileSync(pricingFile, backupFile)
}
try {
// 2. 删除现有定价文件以触发fallback
if (fs.existsSync(pricingFile)) {
console.log('🗑️ Removing existing pricing file to test fallback...')
fs.unlinkSync(pricingFile)
}
// 3. 初始化定价服务
console.log('🚀 Initializing pricing service...\n')
// 清除require缓存以确保重新加载
delete require.cache[require.resolve('../src/services/pricingService')]
const pricingService = require('../src/services/pricingService')
// 模拟网络失败,强制使用fallback
const originalDownload = pricingService._downloadFromRemote
pricingService._downloadFromRemote = function () {
return Promise.reject(new Error('Simulated network failure for testing'))
}
// 初始化服务
await pricingService.initialize()
// 4. 验证fallback是否工作
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}`)
// 5. 测试获取模型定价
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`)
}
}
// 6. 验证文件是否被创建
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 {
// 7. 恢复备份文件
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)
})
|