From de2588f6e0a645bf62ac24b38f3100a3f570c0ec Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 10 Jan 2023 19:17:14 +0100 Subject: [PATCH] Add diagnostics platform to SFR Box (#85500) --- .../components/sfr_box/diagnostics.py | 34 +++++++++ tests/components/sfr_box/test_diagnostics.py | 69 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 homeassistant/components/sfr_box/diagnostics.py create mode 100644 tests/components/sfr_box/test_diagnostics.py diff --git a/homeassistant/components/sfr_box/diagnostics.py b/homeassistant/components/sfr_box/diagnostics.py new file mode 100644 index 00000000000..6a7ceb0e86b --- /dev/null +++ b/homeassistant/components/sfr_box/diagnostics.py @@ -0,0 +1,34 @@ +"""SFR Box diagnostics platform.""" +from __future__ import annotations + +import dataclasses +from typing import Any + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant + +from .const import DOMAIN +from .models import DomainData + +TO_REDACT = {"mac_addr", "serial_number"} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, entry: ConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + data: DomainData = hass.data[DOMAIN][entry.entry_id] + + return { + "entry": { + "title": entry.title, + "data": dict(entry.data), + }, + "data": { + "dsl": async_redact_data(dataclasses.asdict(data.dsl.data), TO_REDACT), + "system": async_redact_data( + dataclasses.asdict(data.system.data), TO_REDACT + ), + }, + } diff --git a/tests/components/sfr_box/test_diagnostics.py b/tests/components/sfr_box/test_diagnostics.py new file mode 100644 index 00000000000..08b65ac9315 --- /dev/null +++ b/tests/components/sfr_box/test_diagnostics.py @@ -0,0 +1,69 @@ +"""Test the SFR Box diagnostics.""" +from collections.abc import Generator +from unittest.mock import patch + +import pytest + +from homeassistant.components.diagnostics import REDACTED +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant + +from tests.components.diagnostics import get_diagnostics_for_config_entry + +pytestmark = pytest.mark.usefixtures("system_get_info", "dsl_get_info") + + +@pytest.fixture(autouse=True) +def override_platforms() -> Generator[None, None, None]: + """Override PLATFORMS.""" + with patch("homeassistant.components.sfr_box.PLATFORMS", []): + yield + + +async def test_entry_diagnostics( + hass: HomeAssistant, config_entry: ConfigEntry, hass_client +) -> None: + """Test config entry diagnostics.""" + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + assert await get_diagnostics_for_config_entry(hass, hass_client, config_entry) == { + "entry": { + "data": {"host": "192.168.0.1"}, + "title": "Mock Title", + }, + "data": { + "dsl": { + "attenuation_down": 28.5, + "attenuation_up": 20.8, + "counter": 16, + "crc": 0, + "line_status": "No Defect", + "linemode": "ADSL2+", + "noise_down": 5.8, + "noise_up": 6.0, + "rate_down": 5549, + "rate_up": 187, + "status": "up", + "training": "Showtime", + "uptime": 450796, + }, + "system": { + "alimvoltage": 12251, + "current_datetime": "202212282233", + "idur": "RP3P85K", + "mac_addr": REDACTED, + "net_infra": "adsl", + "net_mode": "router", + "product_id": "NB6VAC-FXC-r0", + "refclient": "", + "serial_number": REDACTED, + "temperature": 27560, + "uptime": 2353575, + "version_bootloader": "NB6VAC-BOOTLOADER-R4.0.8", + "version_dsldriver": "NB6VAC-XDSL-A2pv6F039p", + "version_mainfirmware": "NB6VAC-MAIN-R4.0.44k", + "version_rescuefirmware": "NB6VAC-MAIN-R4.0.44k", + }, + }, + }