diff --git a/homeassistant/components/cloud/account_link.py b/homeassistant/components/cloud/account_link.py index 1d0de26918d..4a3a2dd77f8 100644 --- a/homeassistant/components/cloud/account_link.py +++ b/homeassistant/components/cloud/account_link.py @@ -3,6 +3,7 @@ import asyncio import logging from typing import Any +import aiohttp from hass_nabucasa import account_link from homeassistant.const import MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION @@ -73,7 +74,10 @@ async def _get_services(hass): if services is not None: return services - services = await account_link.async_fetch_available_services(hass.data[DOMAIN]) + try: + services = await account_link.async_fetch_available_services(hass.data[DOMAIN]) + except (aiohttp.ClientError, asyncio.TimeoutError): + return [] hass.data[DATA_SERVICES] = services diff --git a/tests/components/cloud/test_account_link.py b/tests/components/cloud/test_account_link.py index ae34318c452..ce310001b35 100644 --- a/tests/components/cloud/test_account_link.py +++ b/tests/components/cloud/test_account_link.py @@ -96,6 +96,18 @@ async def test_get_services_cached(hass): assert await account_link._get_services(hass) == 4 +async def test_get_services_error(hass): + """Test that we cache services.""" + hass.data["cloud"] = None + + with patch.object(account_link, "CACHE_TIMEOUT", 0), patch( + "hass_nabucasa.account_link.async_fetch_available_services", + side_effect=asyncio.TimeoutError, + ): + assert await account_link._get_services(hass) == [] + assert account_link.DATA_SERVICES not in hass.data + + async def test_implementation(hass, flow_handler): """Test Cloud OAuth2 implementation.""" hass.data["cloud"] = None