46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
|
|
"""Кольцевой буфер логов и SSE-страница."""
|
||
|
|
|
||
|
|
import logging
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
from fastapi.testclient import TestClient
|
||
|
|
|
||
|
|
from onguard24 import log_buffer
|
||
|
|
|
||
|
|
|
||
|
|
def test_ring_buffer_captures_log_records() -> None:
|
||
|
|
log_buffer._ring.clear()
|
||
|
|
handler = log_buffer.RingBufferHandler()
|
||
|
|
handler.setFormatter(logging.Formatter("%(name)s %(message)s"))
|
||
|
|
logger = logging.getLogger("test.ring")
|
||
|
|
logger.addHandler(handler)
|
||
|
|
logger.setLevel(logging.DEBUG)
|
||
|
|
try:
|
||
|
|
logger.info("hello ring")
|
||
|
|
history = log_buffer.get_history()
|
||
|
|
assert any("hello ring" in e["msg"] for e in history)
|
||
|
|
finally:
|
||
|
|
logger.removeHandler(handler)
|
||
|
|
log_buffer._ring.clear()
|
||
|
|
|
||
|
|
|
||
|
|
def test_logs_page_returns_html(client: TestClient) -> None:
|
||
|
|
r = client.get("/ui/logs")
|
||
|
|
assert r.status_code == 200
|
||
|
|
assert "text/html" in r.headers.get("content-type", "")
|
||
|
|
assert "Логи" in r.text
|
||
|
|
assert "log-wrap" in r.text
|
||
|
|
assert "EventSource" in r.text or "event-stream" in r.text or "ui/logs/stream" in r.text
|
||
|
|
|
||
|
|
|
||
|
|
def test_logs_page_in_nav_rail(client: TestClient) -> None:
|
||
|
|
r = client.get("/ui/logs")
|
||
|
|
assert r.status_code == 200
|
||
|
|
assert "/ui/logs" in r.text
|
||
|
|
|
||
|
|
|
||
|
|
def test_root_has_logs_link(client: TestClient) -> None:
|
||
|
|
r = client.get("/")
|
||
|
|
assert r.status_code == 200
|
||
|
|
assert "/ui/logs" in r.text
|