From f1d37fc8494225515e4729affc1d58a5a9915f2d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 26 Mar 2018 16:07:22 -0700 Subject: [PATCH] Upgrade aiohue and fix race condition (#13475) * Bump aiohue to 1.3 * Store bridge in hass.data before setting up platform * Fix tests --- homeassistant/components/hue/__init__.py | 5 +++-- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/hue/test_bridge.py | 1 + tests/components/hue/test_setup.py | 6 +----- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/hue/__init__.py b/homeassistant/components/hue/__init__.py index 2fb55f8f6e0..b70021e0304 100644 --- a/homeassistant/components/hue/__init__.py +++ b/homeassistant/components/hue/__init__.py @@ -21,7 +21,7 @@ from homeassistant.helpers import discovery, aiohttp_client from homeassistant import config_entries from homeassistant.util.json import save_json -REQUIREMENTS = ['aiohue==1.2.0'] +REQUIREMENTS = ['aiohue==1.3.0'] _LOGGER = logging.getLogger(__name__) @@ -145,7 +145,6 @@ async def async_setup_bridge( bridge = HueBridge(host, hass, filename, username, allow_unreachable, allow_hue_groups) await bridge.async_setup() - hass.data[DOMAIN][host] = bridge def _find_username_from_config(hass, filename): @@ -209,6 +208,8 @@ class HueBridge(object): self.host) return + self.hass.data[DOMAIN][self.host] = self + # If we came here and configuring this host, mark as done if self.config_request_id: request_id = self.config_request_id diff --git a/requirements_all.txt b/requirements_all.txt index 2dfd359c1f1..e8baacf7d2e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -74,7 +74,7 @@ aiodns==1.1.1 aiohttp_cors==0.7.0 # homeassistant.components.hue -aiohue==1.2.0 +aiohue==1.3.0 # homeassistant.components.sensor.imap aioimaplib==0.7.13 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index a7610eb02d2..185f1fff81b 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -35,7 +35,7 @@ aioautomatic==0.6.5 aiohttp_cors==0.7.0 # homeassistant.components.hue -aiohue==1.2.0 +aiohue==1.3.0 # homeassistant.components.notify.apns apns2==0.3.0 diff --git a/tests/components/hue/test_bridge.py b/tests/components/hue/test_bridge.py index 88a7223d91e..39351699df5 100644 --- a/tests/components/hue/test_bridge.py +++ b/tests/components/hue/test_bridge.py @@ -66,6 +66,7 @@ async def test_only_create_no_username(hass): async def test_configurator_callback(hass, mock_request): """.""" + hass.data[hue.DOMAIN] = {} with patch('aiohue.Bridge.create_user', side_effect=aiohue.LinkButtonNotPressed): await MockBridge(hass).async_setup() diff --git a/tests/components/hue/test_setup.py b/tests/components/hue/test_setup.py index 690419fcb7a..f90f58a50c3 100644 --- a/tests/components/hue/test_setup.py +++ b/tests/components/hue/test_setup.py @@ -18,7 +18,6 @@ async def test_setup_with_multiple_hosts(hass, mock_bridge): assert len(mock_bridge.mock_calls) == 2 hosts = sorted(mock_call[1][0] for mock_call in mock_bridge.mock_calls) assert hosts == ['127.0.0.1', '192.168.1.10'] - assert len(hass.data[hue.DOMAIN]) == 2 async def test_bridge_discovered(hass, mock_bridge): @@ -33,7 +32,6 @@ async def test_bridge_discovered(hass, mock_bridge): assert len(mock_bridge.mock_calls) == 1 assert mock_bridge.mock_calls[0][1][0] == '192.168.1.10' - assert len(hass.data[hue.DOMAIN]) == 1 async def test_bridge_configure_and_discovered(hass, mock_bridge): @@ -48,7 +46,7 @@ async def test_bridge_configure_and_discovered(hass, mock_bridge): assert len(mock_bridge.mock_calls) == 1 assert mock_bridge.mock_calls[0][1][0] == '192.168.1.10' - assert len(hass.data[hue.DOMAIN]) == 1 + hass.data[hue.DOMAIN] = {'192.168.1.10': {}} mock_bridge.reset_mock() @@ -59,7 +57,6 @@ async def test_bridge_configure_and_discovered(hass, mock_bridge): await hass.async_block_till_done() assert len(mock_bridge.mock_calls) == 0 - assert len(hass.data[hue.DOMAIN]) == 1 async def test_setup_no_host(hass, aioclient_mock): @@ -71,4 +68,3 @@ async def test_setup_no_host(hass, aioclient_mock): assert result assert len(aioclient_mock.mock_calls) == 1 - assert len(hass.data[hue.DOMAIN]) == 0