Change AsusWRT entities unique id (#97066)
Migrate AsusWRT entities unique id
This commit is contained in:
parent
17e757af36
commit
345df715d6
3 changed files with 105 additions and 55 deletions
|
@ -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")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue