Files
aiturk-hermes-ide/tests/gateway/test_telegram_connect_success_visibility.py

63 lines
2.4 KiB
Python

"""Regression test for #90835 (logging-illusion half).
The Telegram adapter's "Connecting to Telegram (attempt N/8)…" line is
emitted at WARNING and therefore reaches the gateway's default stderr
handler (WARNING-only at default verbosity). The matching
"Connected to Telegram (… mode)" success line was INFO and went to the log
file only, so a healthy startup looked permanently stalled at "attempt 1/8"
on the terminal.
This test pins the invariant that both sides of the connect transition are
emitted at the same terminal-visible level, by inspecting the log calls in
the adapter source (the connect path needs a live bot token to execute, so
the levels are asserted at the AST level rather than by running it).
"""
import ast
from pathlib import Path
ADAPTER = (
Path(__file__).resolve().parents[2]
/ "plugins"
/ "platforms"
/ "telegram"
/ "adapter.py"
)
def _logger_call_level(tree: ast.AST, needle: str) -> str:
"""Return the logger method name for the log call whose format string
contains *needle*."""
for node in ast.walk(tree):
if (
isinstance(node, ast.Call)
and isinstance(node.func, ast.Attribute)
and isinstance(node.func.value, ast.Name)
and node.func.value.id == "logger"
and node.args
):
first = node.args[0]
if (
isinstance(first, ast.Constant)
and isinstance(first.value, str)
and needle in first.value
):
return node.func.attr
raise AssertionError(f"no logger call containing {needle!r} found")
def test_connect_success_line_matches_attempt_line_visibility():
tree = ast.parse(ADAPTER.read_text(encoding="utf-8"))
attempt_level = _logger_call_level(tree, "Connecting to Telegram (attempt")
success_level = _logger_call_level(tree, "Connected to Telegram")
# The attempt line is terminal-visible (WARNING at default verbosity).
assert attempt_level == "warning"
# The success line must reach the same console sink — otherwise a healthy
# connect is indistinguishable from a hang at "attempt 1/8" (#90835).
assert success_level == attempt_level, (
"Telegram connect success line logs at a different level "
f"({success_level!r}) than the attempt line ({attempt_level!r}); "
"a healthy startup will look hung on the terminal (#90835)"
)