mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 16:57:10 +00:00
Roborock continue on failed mqtt disconnect (#92502)
continue on async disconnect failure
This commit is contained in:
parent
82b4368d1d
commit
f326dd919b
@ -8,6 +8,7 @@ import logging
|
|||||||
from roborock.api import RoborockApiClient
|
from roborock.api import RoborockApiClient
|
||||||
from roborock.cloud_api import RoborockMqttClient
|
from roborock.cloud_api import RoborockMqttClient
|
||||||
from roborock.containers import HomeDataDevice, RoborockDeviceInfo, UserData
|
from roborock.containers import HomeDataDevice, RoborockDeviceInfo, UserData
|
||||||
|
from roborock.exceptions import RoborockException
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_USERNAME
|
from homeassistant.const import CONF_USERNAME
|
||||||
@ -44,7 +45,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
for device, result in zip(devices, network_results)
|
for device, result in zip(devices, network_results)
|
||||||
if result is not None
|
if result is not None
|
||||||
}
|
}
|
||||||
|
try:
|
||||||
await mqtt_client.async_disconnect()
|
await mqtt_client.async_disconnect()
|
||||||
|
except RoborockException as err:
|
||||||
|
_LOGGER.warning("Failed disconnecting from the mqtt server %s", err)
|
||||||
if not network_info:
|
if not network_info:
|
||||||
raise ConfigEntryNotReady(
|
raise ConfigEntryNotReady(
|
||||||
"Could not get network information about your devices"
|
"Could not get network information about your devices"
|
||||||
|
@ -7,6 +7,7 @@ from roborock.containers import (
|
|||||||
Consumable,
|
Consumable,
|
||||||
DNDTimer,
|
DNDTimer,
|
||||||
HomeData,
|
HomeData,
|
||||||
|
NetworkInfo,
|
||||||
Status,
|
Status,
|
||||||
UserData,
|
UserData,
|
||||||
)
|
)
|
||||||
@ -368,3 +369,7 @@ STATUS = Status.from_dict(
|
|||||||
)
|
)
|
||||||
|
|
||||||
PROP = DeviceProp(STATUS, DND_TIMER, CLEAN_SUMMARY, CONSUMABLE, CLEAN_RECORD)
|
PROP = DeviceProp(STATUS, DND_TIMER, CLEAN_SUMMARY, CONSUMABLE, CLEAN_RECORD)
|
||||||
|
|
||||||
|
NETWORK_INFO = NetworkInfo(
|
||||||
|
ip="123.232.12.1", ssid="wifi", mac="ac:cc:cc:cc:cc", bssid="bssid", rssi=90
|
||||||
|
)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
"""Test for Roborock init."""
|
"""Test for Roborock init."""
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from roborock.exceptions import RoborockTimeout
|
||||||
|
|
||||||
from homeassistant.components.roborock.const import DOMAIN
|
from homeassistant.components.roborock.const import DOMAIN
|
||||||
from homeassistant.config_entries import ConfigEntryState
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -8,6 +10,7 @@ from homeassistant.helpers.update_coordinator import UpdateFailed
|
|||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
from tests.components.roborock.mock_data import HOME_DATA, NETWORK_INFO
|
||||||
|
|
||||||
|
|
||||||
async def test_unload_entry(
|
async def test_unload_entry(
|
||||||
@ -38,3 +41,23 @@ async def test_config_entry_not_ready(
|
|||||||
):
|
):
|
||||||
await async_setup_component(hass, DOMAIN, {})
|
await async_setup_component(hass, DOMAIN, {})
|
||||||
assert mock_roborock_entry.state is ConfigEntryState.SETUP_RETRY
|
assert mock_roborock_entry.state is ConfigEntryState.SETUP_RETRY
|
||||||
|
|
||||||
|
|
||||||
|
async def test_continue_setup_mqtt_disconnect_fail(
|
||||||
|
hass: HomeAssistant, mock_roborock_entry: MockConfigEntry
|
||||||
|
):
|
||||||
|
"""Test that if disconnect fails, we still continue setting up."""
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.roborock.RoborockApiClient.get_home_data",
|
||||||
|
return_value=HOME_DATA,
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.roborock.RoborockMqttClient.get_networking",
|
||||||
|
return_value=NETWORK_INFO,
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.roborock.RoborockMqttClient.async_disconnect",
|
||||||
|
side_effect=RoborockTimeout(),
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.roborock.RoborockDataUpdateCoordinator.async_config_entry_first_refresh"
|
||||||
|
):
|
||||||
|
await async_setup_component(hass, DOMAIN, {})
|
||||||
|
assert mock_roborock_entry.state is ConfigEntryState.LOADED
|
||||||
|
Loading…
x
Reference in New Issue
Block a user