"""Smoke стенда: бэк, логин, фронт, прокси /api и прокси WebSocket.""" import asyncio import json import os import sys import httpx import websockets API = os.environ.get("PERF_API", "http://localhost:8000") WEB = os.environ.get("PERF_WEB", "http://localhost:8080") def check(cond: bool, msg: str) -> None: if not cond: raise AssertionError(msg) async def ws_check(token: str) -> None: url = WEB.replace("http", "ws", 1) + "/api/v1/ws/export" async with websockets.connect(url, open_timeout=10) as ws: await ws.send(json.dumps({"token": token})) msg = json.loads(await asyncio.wait_for(ws.recv(), timeout=10)) check(msg.get("event") == "exports", f"ws: неожиданное сообщение {str(msg)[:200]}") def main() -> None: with httpx.Client(timeout=15) as c: r = c.get(f"{API}/healthz") check(r.status_code == 200, f"healthz: {r.status_code}") r = c.post(f"{API}/api/v1/auth/login", json={"username": "admin", "password": "admin"}) check(r.status_code == 200, f"login: {r.status_code} {r.text[:200]}") token = r.json().get("access_token") check(bool(token), "login: нет access_token") r = c.get(f"{WEB}/") check(r.status_code == 200 and "