mirror of
https://github.com/home-assistant/core.git
synced 2026-07-15 18:44:20 +01:00
18cd083f2c
Co-authored-by: J. Nick Koston <nick@koston.org> Co-authored-by: Erwin Douna <e.douna@gmail.com> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
147 lines
5.7 KiB
Python
147 lines
5.7 KiB
Python
"""Tests for UPnP/IGD sensor."""
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from async_upnp_client.profiles.igd import IgdDevice, IgdState
|
|
import pytest
|
|
|
|
from homeassistant.components.upnp.const import DEFAULT_SCAN_INTERVAL
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import entity_registry as er
|
|
from homeassistant.util import dt as dt_util
|
|
|
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
|
|
|
|
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
|
async def test_upnp_sensors(
|
|
hass: HomeAssistant, mock_config_entry: MockConfigEntry
|
|
) -> None:
|
|
"""Test sensors."""
|
|
# First poll.
|
|
assert hass.states.get("sensor.mock_name_data_received").state == "0"
|
|
assert hass.states.get("sensor.mock_name_data_sent").state == "0"
|
|
assert hass.states.get("sensor.mock_name_packets_received").state == "0"
|
|
assert hass.states.get("sensor.mock_name_packets_sent").state == "0"
|
|
assert hass.states.get("sensor.mock_name_external_ip").state == "8.9.10.11"
|
|
assert hass.states.get("sensor.mock_name_wan_status").state == "Connected"
|
|
assert hass.states.get("sensor.mock_name_download_speed").state == "unknown"
|
|
assert hass.states.get("sensor.mock_name_upload_speed").state == "unknown"
|
|
assert hass.states.get("sensor.mock_name_packet_download_speed").state == "unknown"
|
|
assert hass.states.get("sensor.mock_name_packet_upload_speed").state == "unknown"
|
|
assert (
|
|
hass.states.get("sensor.mock_name_download_speed_no_rollover_handling").state
|
|
== "unknown"
|
|
)
|
|
assert (
|
|
hass.states.get("sensor.mock_name_upload_speed_no_rollover_handling").state
|
|
== "unknown"
|
|
)
|
|
assert (
|
|
hass.states.get(
|
|
"sensor.mock_name_packet_download_speed_no_rollover_handling"
|
|
).state
|
|
== "unknown"
|
|
)
|
|
assert (
|
|
hass.states.get(
|
|
"sensor.mock_name_packet_upload_speed_no_rollover_handling"
|
|
).state
|
|
== "unknown"
|
|
)
|
|
|
|
# Second poll.
|
|
mock_igd_device: IgdDevice = mock_config_entry.igd_device
|
|
mock_igd_device.async_get_traffic_and_status_data.return_value = IgdState(
|
|
timestamp=datetime.now(), # pylint: disable=home-assistant-enforce-naive-now
|
|
bytes_received=10240,
|
|
bytes_sent=20480,
|
|
packets_received=30,
|
|
packets_sent=40,
|
|
connection_status="Disconnected",
|
|
last_connection_error="",
|
|
uptime=40,
|
|
external_ip_address="",
|
|
kibibytes_per_sec_received=10.0,
|
|
kibibytes_per_sec_sent=20.0,
|
|
packets_per_sec_received=30.0,
|
|
packets_per_sec_sent=40.0,
|
|
kibibytes_per_sec_received_no_rollover=10.0,
|
|
kibibytes_per_sec_sent_no_rollover=20.0,
|
|
packets_per_sec_received_no_rollover=30.0,
|
|
packets_per_sec_sent_no_rollover=40.0,
|
|
port_mapping_number_of_entries=0,
|
|
)
|
|
|
|
now = dt_util.utcnow()
|
|
async_fire_time_changed(hass, now + timedelta(seconds=DEFAULT_SCAN_INTERVAL))
|
|
await hass.async_block_till_done()
|
|
|
|
assert hass.states.get("sensor.mock_name_data_received").state == "10240"
|
|
assert hass.states.get("sensor.mock_name_data_sent").state == "20480"
|
|
assert hass.states.get("sensor.mock_name_packets_received").state == "30"
|
|
assert hass.states.get("sensor.mock_name_packets_sent").state == "40"
|
|
assert hass.states.get("sensor.mock_name_external_ip").state == ""
|
|
assert hass.states.get("sensor.mock_name_wan_status").state == "Disconnected"
|
|
assert hass.states.get("sensor.mock_name_download_speed").state == "10.0"
|
|
assert hass.states.get("sensor.mock_name_upload_speed").state == "20.0"
|
|
assert hass.states.get("sensor.mock_name_packet_download_speed").state == "30.0"
|
|
assert hass.states.get("sensor.mock_name_packet_upload_speed").state == "40.0"
|
|
assert (
|
|
hass.states.get("sensor.mock_name_download_speed_no_rollover_handling").state
|
|
== "10.0"
|
|
)
|
|
assert (
|
|
hass.states.get("sensor.mock_name_upload_speed_no_rollover_handling").state
|
|
== "20.0"
|
|
)
|
|
assert (
|
|
hass.states.get(
|
|
"sensor.mock_name_packet_download_speed_no_rollover_handling"
|
|
).state
|
|
== "30.0"
|
|
)
|
|
assert (
|
|
hass.states.get(
|
|
"sensor.mock_name_packet_upload_speed_no_rollover_handling"
|
|
).state
|
|
== "40.0"
|
|
)
|
|
|
|
|
|
async def test_upnp_sensors_no_rollover_disabled_by_default(
|
|
hass: HomeAssistant,
|
|
entity_registry: er.EntityRegistry,
|
|
mock_config_entry: MockConfigEntry,
|
|
) -> None:
|
|
"""Test no-rollover sensors are disabled by default and can be enabled."""
|
|
disabled_entity_id = "sensor.mock_name_download_speed_no_rollover_handling"
|
|
other_disabled_entity_ids = (
|
|
"sensor.mock_name_upload_speed_no_rollover_handling",
|
|
"sensor.mock_name_packet_download_speed_no_rollover_handling",
|
|
"sensor.mock_name_packet_upload_speed_no_rollover_handling",
|
|
)
|
|
|
|
assert hass.states.get(disabled_entity_id) is None
|
|
for entity_id in other_disabled_entity_ids:
|
|
assert hass.states.get(entity_id) is None
|
|
|
|
entry = entity_registry.async_get(disabled_entity_id)
|
|
assert entry
|
|
assert entry.disabled
|
|
assert entry.disabled_by is er.RegistryEntryDisabler.INTEGRATION
|
|
|
|
for entity_id in other_disabled_entity_ids:
|
|
entry = entity_registry.async_get(entity_id)
|
|
assert entry
|
|
assert entry.disabled
|
|
assert entry.disabled_by is er.RegistryEntryDisabler.INTEGRATION
|
|
|
|
entity_registry.async_update_entity(disabled_entity_id, disabled_by=None)
|
|
await hass.config_entries.async_reload(mock_config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
enabled_state = hass.states.get(disabled_entity_id)
|
|
assert enabled_state is not None
|
|
assert enabled_state.state == "unknown"
|