Improve lingering timer checks (#99472)

This commit is contained in:
J. Nick Koston 2023-09-02 12:43:27 -05:00 committed by GitHub
parent 1048f47a91
commit 1ab2e900f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 8 deletions

View file

@ -294,6 +294,10 @@ class HomeAssistant:
_hass.hass = hass
return hass
def __repr__(self) -> str:
"""Return the representation."""
return f"<HomeAssistant {self.state}>"
def __init__(self, config_dir: str) -> None:
"""Initialize new Home Assistant object."""
self.loop = asyncio.get_running_loop()

View file

@ -3,12 +3,13 @@ from __future__ import annotations
import asyncio
from collections.abc import AsyncGenerator, Callable, Coroutine, Generator
from contextlib import asynccontextmanager
from contextlib import asynccontextmanager, contextmanager
import functools
import gc
import itertools
import logging
import os
import reprlib
import sqlite3
import ssl
import threading
@ -302,6 +303,21 @@ def skip_stop_scripts(
yield
@contextmanager
def long_repr_strings() -> Generator[None, None, None]:
"""Increase reprlib maxstring and maxother to 300."""
arepr = reprlib.aRepr
original_maxstring = arepr.maxstring
original_maxother = arepr.maxother
arepr.maxstring = 300
arepr.maxother = 300
try:
yield
finally:
arepr.maxstring = original_maxstring
arepr.maxother = original_maxother
@pytest.fixture(autouse=True)
def verify_cleanup(
event_loop: asyncio.AbstractEventLoop,
@ -335,9 +351,12 @@ def verify_cleanup(
for handle in event_loop._scheduled: # type: ignore[attr-defined]
if not handle.cancelled():
with long_repr_strings():
if expected_lingering_timers:
_LOGGER.warning("Lingering timer after test %r", handle)
elif handle._args and isinstance(job := handle._args[0], HassJob):
elif handle._args and isinstance(job := handle._args[-1], HassJob):
if job.cancel_on_shutdown:
continue
pytest.fail(f"Lingering timer after job {repr(job)}")
else:
pytest.fail(f"Lingering timer after test {repr(handle)}")