From 958c4764f7d7bb4167a29f37798060054430bd61 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 27 Mar 2021 23:23:06 -1000 Subject: [PATCH] Handle routers that convert hostnames to lowercase in dhcp (#48429) Some routers will lowercase all the hostnames. Since we already lowercase hostnames for matching purposes, we now pass the lowercased hostname to the integration. Currently only roomba cared about this, and has been adjusted. --- homeassistant/components/dhcp/__init__.py | 6 +++++- homeassistant/components/roomba/config_flow.py | 2 +- tests/components/dhcp/test_init.py | 4 ++-- tests/components/roomba/test_config_flow.py | 18 +++++++++--------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/dhcp/__init__.py b/homeassistant/components/dhcp/__init__.py index 304eea24fd4..b9a330510c1 100644 --- a/homeassistant/components/dhcp/__init__.py +++ b/homeassistant/components/dhcp/__init__.py @@ -126,7 +126,11 @@ class WatcherBase: self.hass.config_entries.flow.async_init( entry["domain"], context={"source": DOMAIN}, - data={IP_ADDRESS: ip_address, **data}, + data={ + IP_ADDRESS: ip_address, + HOSTNAME: lowercase_hostname, + MAC_ADDRESS: data[MAC_ADDRESS], + }, ) ) diff --git a/homeassistant/components/roomba/config_flow.py b/homeassistant/components/roomba/config_flow.py index c7614de20ac..bfe84379d8a 100644 --- a/homeassistant/components/roomba/config_flow.py +++ b/homeassistant/components/roomba/config_flow.py @@ -80,7 +80,7 @@ class RoombaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): if self._async_host_already_configured(dhcp_discovery[IP_ADDRESS]): return self.async_abort(reason="already_configured") - if not dhcp_discovery[HOSTNAME].startswith(("iRobot-", "Roomba-")): + if not dhcp_discovery[HOSTNAME].startswith(("irobot-", "roomba-")): return self.async_abort(reason="not_irobot_device") blid = _async_blid_from_hostname(dhcp_discovery[HOSTNAME]) diff --git a/tests/components/dhcp/test_init.py b/tests/components/dhcp/test_init.py index f5cc5f1728d..de6743719c6 100644 --- a/tests/components/dhcp/test_init.py +++ b/tests/components/dhcp/test_init.py @@ -376,7 +376,7 @@ async def test_device_tracker_hostname_and_macaddress_exists_before_start(hass): "device_tracker.august_connect", STATE_HOME, { - ATTR_HOST_NAME: "connect", + ATTR_HOST_NAME: "Connect", ATTR_IP: "192.168.210.56", ATTR_SOURCE_TYPE: SOURCE_TYPE_ROUTER, ATTR_MAC: "B8:B7:F1:6D:B5:33", @@ -423,7 +423,7 @@ async def test_device_tracker_hostname_and_macaddress_after_start(hass): "device_tracker.august_connect", STATE_HOME, { - ATTR_HOST_NAME: "connect", + ATTR_HOST_NAME: "Connect", ATTR_IP: "192.168.210.56", ATTR_SOURCE_TYPE: SOURCE_TYPE_ROUTER, ATTR_MAC: "B8:B7:F1:6D:B5:33", diff --git a/tests/components/roomba/test_config_flow.py b/tests/components/roomba/test_config_flow.py index 9313220f2a8..2d9a5afd4f6 100644 --- a/tests/components/roomba/test_config_flow.py +++ b/tests/components/roomba/test_config_flow.py @@ -19,12 +19,12 @@ DHCP_DISCOVERY_DEVICES = [ { IP_ADDRESS: MOCK_IP, MAC_ADDRESS: "50:14:79:DD:EE:FF", - HOSTNAME: "iRobot-blid", + HOSTNAME: "irobot-blid", }, { IP_ADDRESS: MOCK_IP, MAC_ADDRESS: "80:A5:89:DD:EE:FF", - HOSTNAME: "Roomba-blid", + HOSTNAME: "roomba-blid", }, ] @@ -33,12 +33,12 @@ DHCP_DISCOVERY_DEVICES_WITHOUT_MATCHING_IP = [ { IP_ADDRESS: "1.1.1.1", MAC_ADDRESS: "50:14:79:DD:EE:FF", - HOSTNAME: "iRobot-blid", + HOSTNAME: "irobot-blid", }, { IP_ADDRESS: "1.1.1.1", MAC_ADDRESS: "80:A5:89:DD:EE:FF", - HOSTNAME: "Roomba-blid", + HOSTNAME: "roomba-blid", }, ] @@ -58,7 +58,7 @@ def _mocked_discovery(*_): roomba_discovery = MagicMock() roomba = RoombaInfo( - hostname="iRobot-blid", + hostname="irobot-blid", robot_name="robot_name", ip=MOCK_IP, mac="mac", @@ -751,7 +751,7 @@ async def test_dhcp_discovery_with_ignored(hass): data={ IP_ADDRESS: "1.1.1.1", MAC_ADDRESS: "AA:BB:CC:DD:EE:FF", - HOSTNAME: "iRobot-blid", + HOSTNAME: "irobot-blid", }, ) await hass.async_block_till_done() @@ -775,7 +775,7 @@ async def test_dhcp_discovery_already_configured_host(hass): data={ IP_ADDRESS: "1.1.1.1", MAC_ADDRESS: "AA:BB:CC:DD:EE:FF", - HOSTNAME: "iRobot-blid", + HOSTNAME: "irobot-blid", }, ) await hass.async_block_till_done() @@ -802,7 +802,7 @@ async def test_dhcp_discovery_already_configured_blid(hass): data={ IP_ADDRESS: "1.1.1.1", MAC_ADDRESS: "AA:BB:CC:DD:EE:FF", - HOSTNAME: "iRobot-blid", + HOSTNAME: "irobot-blid", }, ) await hass.async_block_till_done() @@ -829,7 +829,7 @@ async def test_dhcp_discovery_not_irobot(hass): data={ IP_ADDRESS: "1.1.1.1", MAC_ADDRESS: "AA:BB:CC:DD:EE:FF", - HOSTNAME: "NotiRobot-blid", + HOSTNAME: "Notirobot-blid", }, ) await hass.async_block_till_done()