2016-03-09 09:25:50 +00:00
|
|
|
"""The tests for the Logger component."""
|
2016-01-30 18:23:35 +00:00
|
|
|
from collections import namedtuple
|
2016-01-30 18:03:46 +00:00
|
|
|
import logging
|
|
|
|
|
|
|
|
from homeassistant.components import logger
|
2020-05-23 16:12:55 +00:00
|
|
|
from homeassistant.setup import async_setup_component
|
2016-10-27 07:16:23 +00:00
|
|
|
|
2019-07-31 19:25:30 +00:00
|
|
|
RECORD = namedtuple("record", ("name", "levelno"))
|
2016-01-30 18:23:35 +00:00
|
|
|
|
2019-07-31 19:25:30 +00:00
|
|
|
NO_DEFAULT_CONFIG = {"logger": {}}
|
|
|
|
NO_LOGS_CONFIG = {"logger": {"default": "info"}}
|
2020-05-23 16:12:55 +00:00
|
|
|
TEST_CONFIG = {
|
|
|
|
"logger": {
|
|
|
|
"default": "warning",
|
|
|
|
"logs": {"test": "info", "test.child": "debug", "test.child.child": "warning"},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async def async_setup_logger(hass, config):
|
|
|
|
"""Set up logger and save log filter."""
|
|
|
|
await async_setup_component(hass, logger.DOMAIN, config)
|
|
|
|
return logging.root.handlers[-1].filters[0]
|
|
|
|
|
|
|
|
|
|
|
|
async def test_logger_setup(hass):
|
|
|
|
"""Use logger to create a logging filter."""
|
|
|
|
await async_setup_logger(hass, TEST_CONFIG)
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert len(logging.root.handlers) > 0
|
|
|
|
handler = logging.root.handlers[-1]
|
2016-01-30 18:03:46 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert len(handler.filters) == 1
|
2016-01-30 18:03:46 +00:00
|
|
|
|
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
async def test_logger_test_filters(hass):
|
|
|
|
"""Test resulting filter operation."""
|
|
|
|
log_filter = await async_setup_logger(hass, TEST_CONFIG)
|
2016-01-30 18:23:35 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Blocked default record
|
|
|
|
assert not log_filter.filter(RECORD("asdf", logging.DEBUG))
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Allowed default record
|
|
|
|
assert log_filter.filter(RECORD("asdf", logging.WARNING))
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Blocked named record
|
|
|
|
assert not log_filter.filter(RECORD("test", logging.DEBUG))
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Allowed named record
|
|
|
|
assert log_filter.filter(RECORD("test", logging.INFO))
|
2016-01-30 18:03:46 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Allowed named record child
|
|
|
|
assert log_filter.filter(RECORD("test.child", logging.INFO))
|
2016-01-30 18:03:46 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Allowed named record child
|
|
|
|
assert log_filter.filter(RECORD("test.child", logging.DEBUG))
|
2016-01-30 18:03:46 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Blocked named record child of child
|
|
|
|
assert not log_filter.filter(RECORD("test.child.child", logging.DEBUG))
|
2016-01-30 18:23:35 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
# Allowed named record child of child
|
|
|
|
assert log_filter.filter(RECORD("test.child.child", logging.WARNING))
|
2016-01-30 18:23:35 +00:00
|
|
|
|
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
async def test_set_filter_empty_config(hass):
|
|
|
|
"""Test change log level from empty configuration."""
|
|
|
|
log_filter = await async_setup_logger(hass, NO_LOGS_CONFIG)
|
2016-01-30 18:23:35 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert not log_filter.filter(RECORD("test", logging.DEBUG))
|
2016-01-30 18:23:35 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
await hass.services.async_call(logger.DOMAIN, "set_level", {"test": "debug"})
|
|
|
|
await hass.async_block_till_done()
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert log_filter.filter(RECORD("test", logging.DEBUG))
|
2017-02-26 22:15:44 +00:00
|
|
|
|
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
async def test_set_filter(hass):
|
|
|
|
"""Test change log level of existing filter."""
|
|
|
|
log_filter = await async_setup_logger(hass, TEST_CONFIG)
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert not log_filter.filter(RECORD("asdf", logging.DEBUG))
|
|
|
|
assert log_filter.filter(RECORD("dummy", logging.WARNING))
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
await hass.services.async_call(
|
|
|
|
logger.DOMAIN, "set_level", {"asdf": "debug", "dummy": "info"}
|
|
|
|
)
|
|
|
|
await hass.async_block_till_done()
|
2017-02-26 22:15:44 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert log_filter.filter(RECORD("asdf", logging.DEBUG))
|
|
|
|
assert log_filter.filter(RECORD("dummy", logging.WARNING))
|
2017-02-26 22:15:44 +00:00
|
|
|
|
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
async def test_set_default_filter_empty_config(hass):
|
|
|
|
"""Test change default log level from empty configuration."""
|
|
|
|
log_filter = await async_setup_logger(hass, NO_DEFAULT_CONFIG)
|
2018-06-07 21:03:04 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert log_filter.filter(RECORD("test", logging.DEBUG))
|
2018-06-07 21:03:04 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
await hass.services.async_call(
|
|
|
|
logger.DOMAIN, "set_default_level", {"level": "warning"}
|
|
|
|
)
|
|
|
|
await hass.async_block_till_done()
|
2018-06-07 21:03:04 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert not log_filter.filter(RECORD("test", logging.DEBUG))
|
2018-06-07 21:03:04 +00:00
|
|
|
|
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
async def test_set_default_filter(hass):
|
|
|
|
"""Test change default log level with existing default."""
|
|
|
|
log_filter = await async_setup_logger(hass, TEST_CONFIG)
|
2018-06-07 21:03:04 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert not log_filter.filter(RECORD("asdf", logging.DEBUG))
|
|
|
|
assert log_filter.filter(RECORD("dummy", logging.WARNING))
|
2018-06-07 21:03:04 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
await hass.services.async_call(
|
|
|
|
logger.DOMAIN, "set_default_level", {"level": "debug"}
|
|
|
|
)
|
|
|
|
await hass.async_block_till_done()
|
2018-06-07 21:03:04 +00:00
|
|
|
|
2020-05-23 16:12:55 +00:00
|
|
|
assert log_filter.filter(RECORD("asdf", logging.DEBUG))
|
|
|
|
assert log_filter.filter(RECORD("dummy", logging.WARNING))
|