#!/usr/bin/env python3 """ Test script for real-time COB functionality """ import asyncio import aiohttp import json import time from datetime import datetime async def test_realtime_cob(): """Test real-time COB data streaming""" # Test API endpoints base_url = "http://localhost:8053" async with aiohttp.ClientSession() as session: print("Testing COB Dashboard API endpoints...") # Test symbols endpoint try: async with session.get(f"{base_url}/api/symbols") as response: if response.status == 200: data = await response.json() print(f"✓ Symbols: {data}") else: print(f"✗ Symbols endpoint failed: {response.status}") except Exception as e: print(f"✗ Error testing symbols endpoint: {e}") # Test real-time stats for BTC/USDT try: async with session.get(f"{base_url}/api/realtime/BTC/USDT") as response: if response.status == 200: data = await response.json() print(f"✓ Real-time stats for BTC/USDT:") print(f" Current mid price: {data.get('current', {}).get('mid_price', 'N/A')}") print(f" 1s window updates: {data.get('1s_window', {}).get('update_count', 'N/A')}") print(f" 5s window updates: {data.get('5s_window', {}).get('update_count', 'N/A')}") else: print(f"✗ Real-time stats endpoint failed: {response.status}") error_data = await response.text() print(f" Error: {error_data}") except Exception as e: print(f"✗ Error testing real-time stats endpoint: {e}") # Test WebSocket connection print("\nTesting WebSocket connection...") try: async with session.ws_connect(f"{base_url.replace('http', 'ws')}/ws") as ws: print("✓ WebSocket connected") # Wait for some data message_count = 0 start_time = time.time() async for msg in ws: if msg.type == aiohttp.WSMsgType.TEXT: data = json.loads(msg.data) message_count += 1 if data.get('type') == 'cob_update': symbol = data.get('data', {}).get('stats', {}).get('symbol', 'Unknown') mid_price = data.get('data', {}).get('stats', {}).get('mid_price', 0) print(f"✓ Received COB update for {symbol}: ${mid_price:.2f}") # Check for real-time stats if 'realtime_1s' in data.get('data', {}).get('stats', {}): print(f" ✓ Real-time 1s stats available") if 'realtime_5s' in data.get('data', {}).get('stats', {}): print(f" ✓ Real-time 5s stats available") # Stop after 5 messages or 10 seconds if message_count >= 5 or (time.time() - start_time) > 10: break elif msg.type == aiohttp.WSMsgType.ERROR: print(f"✗ WebSocket error: {ws.exception()}") break print(f"✓ Received {message_count} WebSocket messages") except Exception as e: print(f"✗ WebSocket connection failed: {e}") if __name__ == "__main__": print("Testing Real-time COB Dashboard") print("=" * 40) asyncio.run(test_realtime_cob()) print("\nTest completed!")