mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Add contextmanager to reset logger after set_level call in tests (#143295)
This commit is contained in:
parent
961f8afe53
commit
5843e63878
@ -46,6 +46,7 @@ from homeassistant.components import device_automation, persistent_notification
|
||||
from homeassistant.components.device_automation import ( # noqa: F401
|
||||
_async_get_device_automation_capabilities as async_get_device_automation_capabilities,
|
||||
)
|
||||
from homeassistant.components.logger import DOMAIN as LOGGER_DOMAIN, SERVICE_SET_LEVEL
|
||||
from homeassistant.config import IntegrationConfigInfo, async_process_component_config
|
||||
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
|
||||
from homeassistant.const import (
|
||||
@ -1688,6 +1689,28 @@ def async_mock_cloud_connection_status(hass: HomeAssistant, connected: bool) ->
|
||||
async_dispatcher_send(hass, SIGNAL_CLOUD_CONNECTION_STATE, state)
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def async_call_logger_set_level(
|
||||
logger: str,
|
||||
level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "FATAL", "CRITICAL"],
|
||||
*,
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
) -> AsyncGenerator[None]:
|
||||
"""Context manager to reset loggers after logger.set_level call."""
|
||||
assert LOGGER_DOMAIN in hass.data, "'logger' integration not setup"
|
||||
with caplog.at_level(logging.NOTSET, logger):
|
||||
await hass.services.async_call(
|
||||
LOGGER_DOMAIN,
|
||||
SERVICE_SET_LEVEL,
|
||||
{logger: level},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
yield
|
||||
hass.data[LOGGER_DOMAIN].overrides.clear()
|
||||
|
||||
|
||||
def import_and_test_deprecated_constant_enum(
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
module: ModuleType,
|
||||
|
@ -61,6 +61,7 @@ from . import (
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
MockModule,
|
||||
async_call_logger_set_level,
|
||||
async_fire_time_changed,
|
||||
load_fixture,
|
||||
mock_integration,
|
||||
@ -1144,14 +1145,9 @@ async def test_debug_logging(
|
||||
) -> None:
|
||||
"""Test debug logging."""
|
||||
assert await async_setup_component(hass, "logger", {"logger": {}})
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.bluetooth": "DEBUG"},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.bluetooth", "DEBUG", hass=hass, caplog=caplog
|
||||
):
|
||||
address = "44:44:33:11:23:41"
|
||||
start_time_monotonic = 50.0
|
||||
|
||||
@ -1171,13 +1167,9 @@ async def test_debug_logging(
|
||||
assert "wohand_poor_signal_hci0" in caplog.text
|
||||
caplog.clear()
|
||||
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.bluetooth": "WARNING"},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.bluetooth", "WARNING", hass=hass, caplog=caplog
|
||||
):
|
||||
switchbot_device_good_signal_hci0 = generate_ble_device(
|
||||
address, "wohand_good_signal_hci0"
|
||||
)
|
||||
|
@ -29,7 +29,11 @@ from . import (
|
||||
patch_bluetooth_time,
|
||||
)
|
||||
|
||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
async_call_logger_set_level,
|
||||
async_fire_time_changed,
|
||||
)
|
||||
|
||||
# If the adapter is in a stuck state the following errors are raised:
|
||||
NEED_RESET_ERRORS = [
|
||||
@ -482,12 +486,9 @@ async def test_adapter_fails_to_start_and_takes_a_bit_to_init(
|
||||
) -> None:
|
||||
"""Test we can recover the adapter at startup and we wait for Dbus to init."""
|
||||
assert await async_setup_component(hass, "logger", {})
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.bluetooth": "DEBUG"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.bluetooth", "DEBUG", hass=hass, caplog=caplog
|
||||
):
|
||||
called_start = 0
|
||||
called_stop = 0
|
||||
_callback = None
|
||||
|
@ -49,7 +49,12 @@ from homeassistant.setup import async_setup_component
|
||||
|
||||
from .conftest import MockESPHomeDevice
|
||||
|
||||
from tests.common import MockConfigEntry, async_capture_events, async_mock_service
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
async_call_logger_set_level,
|
||||
async_capture_events,
|
||||
async_mock_service,
|
||||
)
|
||||
|
||||
|
||||
async def test_esphome_device_subscribe_logs(
|
||||
@ -83,12 +88,9 @@ async def test_esphome_device_subscribe_logs(
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.esphome": "DEBUG"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.esphome", "DEBUG", hass=hass, caplog=caplog
|
||||
):
|
||||
assert device.current_log_level == LogLevel.LOG_LEVEL_VERY_VERBOSE
|
||||
|
||||
caplog.set_level(logging.DEBUG)
|
||||
@ -118,26 +120,17 @@ async def test_esphome_device_subscribe_logs(
|
||||
await hass.async_block_till_done()
|
||||
assert "test_debug_log_message" in caplog.text
|
||||
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.esphome": "WARNING"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.esphome", "WARNING", hass=hass, caplog=caplog
|
||||
):
|
||||
assert device.current_log_level == LogLevel.LOG_LEVEL_WARN
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.esphome": "ERROR"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.esphome", "ERROR", hass=hass, caplog=caplog
|
||||
):
|
||||
assert device.current_log_level == LogLevel.LOG_LEVEL_ERROR
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.esphome": "INFO"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.esphome", "INFO", hass=hass, caplog=caplog
|
||||
):
|
||||
assert device.current_log_level == LogLevel.LOG_LEVEL_CONFIG
|
||||
|
||||
|
||||
@ -961,7 +954,6 @@ async def test_debug_logging(
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
) -> None:
|
||||
"""Test enabling and disabling debug logging."""
|
||||
with caplog.at_level(logging.NOTSET, "homeassistant.components.esphome"):
|
||||
assert await async_setup_component(hass, "logger", {"logger": {}})
|
||||
await mock_generic_device_entry(
|
||||
mock_client=mock_client,
|
||||
@ -969,23 +961,15 @@ async def test_debug_logging(
|
||||
user_service=[],
|
||||
states=[],
|
||||
)
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.esphome": "DEBUG"},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.esphome", "DEBUG", hass=hass, caplog=caplog
|
||||
):
|
||||
mock_client.set_debug.assert_has_calls([call(True)])
|
||||
|
||||
mock_client.reset_mock()
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.esphome": "WARNING"},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.esphome", "WARNING", hass=hass, caplog=caplog
|
||||
):
|
||||
mock_client.set_debug.assert_has_calls([call(False)])
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@ from homeassistant.setup import async_setup_component
|
||||
from homeassistant.util import dt as dt_util
|
||||
from homeassistant.util.ssl import server_context_intermediate, server_context_modern
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
from tests.common import async_call_logger_set_level, async_fire_time_changed
|
||||
from tests.typing import ClientSessionGenerator
|
||||
|
||||
|
||||
@ -505,24 +505,18 @@ async def test_logging(
|
||||
)
|
||||
)
|
||||
hass.states.async_set("logging.entity", "hello")
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"aiohttp.access": "info"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"aiohttp.access", "INFO", hass=hass, caplog=caplog
|
||||
):
|
||||
client = await hass_client()
|
||||
response = await client.get("/api/states/logging.entity")
|
||||
assert response.status == HTTPStatus.OK
|
||||
|
||||
assert "GET /api/states/logging.entity" in caplog.text
|
||||
caplog.clear()
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"aiohttp.access": "warning"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"aiohttp.access", "WARNING", hass=hass, caplog=caplog
|
||||
):
|
||||
response = await client.get("/api/states/logging.entity")
|
||||
assert response.status == HTTPStatus.OK
|
||||
assert "GET /api/states/logging.entity" not in caplog.text
|
||||
|
@ -15,7 +15,7 @@ from homeassistant.core import HomeAssistant
|
||||
from homeassistant.setup import async_setup_component
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
from tests.common import async_call_logger_set_level, async_fire_time_changed
|
||||
|
||||
HASS_NS = "unused.homeassistant"
|
||||
COMPONENTS_NS = f"{HASS_NS}.components"
|
||||
@ -73,12 +73,9 @@ async def test_log_filtering(
|
||||
msg_test(filter_logger, True, "format string shouldfilter%s", "not")
|
||||
|
||||
# Filtering should work even if log level is modified
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"test.filter": "warning"},
|
||||
blocking=True,
|
||||
)
|
||||
async with async_call_logger_set_level(
|
||||
"test.filter", "WARNING", hass=hass, caplog=caplog
|
||||
):
|
||||
assert filter_logger.getEffectiveLevel() == logging.WARNING
|
||||
msg_test(
|
||||
filter_logger,
|
||||
@ -88,7 +85,9 @@ async def test_log_filtering(
|
||||
|
||||
# Filtering should be scoped to a service
|
||||
msg_test(
|
||||
filter_logger, True, "this line containing otherfilterer should not be filtered"
|
||||
filter_logger,
|
||||
True,
|
||||
"this line containing otherfilterer should not be filtered",
|
||||
)
|
||||
msg_test(
|
||||
logging.getLogger("test.other_filter"),
|
||||
|
@ -19,7 +19,7 @@ from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.setup import async_setup_component
|
||||
from homeassistant.util.dt import utcnow
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
from tests.common import async_call_logger_set_level, async_fire_time_changed
|
||||
from tests.typing import MockHAClientWebSocket, WebSocketGenerator
|
||||
|
||||
|
||||
@ -533,25 +533,17 @@ async def test_enable_disable_debug_logging(
|
||||
) -> None:
|
||||
"""Test enabling and disabling debug logging."""
|
||||
assert await async_setup_component(hass, "logger", {"logger": {}})
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.websocket_api": "DEBUG"},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.websocket_api", "DEBUG", hass=hass, caplog=caplog
|
||||
):
|
||||
await websocket_client.send_json({"id": 1, "type": "ping"})
|
||||
msg = await websocket_client.receive_json()
|
||||
assert msg["id"] == 1
|
||||
assert msg["type"] == "pong"
|
||||
assert 'Sending b\'{"id":1,"type":"pong"}\'' in caplog.text
|
||||
await hass.services.async_call(
|
||||
"logger",
|
||||
"set_level",
|
||||
{"homeassistant.components.websocket_api": "WARNING"},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
async with async_call_logger_set_level(
|
||||
"homeassistant.components.websocket_api", "WARNING", hass=hass, caplog=caplog
|
||||
):
|
||||
await websocket_client.send_json({"id": 2, "type": "ping"})
|
||||
msg = await websocket_client.receive_json()
|
||||
assert msg["id"] == 2
|
||||
|
@ -23,7 +23,6 @@ from zwave_js_server.model.node import Node, NodeDataType
|
||||
from zwave_js_server.model.version import VersionInfo
|
||||
|
||||
from homeassistant.components.hassio import HassioAPIError
|
||||
from homeassistant.components.logger import DOMAIN as LOGGER_DOMAIN, SERVICE_SET_LEVEL
|
||||
from homeassistant.components.persistent_notification import async_dismiss
|
||||
from homeassistant.components.zwave_js import DOMAIN
|
||||
from homeassistant.components.zwave_js.helpers import get_device_id, get_device_id_ext
|
||||
@ -42,6 +41,7 @@ from .common import AIR_TEMPERATURE_SENSOR, EATON_RF9640_ENTITY
|
||||
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
async_call_logger_set_level,
|
||||
async_fire_time_changed,
|
||||
async_get_persistent_notifications,
|
||||
)
|
||||
@ -2018,7 +2018,9 @@ async def test_identify_event(
|
||||
assert "network with the home ID `3245146787`" in notifications[msg_id]["message"]
|
||||
|
||||
|
||||
async def test_server_logging(hass: HomeAssistant, client: MagicMock) -> None:
|
||||
async def test_server_logging(
|
||||
hass: HomeAssistant, client: MagicMock, caplog: pytest.LogCaptureFixture
|
||||
) -> None:
|
||||
"""Test automatic server logging functionality."""
|
||||
|
||||
def _reset_mocks():
|
||||
@ -2037,12 +2039,11 @@ async def test_server_logging(hass: HomeAssistant, client: MagicMock) -> None:
|
||||
|
||||
# Setup logger and set log level to debug to trigger event listener
|
||||
assert await async_setup_component(hass, "logger", {"logger": {}})
|
||||
assert logging.getLogger("zwave_js_server").getEffectiveLevel() == logging.INFO
|
||||
assert logging.getLogger("zwave_js_server").getEffectiveLevel() == logging.DEBUG
|
||||
client.async_send_command.reset_mock()
|
||||
await hass.services.async_call(
|
||||
LOGGER_DOMAIN, SERVICE_SET_LEVEL, {"zwave_js_server": "debug"}, blocking=True
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
async with async_call_logger_set_level(
|
||||
"zwave_js_server", "DEBUG", hass=hass, caplog=caplog
|
||||
):
|
||||
assert logging.getLogger("zwave_js_server").getEffectiveLevel() == logging.DEBUG
|
||||
|
||||
# Validate that the server logging was enabled
|
||||
|
Loading…
x
Reference in New Issue
Block a user