mirror of
https://github.com/home-assistant/core.git
synced 2025-11-09 02:49:40 +00:00
Catch unexpected exceptions when validating config (#31795)
This commit is contained in:
@@ -4,9 +4,11 @@ import asyncio
|
||||
from collections import OrderedDict
|
||||
import copy
|
||||
import os
|
||||
import unittest.mock as mock
|
||||
from unittest import mock
|
||||
from unittest.mock import Mock
|
||||
|
||||
import asynctest
|
||||
from asynctest import CoroutineMock, patch
|
||||
import pytest
|
||||
from voluptuous import Invalid, MultipleInvalid
|
||||
import yaml
|
||||
@@ -893,3 +895,97 @@ async def test_merge_split_component_definition(hass):
|
||||
assert len(config["light one"]) == 1
|
||||
assert len(config["light two"]) == 1
|
||||
assert len(config["light three"]) == 1
|
||||
|
||||
|
||||
async def test_component_config_exceptions(hass, caplog):
|
||||
"""Test unexpected exceptions validating component config."""
|
||||
# Config validator
|
||||
assert (
|
||||
await config_util.async_process_component_config(
|
||||
hass,
|
||||
{},
|
||||
integration=Mock(
|
||||
domain="test_domain",
|
||||
get_platform=Mock(
|
||||
return_value=Mock(
|
||||
async_validate_config=CoroutineMock(
|
||||
side_effect=ValueError("broken")
|
||||
)
|
||||
)
|
||||
),
|
||||
),
|
||||
)
|
||||
is None
|
||||
)
|
||||
assert "ValueError: broken" in caplog.text
|
||||
assert "Unknown error calling test_domain config validator" in caplog.text
|
||||
|
||||
# component.CONFIG_SCHEMA
|
||||
caplog.clear()
|
||||
assert (
|
||||
await config_util.async_process_component_config(
|
||||
hass,
|
||||
{},
|
||||
integration=Mock(
|
||||
domain="test_domain",
|
||||
get_platform=Mock(return_value=None),
|
||||
get_component=Mock(
|
||||
return_value=Mock(
|
||||
CONFIG_SCHEMA=Mock(side_effect=ValueError("broken"))
|
||||
)
|
||||
),
|
||||
),
|
||||
)
|
||||
is None
|
||||
)
|
||||
assert "ValueError: broken" in caplog.text
|
||||
assert "Unknown error calling test_domain CONFIG_SCHEMA" in caplog.text
|
||||
|
||||
# component.PLATFORM_SCHEMA
|
||||
caplog.clear()
|
||||
assert await config_util.async_process_component_config(
|
||||
hass,
|
||||
{"test_domain": {"platform": "test_platform"}},
|
||||
integration=Mock(
|
||||
domain="test_domain",
|
||||
get_platform=Mock(return_value=None),
|
||||
get_component=Mock(
|
||||
return_value=Mock(
|
||||
spec=["PLATFORM_SCHEMA_BASE"],
|
||||
PLATFORM_SCHEMA_BASE=Mock(side_effect=ValueError("broken")),
|
||||
)
|
||||
),
|
||||
),
|
||||
) == {"test_domain": []}
|
||||
assert "ValueError: broken" in caplog.text
|
||||
assert (
|
||||
"Unknown error validating test_platform platform config with test_domain component platform schema"
|
||||
in caplog.text
|
||||
)
|
||||
|
||||
# platform.PLATFORM_SCHEMA
|
||||
caplog.clear()
|
||||
with patch(
|
||||
"homeassistant.config.async_get_integration_with_requirements",
|
||||
return_value=Mock( # integration that owns platform
|
||||
get_platform=Mock(
|
||||
return_value=Mock( # platform
|
||||
PLATFORM_SCHEMA=Mock(side_effect=ValueError("broken"))
|
||||
)
|
||||
)
|
||||
),
|
||||
):
|
||||
assert await config_util.async_process_component_config(
|
||||
hass,
|
||||
{"test_domain": {"platform": "test_platform"}},
|
||||
integration=Mock(
|
||||
domain="test_domain",
|
||||
get_platform=Mock(return_value=None),
|
||||
get_component=Mock(return_value=Mock(spec=["PLATFORM_SCHEMA_BASE"])),
|
||||
),
|
||||
) == {"test_domain": []}
|
||||
assert "ValueError: broken" in caplog.text
|
||||
assert (
|
||||
"Unknown error validating config for test_platform platform for test_domain component with PLATFORM_SCHEMA"
|
||||
in caplog.text
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user