This commit is contained in:
160
tests/test_websocket_direct.py
Normal file
160
tests/test_websocket_direct.py
Normal file
@@ -0,0 +1,160 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user