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.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
|
||||||
}
|
}
|
||||||
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:
|
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…
Reference in New Issue