Fix handling reload with invalid mqtt config (#101015)
Fix handling reload whith invalid mqtt config
This commit is contained in:
parent
5fe61ca5e7
commit
dc1d3f727b
2 changed files with 51 additions and 3 deletions
|
@ -24,7 +24,7 @@ from homeassistant.const import (
|
|||
SERVICE_RELOAD,
|
||||
)
|
||||
from homeassistant.core import HassJob, HomeAssistant, ServiceCall, callback
|
||||
from homeassistant.exceptions import TemplateError, Unauthorized
|
||||
from homeassistant.exceptions import HomeAssistantError, TemplateError, Unauthorized
|
||||
from homeassistant.helpers import config_validation as cv, event as ev, template
|
||||
from homeassistant.helpers.device_registry import DeviceEntry
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
|
@ -364,8 +364,15 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||
|
||||
async def _reload_config(call: ServiceCall) -> None:
|
||||
"""Reload the platforms."""
|
||||
# Fetch updated manual configured items and validate
|
||||
config_yaml = await async_integration_yaml_config(hass, DOMAIN) or {}
|
||||
# Fetch updated manually configured items and validate
|
||||
if (
|
||||
config_yaml := await async_integration_yaml_config(hass, DOMAIN)
|
||||
) is None:
|
||||
# Raise in case we have an invalid configuration
|
||||
raise HomeAssistantError(
|
||||
"Error reloading manually configured MQTT items, "
|
||||
"check your configuration.yaml"
|
||||
)
|
||||
mqtt_data.config = config_yaml.get(DOMAIN, {})
|
||||
|
||||
# Reload the modern yaml platforms
|
||||
|
|
|
@ -3898,3 +3898,44 @@ async def test_reload_config_entry(
|
|||
assert state.state == "manual2_update_after_reload"
|
||||
assert (state := hass.states.get("sensor.test_manual3")) is not None
|
||||
assert state.state is STATE_UNAVAILABLE
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"hass_config",
|
||||
[
|
||||
{
|
||||
"mqtt": [
|
||||
{
|
||||
"sensor": {
|
||||
"name": "test",
|
||||
"state_topic": "test-topic",
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
],
|
||||
)
|
||||
async def test_reload_with_invalid_config(
|
||||
hass: HomeAssistant,
|
||||
mqtt_mock_entry: MqttMockHAClientGenerator,
|
||||
) -> None:
|
||||
"""Test reloading yaml config fails."""
|
||||
await mqtt_mock_entry()
|
||||
assert hass.states.get("sensor.test") is not None
|
||||
|
||||
# Reload with an invalid config and assert again
|
||||
invalid_config = {"mqtt": "some_invalid_config"}
|
||||
with patch(
|
||||
"homeassistant.config.load_yaml_config_file", return_value=invalid_config
|
||||
):
|
||||
with pytest.raises(HomeAssistantError):
|
||||
await hass.services.async_call(
|
||||
"mqtt",
|
||||
SERVICE_RELOAD,
|
||||
{},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# Test nothing changed as loading the config failed
|
||||
assert hass.states.get("sensor.test") is not None
|
||||
|
|
Loading…
Add table
Reference in a new issue