| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js'
- import { logger } from './src/utils/logger.js'
- /**
- * 测试带代理的WebSocket交易功能
- * 集成到主程序的测试
- */
- async function testWebSocketWithProxy() {
- console.log('🚀 开始带代理的WebSocket交易测试...\n')
- // 启用WebSocket模式
- const client = new PacificaProxyClient({
- account: process.env.PACIFICA_ACCOUNT_1,
- privateKey: process.env.PACIFICA_PRIVATE_KEY_1,
- })
- try {
- console.log('🔧 配置WebSocket模式...')
- client.setWebSocketEnabled(true)
- console.log('📡 初始化WebSocket连接...')
- await client.initializeWebSocket()
- console.log('✅ WebSocket初始化成功!')
- console.log(` 连接状态: ${client.isWebSocketConnected()}`)
- console.log(` 队列长度: ${client.getWebSocketQueueLength()}`)
- // 测试连接和代理状态
- console.log('\n🔗 测试连接...')
- const connectionTest = await client.testConnection()
- console.log('连接测试结果:', {
- success: connectionTest.success,
- latency: `${connectionTest.latency}ms`,
- proxy: connectionTest.proxyUsed ? '启用' : '禁用',
- })
- // 测试获取交易对(混合模式)
- console.log('\n📊 测试获取交易对(WebSocket + HTTP回退)...')
- const startTime = Date.now()
- try {
- const symbols = await client.getSymbols()
- const duration = Date.now() - startTime
- console.log(`✅ 获取交易对成功: ${duration}ms`)
- console.log(` 数据类型: ${typeof symbols}`)
- if (symbols && symbols.data) {
- console.log(` 交易对数量: ${Array.isArray(symbols.data) ? symbols.data.length : 'N/A'}`)
- }
- } catch (error: any) {
- console.log(`❌ 获取交易对失败: ${error.message}`)
- }
- // 测试获取价格数据
- console.log('\n💰 测试获取价格数据...')
- try {
- const startTime = Date.now()
- const prices = await client.getPrices()
- const duration = Date.now() - startTime
- console.log(`✅ 获取价格成功: ${duration}ms`)
- if (prices && prices.data) {
- console.log(` 价格数据长度: ${Array.isArray(prices.data) ? prices.data.length : 'N/A'}`)
- }
- } catch (error: any) {
- console.log(`❌ 获取价格失败: ${error.message}`)
- }
- // 测试订单簿获取
- console.log('\n📚 测试获取订单簿...')
- try {
- const startTime = Date.now()
- const orderbook = await client.getOrderBook('BTC-USD')
- const duration = Date.now() - startTime
- console.log(`✅ 获取订单簿成功: ${duration}ms`)
- if (orderbook && orderbook.bids) {
- console.log(` 买单数量: ${orderbook.bids.length}`)
- console.log(` 卖单数量: ${orderbook.asks.length}`)
- console.log(` 中间价: $${orderbook.midPrice?.toFixed(2) || 'N/A'}`)
- }
- } catch (error: any) {
- console.log(`❌ 获取订单簿失败: ${error.message}`)
- }
- // 模拟WebSocket交易测试(不执行真实交易)
- console.log('\n🎯 模拟WebSocket交易测试...')
- console.log('注意:这是模拟测试,不会执行真实交易')
- const mockOrderParams = {
- symbol: 'BTC',
- side: 'buy' as const,
- amount: '0.001',
- account: process.env.PACIFICA_ACCOUNT_1 || '',
- signature: 'mock_signature_for_testing', // 模拟签名
- }
- console.log(' 模拟市价单参数:')
- console.log(` 符号: ${mockOrderParams.symbol}`)
- console.log(` 方向: ${mockOrderParams.side}`)
- console.log(` 数量: ${mockOrderParams.amount}`)
- console.log(` 账户: ${mockOrderParams.account.substring(0, 8)}...`)
- console.log(' ✅ 参数验证通过(模拟)')
- // 性能统计
- console.log('\n📈 性能统计:')
- console.log(` WebSocket连接状态: ${client.isWebSocketConnected() ? '✅ 已连接' : '❌ 未连接'}`)
- console.log(` 消息队列长度: ${client.getWebSocketQueueLength()}`)
- console.log(` 代理状态: ${connectionTest.proxyUsed ? '✅ 已启用' : '❌ 禁用'}`)
- } catch (error: any) {
- console.error('❌ 测试过程中发生错误:', error.message)
- console.error('错误详情:', error)
- } finally {
- // 清理资源
- try {
- await client.close()
- console.log('\n🧹 资源清理完成')
- } catch (error: any) {
- console.log('⚠️ 资源清理时发生错误:', error.message)
- }
- }
- console.log('\n✅ 带代理的WebSocket测试完成!')
- }
- // 代理状态测试
- async function testProxyStatus() {
- console.log('\n🔍 代理状态检查:')
- const proxyConfig = {
- enabled: process.env.PROXY_ENABLED === 'true',
- host: process.env.PROXY_HOST,
- port: process.env.PROXY_PORT,
- user: process.env.ASTER_PROXY_USER,
- hasSessionPrefix: !!process.env.ASTER_PROXY_SESSION_PREFIX,
- hasSessionSuffix: !!process.env.ASTER_PROXY_SESSION_SUFFIX,
- }
- console.log(' 配置状态:')
- console.log(` 代理启用: ${proxyConfig.enabled ? '✅' : '❌'}`)
- console.log(` 代理主机: ${proxyConfig.host || '未配置'}`)
- console.log(` 代理端口: ${proxyConfig.port || '未配置'}`)
- console.log(` 代理用户: ${proxyConfig.user ? proxyConfig.user.substring(0, 4) + '***' : '未配置'}`)
- console.log(` 会话前缀: ${proxyConfig.hasSessionPrefix ? '✅' : '❌'}`)
- console.log(` 会话后缀: ${proxyConfig.hasSessionSuffix ? '✅' : '❌'}`)
- if (proxyConfig.enabled && proxyConfig.host && proxyConfig.user) {
- console.log(' ✅ 代理配置完整,支持WebSocket')
- } else {
- console.log(' ⚠️ 代理配置不完整,WebSocket可能直连')
- }
- }
- // 运行测试
- if (import.meta.url === `file://${process.argv[1]}`) {
- Promise.resolve()
- .then(() => testProxyStatus())
- .then(() => testWebSocketWithProxy())
- .catch(error => {
- console.error('🚨 测试失败:', error)
- process.exit(1)
- })
- }
- export { testWebSocketWithProxy }
|