Files
chat/tests/test_websocket_direct.py
Andrey K. Choi 3050e084fa
All checks were successful
continuous-integration/drone/push Build is passing
main functions commit
2025-10-19 19:50:00 +09:00

160 lines
6.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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())