Roborock continue on failed mqtt disconnect (#92502)
continue on async disconnect failurepull/92642/head
parent
82b4368d1d
commit
f326dd919b
|
@ -8,6 +8,7 @@ import logging
|
|||
from roborock.api import RoborockApiClient
|
||||
from roborock.cloud_api import RoborockMqttClient
|
||||
from roborock.containers import HomeDataDevice, RoborockDeviceInfo, UserData
|
||||
from roborock.exceptions import RoborockException
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
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)
|
||||
if result is not None
|
||||
}
|
||||
await mqtt_client.async_disconnect()
|
||||
try:
|
||||
await mqtt_client.async_disconnect()
|
||||
except RoborockException as err:
|
||||
_LOGGER.warning("Failed disconnecting from the mqtt server %s", err)
|
||||
if not network_info:
|
||||
raise ConfigEntryNotReady(
|
||||
"Could not get network information about your devices"
|
||||
|
|
|
@ -7,6 +7,7 @@ from roborock.containers import (
|
|||
Consumable,
|
||||
DNDTimer,
|
||||
HomeData,
|
||||
NetworkInfo,
|
||||
Status,
|
||||
UserData,
|
||||
)
|
||||
|
@ -368,3 +369,7 @@ STATUS = Status.from_dict(
|
|||
)
|
||||
|
||||
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."""
|
||||
from unittest.mock import patch
|
||||
|
||||
from roborock.exceptions import RoborockTimeout
|
||||
|
||||
from homeassistant.components.roborock.const import DOMAIN
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
@ -8,6 +10,7 @@ from homeassistant.helpers.update_coordinator import UpdateFailed
|
|||
from homeassistant.setup import async_setup_component
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
from tests.components.roborock.mock_data import HOME_DATA, NETWORK_INFO
|
||||
|
||||
|
||||
async def test_unload_entry(
|
||||
|
@ -38,3 +41,23 @@ async def test_config_entry_not_ready(
|
|||
):
|
||||
await async_setup_component(hass, DOMAIN, {})
|
||||
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…
Reference in New Issue