Do not add entities with invalid device info (#98150)

This commit is contained in:
Erik Montnemery 2023-08-11 13:14:47 +02:00 committed by GitHub
parent a2cf08a1ea
commit 97f3199d6d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 13 deletions

View file

@ -618,8 +618,13 @@ class EntityPlatform:
**device_info, **device_info,
) )
except dev_reg.DeviceInfoError as exc: except dev_reg.DeviceInfoError as exc:
self.logger.error("Ignoring invalid device info: %s", str(exc)) self.logger.error(
device = None "%s: Not adding entity with invalid device info: %s",
self.platform_name,
str(exc),
)
entity.add_to_platform_abort()
return
else: else:
device = None device = None

View file

@ -1853,23 +1853,27 @@ async def test_device_name_defaulting_config_entry(
@pytest.mark.parametrize( @pytest.mark.parametrize(
("device_info"), ("device_info", "number_of_entities"),
[ [
# No identifiers # No identifiers
{}, ({}, 1), # Empty device info does not prevent the entity from being created
{"name": "bla"}, ({"name": "bla"}, 0),
{"default_name": "bla"}, ({"default_name": "bla"}, 0),
# Match multiple types # Match multiple types
{ (
"identifiers": {("hue", "1234")}, {
"name": "bla", "identifiers": {("hue", "1234")},
"default_name": "yo", "name": "bla",
}, "default_name": "yo",
},
0,
),
], ],
) )
async def test_device_type_error_checking( async def test_device_type_error_checking(
hass: HomeAssistant, hass: HomeAssistant,
device_info: dict, device_info: dict,
number_of_entities: int,
) -> None: ) -> None:
"""Test catching invalid device info.""" """Test catching invalid device info."""
@ -1895,6 +1899,6 @@ async def test_device_type_error_checking(
dev_reg = dr.async_get(hass) dev_reg = dr.async_get(hass)
assert len(dev_reg.devices) == 0 assert len(dev_reg.devices) == 0
# Entity should still be registered
ent_reg = er.async_get(hass) ent_reg = er.async_get(hass)
assert ent_reg.async_get("test_domain.test_qwer") is not None assert len(ent_reg.entities) == number_of_entities
assert len(hass.states.async_all()) == number_of_entities