#!/usr/bin/env python3 """ Простое тестирование WebSocket подключений без авторизации """ import asyncio import json import websockets from datetime import datetime BASE_URL = "192.168.219.108" EMERGENCY_PORT = "8002" async def test_websocket_direct(): """Прямое тестирование WebSocket подключения""" print("🔌 Тестирование WebSocket подключения напрямую...") # Используем тестовый JWT токен из наших предыдущих тестов test_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJlbWFpbCI6InNoYWRvdzg1QGxpc3QucnUiLCJleHAiOjE3NjEzMTczMzl9.W6_k8VbYA73kKL7sUGFJKwl7Oez3ErGjjR5F29O-NZw" ws_url = f"ws://{BASE_URL}:{EMERGENCY_PORT}/api/v1/emergency/ws/current_user_id?token={test_token}" try: print(f"🌐 Подключение к: {ws_url}") async with websockets.connect(ws_url) as websocket: print("✅ WebSocket подключен!") # Ждем приветственное сообщение try: message = await asyncio.wait_for(websocket.recv(), timeout=5.0) print(f"📨 Получено сообщение: {message}") # Парсим JSON try: data = json.loads(message) print(f"📋 Данные сообщения:") for key, value in data.items(): print(f" - {key}: {value}") except json.JSONDecodeError: print("⚠️ Сообщение не в формате JSON") except asyncio.TimeoutError: print("⏰ Тайм-аут ожидания сообщения") # Держим соединение открытым print("🔄 Держим соединение открытым 10 секунд...") # Слушаем дополнительные сообщения try: while True: message = await asyncio.wait_for(websocket.recv(), timeout=10.0) print(f"📨 Дополнительное сообщение: {message}") except asyncio.TimeoutError: print("✅ Соединение стабильно в течение 10 секунд") except websockets.exceptions.ConnectionClosed: print("❌ Соединение закрыто сервером") except websockets.exceptions.InvalidStatusCode as e: print(f"❌ Ошибка статус-кода: {e}") if e.status_code == 403: print("🔒 Проблема с авторизацией - токен может быть недействительным") elif e.status_code == 404: print("🔍 Endpoint не найден") except Exception as e: print(f"❌ Ошибка подключения: {e}") async def test_multiple_connections(): """Тест множественных подключений""" print("\n" + "="*60) print("🚀 ТЕСТИРОВАНИЕ МНОЖЕСТВЕННЫХ WEBSOCKET ПОДКЛЮЧЕНИЙ") print("="*60) # Список тестовых токенов (если у нас есть разные пользователи) tokens = [ "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJlbWFpbCI6InNoYWRvdzg1QGxpc3QucnUiLCJleHAiOjE3NjEzMTczMzl9.W6_k8VbYA73kKL7sUGFJKwl7Oez3ErGjjR5F29O-NZw" ] connections = [] # Создаем несколько подключений for i, token in enumerate(tokens): try: ws_url = f"ws://{BASE_URL}:{EMERGENCY_PORT}/api/v1/emergency/ws/current_user_id?token={token}" websocket = await websockets.connect(ws_url) connections.append((i+1, websocket)) print(f"✅ Подключение {i+1} успешно установлено") # Ждем приветственное сообщение try: message = await asyncio.wait_for(websocket.recv(), timeout=2.0) print(f" 📨 Сообщение: {message}") except asyncio.TimeoutError: print(" ⏰ Нет приветственного сообщения") except Exception as e: print(f"❌ Ошибка подключения {i+1}: {e}") print(f"\n📊 Установлено подключений: {len(connections)}") if connections: print("⏱️ Держим подключения открытыми 5 секунд...") await asyncio.sleep(5) # Закрываем подключения for conn_id, websocket in connections: try: await websocket.close() print(f"🔚 Подключение {conn_id} закрыто") except Exception as e: print(f"❌ Ошибка закрытия подключения {conn_id}: {e}") def check_websocket_manager_directly(): """Проверить WebSocketManager напрямую""" print("\n" + "="*60) print("🔍 ПРОВЕРКА WEBSOCKETMANAGER ЧЕРЕЗ HTTP") print("="*60) import requests # Пробуем получить статистику через простой HTTP-запрос к health endpoint try: health_response = requests.get(f"http://{BASE_URL}:{EMERGENCY_PORT}/health") if health_response.status_code == 200: print("✅ Emergency Service работает") print(f" Ответ: {health_response.json()}") else: print(f"❌ Emergency Service недоступен: {health_response.status_code}") except Exception as e: print(f"❌ Ошибка проверки health: {e}") async def main(): """Главная функция""" print("🚀 WebSocket Direct Test v1.0") print(f"🌐 Сервер: {BASE_URL}:{EMERGENCY_PORT}") print("=" * 60) # 1. Проверяем сервер check_websocket_manager_directly() # 2. Тестируем одно WebSocket подключение await test_websocket_direct() # 3. Тестируем множественные подключения await test_multiple_connections() print("\n" + "="*60) print("✅ ТЕСТИРОВАНИЕ ЗАВЕРШЕНО") print("="*60) if __name__ == "__main__": asyncio.run(main())