63 lines
2.4 KiB
Python
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)"
|
|
)
|