Files
claude-relay-service/scripts/test-pricing-fallback.js

92 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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);
});