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)
})