From 89e1aa655b5f2944a696f3032a4bb691b35b071d Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 02:31:05 +0200 Subject: [PATCH 01/21] Fix network failure startup Fix for issue ##33284 - Asuswrt component fail at startup after power failure --- homeassistant/components/asuswrt/__init__.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index a0eee38c3f8af..d7a15c2d32372 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -14,6 +14,7 @@ ) from homeassistant.helpers import config_validation as cv from homeassistant.helpers.discovery import async_load_platform +from homeassistant.exceptions import PlatformNotReady _LOGGER = logging.getLogger(__name__) @@ -77,10 +78,17 @@ async def async_setup(hass, config): dnsmasq=conf[CONF_DNSMASQ], ) - await api.connection.async_connect() - if not api.is_connected: - _LOGGER.error("Unable to setup component") - return False + try: + await api.connection.async_connect() + if not api.is_connected: + _LOGGER.error("Unable to setup component") + return False + except OSError as ex: + # this tipically occur during network startup + # raising platform not ready connection is retried + raise PlatformNotReady() from ex + except: + raise hass.data[DATA_ASUSWRT] = api From d107dd36c91184e3c7705674ae30da5bc93c89bc Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 11:27:39 +0200 Subject: [PATCH 02/21] Removed comment --- homeassistant/components/asuswrt/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index d7a15c2d32372..a25336be265a9 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -84,8 +84,7 @@ async def async_setup(hass, config): _LOGGER.error("Unable to setup component") return False except OSError as ex: - # this tipically occur during network startup - # raising platform not ready connection is retried + """Raise platform not ready to retry setup on network startup.""" raise PlatformNotReady() from ex except: raise From 54f14fa02c0aa85297fea73386552a4be7bd5885 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 11:44:28 +0200 Subject: [PATCH 03/21] Removed bare except --- homeassistant/components/asuswrt/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index a25336be265a9..65438fcc5d20d 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -86,8 +86,6 @@ async def async_setup(hass, config): except OSError as ex: """Raise platform not ready to retry setup on network startup.""" raise PlatformNotReady() from ex - except: - raise hass.data[DATA_ASUSWRT] = api From 7c47f594e2de0a85d18d0d7c5ebda855d8517879 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 11:58:49 +0200 Subject: [PATCH 04/21] is_connected moved out try-catch --- homeassistant/components/asuswrt/__init__.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 65438fcc5d20d..a996809b0b0c7 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -12,9 +12,9 @@ CONF_PROTOCOL, CONF_USERNAME, ) +from homeassistant.exceptions import PlatformNotReady from homeassistant.helpers import config_validation as cv from homeassistant.helpers.discovery import async_load_platform -from homeassistant.exceptions import PlatformNotReady _LOGGER = logging.getLogger(__name__) @@ -80,13 +80,14 @@ async def async_setup(hass, config): try: await api.connection.async_connect() - if not api.is_connected: - _LOGGER.error("Unable to setup component") - return False except OSError as ex: """Raise platform not ready to retry setup on network startup.""" raise PlatformNotReady() from ex + if not api.is_connected: + _LOGGER.error("Unable to setup component") + return False + hass.data[DATA_ASUSWRT] = api hass.async_create_task( From 0e9ca46fd3c771c11b3fd3f5828f20530bd5127d Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 12:20:07 +0200 Subject: [PATCH 05/21] Removed pointless-string-statement --- homeassistant/components/asuswrt/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index a996809b0b0c7..c67368d9061fd 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -81,7 +81,6 @@ async def async_setup(hass, config): try: await api.connection.async_connect() except OSError as ex: - """Raise platform not ready to retry setup on network startup.""" raise PlatformNotReady() from ex if not api.is_connected: From 09ec351aeb00399b8b4a04ea6ffb718acd7aee24 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 12:35:24 +0200 Subject: [PATCH 06/21] Raise PlatformNotReady on "not is_connected" --- homeassistant/components/asuswrt/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index c67368d9061fd..097e7b26c0201 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -84,8 +84,7 @@ async def async_setup(hass, config): raise PlatformNotReady() from ex if not api.is_connected: - _LOGGER.error("Unable to setup component") - return False + raise PlatformNotReady() hass.data[DATA_ASUSWRT] = api From ce793c1cc4988ef554570a3668150cf489d7f7b1 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 18:38:17 +0200 Subject: [PATCH 07/21] Removed unnecessary check --- homeassistant/components/asuswrt/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 097e7b26c0201..b2ddc6eb080bf 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -83,9 +83,6 @@ async def async_setup(hass, config): except OSError as ex: raise PlatformNotReady() from ex - if not api.is_connected: - raise PlatformNotReady() - hass.data[DATA_ASUSWRT] = api hass.async_create_task( From b6e82ad0ef158dfcec60b2643a5fdaa32d215f24 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 19:49:04 +0200 Subject: [PATCH 08/21] Revert "Removed unnecessary check" This reverts commit a2ccddab2c4b1ba441f1d7482d802d9774527a26. --- homeassistant/components/asuswrt/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index b2ddc6eb080bf..097e7b26c0201 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -83,6 +83,9 @@ async def async_setup(hass, config): except OSError as ex: raise PlatformNotReady() from ex + if not api.is_connected: + raise PlatformNotReady() + hass.data[DATA_ASUSWRT] = api hass.async_create_task( From f453b8135cc6804669263179e72ea75bfc1ad3df Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 23:15:30 +0200 Subject: [PATCH 09/21] Implemented custom retry mechanism --- homeassistant/components/asuswrt/__init__.py | 30 ++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 097e7b26c0201..0ae936cbfe09a 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -12,9 +12,9 @@ CONF_PROTOCOL, CONF_USERNAME, ) -from homeassistant.exceptions import PlatformNotReady from homeassistant.helpers import config_validation as cv from homeassistant.helpers.discovery import async_load_platform +from homeassistant.helpers.event import async_call_later _LOGGER = logging.getLogger(__name__) @@ -32,6 +32,9 @@ DEFAULT_INTERFACE = "eth0" DEFAULT_DNSMASQ = "/var/lib/misc" +MAX_RETRY_COUNT = 5 +RETRY_DELAY = 120 + SECRET_GROUP = "Password or SSH Key" SENSOR_TYPES = ["upload_speed", "download_speed", "download", "upload"] @@ -62,6 +65,20 @@ async def async_setup(hass, config): """Set up the asuswrt component.""" + await async_setup_retry(hass, config) + return True + + +async def async_retry_task(hass, config, retry_count): + async_call_later(hass, RETRY_DELAY, lambda _: + hass.async_create_task( + async_setup_retry(hass, config, retry_count) + ) + ) + + +async def async_setup_retry(hass, config, retry_count=0): + """Set up the asuswrt component.""" conf = config[DOMAIN] @@ -81,10 +98,13 @@ async def async_setup(hass, config): try: await api.connection.async_connect() except OSError as ex: - raise PlatformNotReady() from ex + if retry_count < MAX_RETRY_COUNT: + _LOGGER.warning("Unable to setup integration %s. Retrying in %s seconds...", DOMAIN, RETRY_DELAY) + await async_retry_task(hass, config, retry_count+1) + else: + _LOGGER.error("Failed to setup integration %s.", DOMAIN) - if not api.is_connected: - raise PlatformNotReady() + return hass.data[DATA_ASUSWRT] = api @@ -97,4 +117,4 @@ async def async_setup(hass, config): async_load_platform(hass, "device_tracker", DOMAIN, {}, config) ) - return True + return \ No newline at end of file From 622a14f32f675d7214056f54ca771254dd6c74ff Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 23:32:52 +0200 Subject: [PATCH 10/21] Fix new line missing --- homeassistant/components/asuswrt/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 0ae936cbfe09a..2d4d0b0f73b46 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -117,4 +117,4 @@ async def async_setup_retry(hass, config, retry_count=0): async_load_platform(hass, "device_tracker", DOMAIN, {}, config) ) - return \ No newline at end of file + return From 3728833c7b8c48f4634fe71ae5415c60269e56c4 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Wed, 1 Apr 2020 23:51:34 +0200 Subject: [PATCH 11/21] Fix formatting --- homeassistant/components/asuswrt/__init__.py | 25 +++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 2d4d0b0f73b46..9d2ca79149414 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -65,20 +65,23 @@ async def async_setup(hass, config): """Set up the asuswrt component.""" + await async_setup_retry(hass, config) return True async def async_retry_task(hass, config, retry_count): - async_call_later(hass, RETRY_DELAY, lambda _: - hass.async_create_task( - async_setup_retry(hass, config, retry_count) - ) - ) + """Schedule the asuswrt component setup.""" + + async_call_later( + hass, + RETRY_DELAY, + lambda _: hass.async_create_task(async_setup_retry(hass, config, retry_count)), + ) async def async_setup_retry(hass, config, retry_count=0): - """Set up the asuswrt component.""" + """Set up the asuswrt component with retry.""" conf = config[DOMAIN] @@ -97,10 +100,14 @@ async def async_setup_retry(hass, config, retry_count=0): try: await api.connection.async_connect() - except OSError as ex: + except OSError: if retry_count < MAX_RETRY_COUNT: - _LOGGER.warning("Unable to setup integration %s. Retrying in %s seconds...", DOMAIN, RETRY_DELAY) - await async_retry_task(hass, config, retry_count+1) + _LOGGER.warning( + "Unable to setup integration %s. Retrying in %s seconds...", + DOMAIN, + RETRY_DELAY, + ) + await async_retry_task(hass, config, retry_count + 1) else: _LOGGER.error("Failed to setup integration %s.", DOMAIN) From e7b40a8242386add5d6b6547a6c49a1c5d1733d0 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Thu, 2 Apr 2020 00:10:42 +0200 Subject: [PATCH 12/21] Fix indent --- homeassistant/components/asuswrt/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 9d2ca79149414..379f44754a565 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -65,7 +65,7 @@ async def async_setup(hass, config): """Set up the asuswrt component.""" - + await async_setup_retry(hass, config) return True @@ -77,7 +77,7 @@ async def async_retry_task(hass, config, retry_count): hass, RETRY_DELAY, lambda _: hass.async_create_task(async_setup_retry(hass, config, retry_count)), - ) + ) async def async_setup_retry(hass, config, retry_count=0): @@ -103,9 +103,9 @@ async def async_setup_retry(hass, config, retry_count=0): except OSError: if retry_count < MAX_RETRY_COUNT: _LOGGER.warning( - "Unable to setup integration %s. Retrying in %s seconds...", - DOMAIN, - RETRY_DELAY, + "Unable to setup integration %s. Retrying in %s seconds...", + DOMAIN, + RETRY_DELAY, ) await async_retry_task(hass, config, retry_count + 1) else: From 434e10fbe4bb9c7e376013630bee79848d9bf24f Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Thu, 2 Apr 2020 01:00:56 +0200 Subject: [PATCH 13/21] Reviewed check --- homeassistant/components/asuswrt/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 379f44754a565..a64b772a5755e 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -101,6 +101,9 @@ async def async_setup_retry(hass, config, retry_count=0): try: await api.connection.async_connect() except OSError: + pass + + if not api.is_connected: if retry_count < MAX_RETRY_COUNT: _LOGGER.warning( "Unable to setup integration %s. Retrying in %s seconds...", From 0aa0ed60faf675480c5fee5b45a2fa68e2d4ed0a Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Thu, 2 Apr 2020 14:23:54 +0200 Subject: [PATCH 14/21] Recoded based on tibber implementation --- homeassistant/components/asuswrt/__init__.py | 54 ++++++++------------ 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index a64b772a5755e..8ecc9fa1c2910 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -32,8 +32,8 @@ DEFAULT_INTERFACE = "eth0" DEFAULT_DNSMASQ = "/var/lib/misc" -MAX_RETRY_COUNT = 5 -RETRY_DELAY = 120 +FIRST_RETRY_TIME = 60 +MAX_RETRY_TIME = 900 SECRET_GROUP = "Password or SSH Key" SENSOR_TYPES = ["upload_speed", "download_speed", "download", "upload"] @@ -63,26 +63,9 @@ ) -async def async_setup(hass, config): +async def async_setup(hass, config, retry_delay=FIRST_RETRY_TIME): """Set up the asuswrt component.""" - await async_setup_retry(hass, config) - return True - - -async def async_retry_task(hass, config, retry_count): - """Schedule the asuswrt component setup.""" - - async_call_later( - hass, - RETRY_DELAY, - lambda _: hass.async_create_task(async_setup_retry(hass, config, retry_count)), - ) - - -async def async_setup_retry(hass, config, retry_count=0): - """Set up the asuswrt component with retry.""" - conf = config[DOMAIN] api = AsusWrt( @@ -100,21 +83,26 @@ async def async_setup_retry(hass, config, retry_count=0): try: await api.connection.async_connect() - except OSError: + except OSError as ex: + _LOGGER.warning(ex) pass if not api.is_connected: - if retry_count < MAX_RETRY_COUNT: - _LOGGER.warning( - "Unable to setup integration %s. Retrying in %s seconds...", - DOMAIN, - RETRY_DELAY, - ) - await async_retry_task(hass, config, retry_count + 1) - else: - _LOGGER.error("Failed to setup integration %s.", DOMAIN) - - return + + _LOGGER.warning( + "Error connecting %s to %s. Will retry in %s seconds...", + DOMAIN, + conf[CONF_HOST], + retry_delay, + ) + + async def retry_setup(now): + """Retry setup if a eroor happens on asuswrt API.""" + await async_setup(hass, config, retry_delay=min(2 * retry_delay, MAX_RETRY_TIME)) + + async_call_later(hass, retry_delay, retry_setup) + + return True hass.data[DATA_ASUSWRT] = api @@ -127,4 +115,4 @@ async def async_setup_retry(hass, config, retry_count=0): async_load_platform(hass, "device_tracker", DOMAIN, {}, config) ) - return + return True From 9b5d9e8b116fb8823ac6b1f39ef04fcd95a373bb Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Thu, 2 Apr 2020 14:32:18 +0200 Subject: [PATCH 15/21] Formatting review --- homeassistant/components/asuswrt/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 8ecc9fa1c2910..f8c5c08b15d67 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -98,7 +98,9 @@ async def async_setup(hass, config, retry_delay=FIRST_RETRY_TIME): async def retry_setup(now): """Retry setup if a eroor happens on asuswrt API.""" - await async_setup(hass, config, retry_delay=min(2 * retry_delay, MAX_RETRY_TIME)) + await async_setup( + hass, config, retry_delay=min(2 * retry_delay, MAX_RETRY_TIME) + ) async_call_later(hass, retry_delay, retry_setup) From 95466902bcb635a61fbb8fc73b0f92a80c02b7ae Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Thu, 2 Apr 2020 16:20:26 +0200 Subject: [PATCH 16/21] Changes requested --- homeassistant/components/asuswrt/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index f8c5c08b15d67..88425d5b19b42 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -85,7 +85,6 @@ async def async_setup(hass, config, retry_delay=FIRST_RETRY_TIME): await api.connection.async_connect() except OSError as ex: _LOGGER.warning(ex) - pass if not api.is_connected: @@ -97,7 +96,7 @@ async def async_setup(hass, config, retry_delay=FIRST_RETRY_TIME): ) async def retry_setup(now): - """Retry setup if a eroor happens on asuswrt API.""" + """Retry setup if a error happens on asuswrt API.""" await async_setup( hass, config, retry_delay=min(2 * retry_delay, MAX_RETRY_TIME) ) From ec5682badac459f1e960bf7693f42ca784b093ae Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Thu, 2 Apr 2020 17:46:18 +0200 Subject: [PATCH 17/21] Fix tests for setup retry --- tests/components/asuswrt/test_device_tracker.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/components/asuswrt/test_device_tracker.py b/tests/components/asuswrt/test_device_tracker.py index b91b815d58e85..b49e3d52c6e5b 100644 --- a/tests/components/asuswrt/test_device_tracker.py +++ b/tests/components/asuswrt/test_device_tracker.py @@ -64,7 +64,8 @@ async def test_specify_non_directory_path_for_dnsmasq(hass): } }, ) - assert not result + assert result + assert hass.data[DATA_ASUSWRT] is None async def test_interface(hass): @@ -109,4 +110,5 @@ async def test_no_interface(hass): } }, ) - assert not result + assert result + assert hass.data[DATA_ASUSWRT] is None From 046771fb908c35f8fe164b9c2ac88935fe56fe50 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Fri, 3 Apr 2020 10:42:00 +0200 Subject: [PATCH 18/21] Updated missing test --- tests/components/asuswrt/test_device_tracker.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/components/asuswrt/test_device_tracker.py b/tests/components/asuswrt/test_device_tracker.py index b49e3d52c6e5b..5c28f612349cc 100644 --- a/tests/components/asuswrt/test_device_tracker.py +++ b/tests/components/asuswrt/test_device_tracker.py @@ -21,7 +21,8 @@ async def test_password_or_pub_key_required(hass): result = await async_setup_component( hass, DOMAIN, {DOMAIN: {CONF_HOST: "fake_host", CONF_USERNAME: "fake_user"}} ) - assert not result + assert result + assert hass.data[DATA_ASUSWRT] is None async def test_get_scanner_with_password_no_pubkey(hass): From f07031f8954a4c7f5b71efcec4fcd10ea967c69e Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Fri, 3 Apr 2020 11:28:10 +0200 Subject: [PATCH 19/21] Fixed check on Tests --- tests/components/asuswrt/test_device_tracker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/components/asuswrt/test_device_tracker.py b/tests/components/asuswrt/test_device_tracker.py index 5c28f612349cc..9386ce7c2110a 100644 --- a/tests/components/asuswrt/test_device_tracker.py +++ b/tests/components/asuswrt/test_device_tracker.py @@ -22,7 +22,7 @@ async def test_password_or_pub_key_required(hass): hass, DOMAIN, {DOMAIN: {CONF_HOST: "fake_host", CONF_USERNAME: "fake_user"}} ) assert result - assert hass.data[DATA_ASUSWRT] is None + assert hass.data.get(DATA_ASUSWRT, None) is None async def test_get_scanner_with_password_no_pubkey(hass): @@ -66,7 +66,7 @@ async def test_specify_non_directory_path_for_dnsmasq(hass): }, ) assert result - assert hass.data[DATA_ASUSWRT] is None + assert hass.data.get(DATA_ASUSWRT, None) is None async def test_interface(hass): @@ -112,4 +112,4 @@ async def test_no_interface(hass): }, ) assert result - assert hass.data[DATA_ASUSWRT] is None + assert hass.data.get(DATA_ASUSWRT, None) is None From f052d2302518cb80ed2be36833b3f176afc50e89 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Fri, 3 Apr 2020 13:39:00 +0200 Subject: [PATCH 20/21] Return false if not exception --- homeassistant/components/asuswrt/__init__.py | 11 ++++++----- tests/components/asuswrt/test_device_tracker.py | 17 +++++++++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 88425d5b19b42..446fe898aaaf5 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -84,12 +84,9 @@ async def async_setup(hass, config, retry_delay=FIRST_RETRY_TIME): try: await api.connection.async_connect() except OSError as ex: - _LOGGER.warning(ex) - - if not api.is_connected: - _LOGGER.warning( - "Error connecting %s to %s. Will retry in %s seconds...", + "Error [%s] connecting %s to %s. Will retry in %s seconds...", + str(ex), DOMAIN, conf[CONF_HOST], retry_delay, @@ -105,6 +102,10 @@ async def retry_setup(now): return True + if not api.is_connected: + _LOGGER.error("Error connecting %s to %s.", DOMAIN, conf[CONF_HOST]) + return False + hass.data[DATA_ASUSWRT] = api hass.async_create_task( diff --git a/tests/components/asuswrt/test_device_tracker.py b/tests/components/asuswrt/test_device_tracker.py index 9386ce7c2110a..16ff1b51c9726 100644 --- a/tests/components/asuswrt/test_device_tracker.py +++ b/tests/components/asuswrt/test_device_tracker.py @@ -21,6 +21,17 @@ async def test_password_or_pub_key_required(hass): result = await async_setup_component( hass, DOMAIN, {DOMAIN: {CONF_HOST: "fake_host", CONF_USERNAME: "fake_user"}} ) + assert not result + + +async def test_network_unreachable(hass): + """Test creating an AsusWRT scanner without a pass or pubkey.""" + with patch("homeassistant.components.asuswrt.AsusWrt") as AsusWrt: + AsusWrt().connection.async_connect = mock_coro_func(exception = OSError) + AsusWrt().is_connected = False + result = await async_setup_component( + hass, DOMAIN, {DOMAIN: {CONF_HOST: "fake_host", CONF_USERNAME: "fake_user"}} + ) assert result assert hass.data.get(DATA_ASUSWRT, None) is None @@ -65,8 +76,7 @@ async def test_specify_non_directory_path_for_dnsmasq(hass): } }, ) - assert result - assert hass.data.get(DATA_ASUSWRT, None) is None + assert not result async def test_interface(hass): @@ -111,5 +121,4 @@ async def test_no_interface(hass): } }, ) - assert result - assert hass.data.get(DATA_ASUSWRT, None) is None + assert not result From 6b6cb9772825bbf84fefe41c61cc9d4f74c64f3c Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Fri, 3 Apr 2020 13:48:09 +0200 Subject: [PATCH 21/21] Format correction --- tests/components/asuswrt/test_device_tracker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/components/asuswrt/test_device_tracker.py b/tests/components/asuswrt/test_device_tracker.py index 16ff1b51c9726..62e5ed891ffae 100644 --- a/tests/components/asuswrt/test_device_tracker.py +++ b/tests/components/asuswrt/test_device_tracker.py @@ -27,7 +27,7 @@ async def test_password_or_pub_key_required(hass): async def test_network_unreachable(hass): """Test creating an AsusWRT scanner without a pass or pubkey.""" with patch("homeassistant.components.asuswrt.AsusWrt") as AsusWrt: - AsusWrt().connection.async_connect = mock_coro_func(exception = OSError) + AsusWrt().connection.async_connect = mock_coro_func(exception=OSError) AsusWrt().is_connected = False result = await async_setup_component( hass, DOMAIN, {DOMAIN: {CONF_HOST: "fake_host", CONF_USERNAME: "fake_user"}}