Change AsusWRT entities unique id (#97066)

Migrate AsusWRT entities unique id
This commit is contained in:
ollo69 2023-07-24 19:53:58 +02:00 committed by GitHub
parent 17e757af36
commit 345df715d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 55 deletions

View file

@ -9,9 +9,13 @@ from homeassistant.components import device_tracker, sensor
from homeassistant.components.asuswrt.const import (
CONF_INTERFACE,
DOMAIN,
MODE_ROUTER,
PROTOCOL_TELNET,
SENSORS_BYTES,
SENSORS_LOAD_AVG,
SENSORS_RATES,
SENSORS_TEMPERATURES,
)
from homeassistant.components.asuswrt.router import DEFAULT_NAME
from homeassistant.components.device_tracker import CONF_CONSIDER_HOME
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import (
@ -43,7 +47,7 @@ CONFIG_DATA = {
CONF_PROTOCOL: PROTOCOL_TELNET,
CONF_USERNAME: "user",
CONF_PASSWORD: "pwd",
CONF_MODE: "router",
CONF_MODE: MODE_ROUTER,
}
MAC_ADDR = "a1:b2:c3:d4:e5:f6"
@ -57,26 +61,8 @@ MOCK_MAC_2 = "A2:B2:C2:D2:E2:F2"
MOCK_MAC_3 = "A3:B3:C3:D3:E3:F3"
MOCK_MAC_4 = "A4:B4:C4:D4:E4:F4"
SENSORS_DEFAULT = [
"Download Speed",
"Download",
"Upload Speed",
"Upload",
]
SENSORS_LOADAVG = [
"Load Avg (1m)",
"Load Avg (5m)",
"Load Avg (15m)",
]
SENSORS_TEMP = [
"2.4GHz Temperature",
"5GHz Temperature",
"CPU Temperature",
]
SENSORS_ALL = [*SENSORS_DEFAULT, *SENSORS_LOADAVG, *SENSORS_TEMP]
SENSORS_DEFAULT = [*SENSORS_BYTES, *SENSORS_RATES]
SENSORS_ALL = [*SENSORS_DEFAULT, *SENSORS_LOAD_AVG, *SENSORS_TEMPERATURES]
PATCH_SETUP_ENTRY = patch(
"homeassistant.components.asuswrt.async_setup_entry",
@ -105,7 +91,7 @@ def mock_available_temps_fixture():
@pytest.fixture(name="create_device_registry_devices")
def create_device_registry_devices_fixture(hass):
def create_device_registry_devices_fixture(hass: HomeAssistant):
"""Create device registry devices so the device tracker entities are enabled when added."""
dev_reg = dr.async_get(hass)
config_entry = MockConfigEntry(domain="something_else")
@ -182,7 +168,7 @@ def mock_controller_connect_sens_fail():
yield service_mock
def _setup_entry(hass, config, sensors, unique_id=None):
def _setup_entry(hass: HomeAssistant, config, sensors, unique_id=None):
"""Create mock config entry with enabled sensors."""
entity_reg = er.async_get(hass)
@ -195,16 +181,17 @@ def _setup_entry(hass, config, sensors, unique_id=None):
)
# init variable
obj_prefix = slugify(HOST if unique_id else DEFAULT_NAME)
obj_prefix = slugify(HOST)
sensor_prefix = f"{sensor.DOMAIN}.{obj_prefix}"
unique_id_prefix = slugify(unique_id or config_entry.entry_id)
# Pre-enable the status sensor
for sensor_name in sensors:
sensor_id = slugify(sensor_name)
for sensor_key in sensors:
sensor_id = slugify(sensor_key)
entity_reg.async_get_or_create(
sensor.DOMAIN,
DOMAIN,
f"{DOMAIN} {unique_id or DEFAULT_NAME} {sensor_name}",
f"{unique_id_prefix}_{sensor_id}",
suggested_object_id=f"{obj_prefix}_{sensor_id}",
config_entry=config_entry,
disabled_by=None,
@ -255,10 +242,10 @@ async def test_sensors(
assert hass.states.get(f"{device_tracker.DOMAIN}.test").state == STATE_HOME
assert hass.states.get(f"{device_tracker.DOMAIN}.testtwo").state == STATE_HOME
assert hass.states.get(f"{sensor_prefix}_download_speed").state == "160.0"
assert hass.states.get(f"{sensor_prefix}_download").state == "60.0"
assert hass.states.get(f"{sensor_prefix}_upload_speed").state == "80.0"
assert hass.states.get(f"{sensor_prefix}_upload").state == "50.0"
assert hass.states.get(f"{sensor_prefix}_sensor_rx_rates").state == "160.0"
assert hass.states.get(f"{sensor_prefix}_sensor_rx_bytes").state == "60.0"
assert hass.states.get(f"{sensor_prefix}_sensor_tx_rates").state == "80.0"
assert hass.states.get(f"{sensor_prefix}_sensor_tx_bytes").state == "50.0"
assert hass.states.get(f"{sensor_prefix}_devices_connected").state == "2"
# remove first tracked device
@ -296,7 +283,7 @@ async def test_loadavg_sensors(
connect,
) -> None:
"""Test creating an AsusWRT load average sensors."""
config_entry, sensor_prefix = _setup_entry(hass, CONFIG_DATA, SENSORS_LOADAVG)
config_entry, sensor_prefix = _setup_entry(hass, CONFIG_DATA, SENSORS_LOAD_AVG)
config_entry.add_to_hass(hass)
# initial devices setup
@ -306,9 +293,9 @@ async def test_loadavg_sensors(
await hass.async_block_till_done()
# assert temperature sensor available
assert hass.states.get(f"{sensor_prefix}_load_avg_1m").state == "1.1"
assert hass.states.get(f"{sensor_prefix}_load_avg_5m").state == "1.2"
assert hass.states.get(f"{sensor_prefix}_load_avg_15m").state == "1.3"
assert hass.states.get(f"{sensor_prefix}_sensor_load_avg1").state == "1.1"
assert hass.states.get(f"{sensor_prefix}_sensor_load_avg5").state == "1.2"
assert hass.states.get(f"{sensor_prefix}_sensor_load_avg15").state == "1.3"
async def test_temperature_sensors(
@ -316,7 +303,7 @@ async def test_temperature_sensors(
connect,
) -> None:
"""Test creating a AsusWRT temperature sensors."""
config_entry, sensor_prefix = _setup_entry(hass, CONFIG_DATA, SENSORS_TEMP)
config_entry, sensor_prefix = _setup_entry(hass, CONFIG_DATA, SENSORS_TEMPERATURES)
config_entry.add_to_hass(hass)
# initial devices setup
@ -326,9 +313,9 @@ async def test_temperature_sensors(
await hass.async_block_till_done()
# assert temperature sensor available
assert hass.states.get(f"{sensor_prefix}_2_4ghz_temperature").state == "40.0"
assert not hass.states.get(f"{sensor_prefix}_5ghz_temperature")
assert hass.states.get(f"{sensor_prefix}_cpu_temperature").state == "71.2"
assert hass.states.get(f"{sensor_prefix}_2_4ghz").state == "40.0"
assert not hass.states.get(f"{sensor_prefix}_5_0ghz")
assert hass.states.get(f"{sensor_prefix}_cpu").state == "71.2"
@pytest.mark.parametrize(
@ -396,3 +383,31 @@ async def test_options_reload(hass: HomeAssistant, connect) -> None:
assert setup_entry_call.called
assert config_entry.state is ConfigEntryState.LOADED
async def test_unique_id_migration(hass: HomeAssistant, connect) -> None:
"""Test AsusWRT entities unique id format migration."""
config_entry = MockConfigEntry(
domain=DOMAIN,
data=CONFIG_DATA,
unique_id=MAC_ADDR,
)
config_entry.add_to_hass(hass)
entity_reg = er.async_get(hass)
obj_entity_id = slugify(f"{HOST} Upload")
entity_reg.async_get_or_create(
sensor.DOMAIN,
DOMAIN,
f"{DOMAIN} {MAC_ADDR} Upload",
suggested_object_id=obj_entity_id,
config_entry=config_entry,
disabled_by=None,
)
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
migr_entity = entity_reg.async_get(f"{sensor.DOMAIN}.{obj_entity_id}")
assert migr_entity is not None
assert migr_entity.unique_id == slugify(f"{MAC_ADDR}_sensor_tx_bytes")