mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
Merge branch 'main' of https://github.com/Wei-Shaw/claude-relay-service
This commit is contained in:
92
scripts/test-pricing-fallback.js
Normal file
92
scripts/test-pricing-fallback.js
Normal file
@@ -0,0 +1,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);
|
||||
});
|
||||
Reference in New Issue
Block a user