mirror of
https://github.com/home-assistant/core.git
synced 2025-04-27 18:57:57 +00:00
Add diagnostics to Vodafone Station (#128923)
* Add diagnostics to Vodafone Station * cleanup and exclude props based on date
This commit is contained in:
parent
8e5abcf5c2
commit
e7a7a18c43
47
homeassistant/components/vodafone_station/diagnostics.py
Normal file
47
homeassistant/components/vodafone_station/diagnostics.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
"""Diagnostics support for Vodafone Station."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from homeassistant.components.diagnostics import async_redact_data
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from .const import DOMAIN
|
||||||
|
from .coordinator import VodafoneStationRouter
|
||||||
|
|
||||||
|
TO_REDACT = {CONF_USERNAME, CONF_PASSWORD}
|
||||||
|
|
||||||
|
|
||||||
|
async def async_get_config_entry_diagnostics(
|
||||||
|
hass: HomeAssistant, entry: ConfigEntry
|
||||||
|
) -> dict[str, Any]:
|
||||||
|
"""Return diagnostics for a config entry."""
|
||||||
|
|
||||||
|
coordinator: VodafoneStationRouter = hass.data[DOMAIN][entry.entry_id]
|
||||||
|
|
||||||
|
sensors_data = coordinator.data.sensors
|
||||||
|
return {
|
||||||
|
"entry": async_redact_data(entry.as_dict(), TO_REDACT),
|
||||||
|
"device_info": {
|
||||||
|
"sys_model_name": sensors_data.get("sys_model_name"),
|
||||||
|
"sys_firmware_version": sensors_data["sys_firmware_version"],
|
||||||
|
"sys_hardware_version": sensors_data["sys_hardware_version"],
|
||||||
|
"sys_cpu_usage": sensors_data["sys_cpu_usage"][:-1],
|
||||||
|
"sys_memory_usage": sensors_data["sys_memory_usage"][:-1],
|
||||||
|
"sys_reboot_cause": sensors_data["sys_reboot_cause"],
|
||||||
|
"last_update success": coordinator.last_update_success,
|
||||||
|
"last_exception": coordinator.last_exception,
|
||||||
|
"client_devices": [
|
||||||
|
{
|
||||||
|
"hostname": device_info.device.name,
|
||||||
|
"connection_type": device_info.device.connection_type,
|
||||||
|
"connected": device_info.device.connected,
|
||||||
|
"type": device_info.device.type,
|
||||||
|
}
|
||||||
|
for _, device_info in coordinator.data.devices.items()
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
@ -1,5 +1,7 @@
|
|||||||
"""Common stuff for Vodafone Station tests."""
|
"""Common stuff for Vodafone Station tests."""
|
||||||
|
|
||||||
|
from aiovodafone.api import VodafoneStationDevice
|
||||||
|
|
||||||
from homeassistant.components.vodafone_station.const import DOMAIN
|
from homeassistant.components.vodafone_station.const import DOMAIN
|
||||||
from homeassistant.const import CONF_DEVICES, CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import CONF_DEVICES, CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
||||||
|
|
||||||
@ -16,3 +18,98 @@ MOCK_CONFIG = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MOCK_USER_DATA = MOCK_CONFIG[DOMAIN][CONF_DEVICES][0]
|
MOCK_USER_DATA = MOCK_CONFIG[DOMAIN][CONF_DEVICES][0]
|
||||||
|
|
||||||
|
|
||||||
|
DEVICE_DATA_QUERY = {
|
||||||
|
"xx:xx:xx:xx:xx:xx": VodafoneStationDevice(
|
||||||
|
connected=True,
|
||||||
|
connection_type="wifi",
|
||||||
|
ip_address="192.168.1.10",
|
||||||
|
name="WifiDevice0",
|
||||||
|
mac="xx:xx:xx:xx:xx:xx",
|
||||||
|
type="laptop",
|
||||||
|
wifi="2.4G",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
SENSOR_DATA_QUERY = {
|
||||||
|
"sys_serial_number": "M123456789",
|
||||||
|
"sys_firmware_version": "XF6_4.0.05.04",
|
||||||
|
"sys_bootloader_version": "0220",
|
||||||
|
"sys_hardware_version": "RHG3006 v1",
|
||||||
|
"omci_software_version": "\t\t1.0.0.1_41032\t\t\n",
|
||||||
|
"sys_uptime": "12:16:41",
|
||||||
|
"sys_cpu_usage": "97%",
|
||||||
|
"sys_reboot_cause": "Web Reboot",
|
||||||
|
"sys_memory_usage": "51.94%",
|
||||||
|
"sys_wireless_driver_version": "17.10.188.75;17.10.188.75",
|
||||||
|
"sys_wireless_driver_version_5g": "17.10.188.75;17.10.188.75",
|
||||||
|
"vf_internet_key_online_since": "",
|
||||||
|
"vf_internet_key_ip_addr": "0.0.0.0",
|
||||||
|
"vf_internet_key_system": "0.0.0.0",
|
||||||
|
"vf_internet_key_mode": "Auto",
|
||||||
|
"sys_voip_version": "v02.01.00_01.13a\n",
|
||||||
|
"sys_date_time": "20.10.2024 | 03:44 pm",
|
||||||
|
"sys_build_time": "Sun Jun 23 17:55:49 CST 2024\n",
|
||||||
|
"sys_model_name": "RHG3006",
|
||||||
|
"inter_ip_address": "1.1.1.1",
|
||||||
|
"inter_gateway": "1.1.1.2",
|
||||||
|
"inter_primary_dns": "1.1.1.3",
|
||||||
|
"inter_secondary_dns": "1.1.1.4",
|
||||||
|
"inter_firewall": "601036",
|
||||||
|
"inter_wan_ip_address": "1.1.1.1",
|
||||||
|
"inter_ipv6_link_local_address": "",
|
||||||
|
"inter_ipv6_link_global_address": "",
|
||||||
|
"inter_ipv6_gateway": "",
|
||||||
|
"inter_ipv6_prefix_delegation": "",
|
||||||
|
"inter_ipv6_dns_address1": "",
|
||||||
|
"inter_ipv6_dns_address2": "",
|
||||||
|
"lan_ip_network": "192.168.0.1/24",
|
||||||
|
"lan_default_gateway": "192.168.0.1",
|
||||||
|
"lan_subnet_address_subnet1": "",
|
||||||
|
"lan_mac_address": "11:22:33:44:55:66",
|
||||||
|
"lan_dhcp_server": "601036",
|
||||||
|
"lan_dhcpv6_server": "601036",
|
||||||
|
"lan_router_advertisement": "601036",
|
||||||
|
"lan_ipv6_default_gateway": "fe80::1",
|
||||||
|
"lan_port1_switch_mode": "1301722",
|
||||||
|
"lan_port2_switch_mode": "1301722",
|
||||||
|
"lan_port3_switch_mode": "1301722",
|
||||||
|
"lan_port4_switch_mode": "1301722",
|
||||||
|
"lan_port1_switch_speed": "10",
|
||||||
|
"lan_port2_switch_speed": "100",
|
||||||
|
"lan_port3_switch_speed": "1000",
|
||||||
|
"lan_port4_switch_speed": "1000",
|
||||||
|
"lan_port1_switch_status": "1301724",
|
||||||
|
"lan_port2_switch_status": "1301724",
|
||||||
|
"lan_port3_switch_status": "1301724",
|
||||||
|
"lan_port4_switch_status": "1301724",
|
||||||
|
"wifi_status": "601036",
|
||||||
|
"wifi_name": "Wifi-Main-Network",
|
||||||
|
"wifi_mac_address": "AA:BB:CC:DD:EE:FF",
|
||||||
|
"wifi_security": "401027",
|
||||||
|
"wifi_channel": "8",
|
||||||
|
"wifi_bandwidth": "573",
|
||||||
|
"guest_wifi_status": "601037",
|
||||||
|
"guest_wifi_name": "Wifi-Guest",
|
||||||
|
"guest_wifi_mac_addr": "AA:BB:CC:DD:EE:GG",
|
||||||
|
"guest_wifi_security": "401027",
|
||||||
|
"guest_wifi_channel": "N/A",
|
||||||
|
"guest_wifi_ip": "192.168.2.1",
|
||||||
|
"guest_wifi_subnet_addr": "255.255.255.0",
|
||||||
|
"guest_wifi_dhcp_server": "192.168.2.1",
|
||||||
|
"wifi_status_5g": "601036",
|
||||||
|
"wifi_name_5g": "Wifi-Main-Network",
|
||||||
|
"wifi_mac_address_5g": "AA:BB:CC:DD:EE:HH",
|
||||||
|
"wifi_security_5g": "401027",
|
||||||
|
"wifi_channel_5g": "36",
|
||||||
|
"wifi_bandwidth_5g": "4803",
|
||||||
|
"guest_wifi_status_5g": "601037",
|
||||||
|
"guest_wifi_name_5g": "Wifi-Guest",
|
||||||
|
"guest_wifi_mac_addr_5g": "AA:BB:CC:DD:EE:II",
|
||||||
|
"guest_wifi_channel_5g": "N/A",
|
||||||
|
"guest_wifi_security_5g": "401027",
|
||||||
|
"guest_wifi_ip_5g": "192.168.2.1",
|
||||||
|
"guest_wifi_subnet_addr_5g": "255.255.255.0",
|
||||||
|
"guest_wifi_dhcp_server_5g": "192.168.2.1",
|
||||||
|
}
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
# serializer version: 1
|
||||||
|
# name: test_entry_diagnostics
|
||||||
|
dict({
|
||||||
|
'device_info': dict({
|
||||||
|
'client_devices': list([
|
||||||
|
dict({
|
||||||
|
'connected': True,
|
||||||
|
'connection_type': 'wifi',
|
||||||
|
'hostname': 'WifiDevice0',
|
||||||
|
'type': 'laptop',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'last_exception': None,
|
||||||
|
'last_update success': True,
|
||||||
|
'sys_cpu_usage': '97',
|
||||||
|
'sys_firmware_version': 'XF6_4.0.05.04',
|
||||||
|
'sys_hardware_version': 'RHG3006 v1',
|
||||||
|
'sys_memory_usage': '51.94',
|
||||||
|
'sys_model_name': 'RHG3006',
|
||||||
|
'sys_reboot_cause': 'Web Reboot',
|
||||||
|
}),
|
||||||
|
'entry': dict({
|
||||||
|
'data': dict({
|
||||||
|
'host': 'fake_host',
|
||||||
|
'password': '**REDACTED**',
|
||||||
|
'username': '**REDACTED**',
|
||||||
|
}),
|
||||||
|
'disabled_by': None,
|
||||||
|
'discovery_keys': dict({
|
||||||
|
}),
|
||||||
|
'domain': 'vodafone_station',
|
||||||
|
'minor_version': 1,
|
||||||
|
'options': dict({
|
||||||
|
}),
|
||||||
|
'pref_disable_new_entities': False,
|
||||||
|
'pref_disable_polling': False,
|
||||||
|
'source': 'user',
|
||||||
|
'title': 'Mock Title',
|
||||||
|
'unique_id': None,
|
||||||
|
'version': 1,
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
# ---
|
51
tests/components/vodafone_station/test_diagnostics.py
Normal file
51
tests/components/vodafone_station/test_diagnostics.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
"""Tests for Vodafone Station diagnostics platform."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from syrupy import SnapshotAssertion
|
||||||
|
from syrupy.filters import props
|
||||||
|
|
||||||
|
from homeassistant.components.vodafone_station.const import DOMAIN
|
||||||
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from .const import DEVICE_DATA_QUERY, MOCK_USER_DATA, SENSOR_DATA_QUERY
|
||||||
|
|
||||||
|
from tests.common import MockConfigEntry
|
||||||
|
from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||||
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
|
|
||||||
|
async def test_entry_diagnostics(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
hass_client: ClientSessionGenerator,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
) -> None:
|
||||||
|
"""Test config entry diagnostics."""
|
||||||
|
entry = MockConfigEntry(domain=DOMAIN, data=MOCK_USER_DATA)
|
||||||
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
with (
|
||||||
|
patch("aiovodafone.api.VodafoneStationSercommApi.login"),
|
||||||
|
patch(
|
||||||
|
"aiovodafone.api.VodafoneStationSercommApi.get_devices_data",
|
||||||
|
return_value=DEVICE_DATA_QUERY,
|
||||||
|
),
|
||||||
|
patch(
|
||||||
|
"aiovodafone.api.VodafoneStationSercommApi.get_sensor_data",
|
||||||
|
return_value=SENSOR_DATA_QUERY,
|
||||||
|
),
|
||||||
|
):
|
||||||
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert entry.state == ConfigEntryState.LOADED
|
||||||
|
assert await get_diagnostics_for_config_entry(hass, hass_client, entry) == snapshot(
|
||||||
|
exclude=props(
|
||||||
|
"entry_id",
|
||||||
|
"created_at",
|
||||||
|
"modified_at",
|
||||||
|
)
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user