From 96bd7143643a813689c86f6f7512008c187a4766 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 10 Mar 2023 16:09:04 +0100 Subject: [PATCH] Add FTTH and WAN info to SFR box diagnostics (#89492) * Add FTTH and WAN info to SFR box diagnostics * Adjust tests * Use snapshots --- .../components/sfr_box/diagnostics.py | 6 ++ tests/components/sfr_box/conftest.py | 46 ++++++++++---- .../sfr_box/fixtures/ftth_getInfo.json | 4 ++ .../sfr_box/fixtures/wan_getInfo.json | 11 ++++ .../sfr_box/snapshots/test_diagnostics.ambr | 60 +++++++++++++++++++ tests/components/sfr_box/test_diagnostics.py | 55 ++++------------- 6 files changed, 127 insertions(+), 55 deletions(-) create mode 100644 tests/components/sfr_box/fixtures/ftth_getInfo.json create mode 100644 tests/components/sfr_box/fixtures/wan_getInfo.json create mode 100644 tests/components/sfr_box/snapshots/test_diagnostics.ambr diff --git a/homeassistant/components/sfr_box/diagnostics.py b/homeassistant/components/sfr_box/diagnostics.py index 6a7ceb0e86b..60df2173968 100644 --- a/homeassistant/components/sfr_box/diagnostics.py +++ b/homeassistant/components/sfr_box/diagnostics.py @@ -27,8 +27,14 @@ async def async_get_config_entry_diagnostics( }, "data": { "dsl": async_redact_data(dataclasses.asdict(data.dsl.data), TO_REDACT), + "ftth": async_redact_data( + dataclasses.asdict(await data.system.box.ftth_get_info()), TO_REDACT + ), "system": async_redact_data( dataclasses.asdict(data.system.data), TO_REDACT ), + "wan": async_redact_data( + dataclasses.asdict(await data.system.box.wan_get_info()), TO_REDACT + ), }, } diff --git a/tests/components/sfr_box/conftest.py b/tests/components/sfr_box/conftest.py index 1857ffeec30..a8cd6fd8bd4 100644 --- a/tests/components/sfr_box/conftest.py +++ b/tests/components/sfr_box/conftest.py @@ -4,7 +4,7 @@ import json from unittest.mock import AsyncMock, patch import pytest -from sfrbox_api.models import DslInfo, SystemInfo +from sfrbox_api.models import DslInfo, FtthInfo, SystemInfo, WanInfo from homeassistant.components.sfr_box.const import DOMAIN from homeassistant.config_entries import SOURCE_USER, ConfigEntry @@ -57,17 +57,6 @@ def get_config_entry_with_auth(hass: HomeAssistant) -> ConfigEntry: return config_entry_with_auth -@pytest.fixture -def system_get_info() -> Generator[SystemInfo, None, None]: - """Fixture for SFRBox.system_get_info.""" - system_info = SystemInfo(**json.loads(load_fixture("system_getInfo.json", DOMAIN))) - with patch( - "homeassistant.components.sfr_box.coordinator.SFRBox.system_get_info", - return_value=system_info, - ): - yield system_info - - @pytest.fixture def dsl_get_info() -> Generator[DslInfo, None, None]: """Fixture for SFRBox.dsl_get_info.""" @@ -77,3 +66,36 @@ def dsl_get_info() -> Generator[DslInfo, None, None]: return_value=dsl_info, ): yield dsl_info + + +@pytest.fixture +def ftth_get_info() -> Generator[FtthInfo, None, None]: + """Fixture for SFRBox.ftth_get_info.""" + info = FtthInfo(**json.loads(load_fixture("ftth_getInfo.json", DOMAIN))) + with patch( + "homeassistant.components.sfr_box.coordinator.SFRBox.ftth_get_info", + return_value=info, + ): + yield info + + +@pytest.fixture +def system_get_info() -> Generator[SystemInfo, None, None]: + """Fixture for SFRBox.system_get_info.""" + info = SystemInfo(**json.loads(load_fixture("system_getInfo.json", DOMAIN))) + with patch( + "homeassistant.components.sfr_box.coordinator.SFRBox.system_get_info", + return_value=info, + ): + yield info + + +@pytest.fixture +def wan_get_info() -> Generator[WanInfo, None, None]: + """Fixture for SFRBox.wan_get_info.""" + info = WanInfo(**json.loads(load_fixture("wan_getInfo.json", DOMAIN))) + with patch( + "homeassistant.components.sfr_box.coordinator.SFRBox.wan_get_info", + return_value=info, + ): + yield info diff --git a/tests/components/sfr_box/fixtures/ftth_getInfo.json b/tests/components/sfr_box/fixtures/ftth_getInfo.json new file mode 100644 index 00000000000..32f720e9111 --- /dev/null +++ b/tests/components/sfr_box/fixtures/ftth_getInfo.json @@ -0,0 +1,4 @@ +{ + "status": "down", + "wanfibre": "out" +} diff --git a/tests/components/sfr_box/fixtures/wan_getInfo.json b/tests/components/sfr_box/fixtures/wan_getInfo.json new file mode 100644 index 00000000000..fdef6270f35 --- /dev/null +++ b/tests/components/sfr_box/fixtures/wan_getInfo.json @@ -0,0 +1,11 @@ +{ + "status": "up", + "uptime": 297464, + "ip_addr": "1.2.3.4", + "infra": "adsl", + "mode": "adsl/routed", + "infra6": "", + "status6": "down", + "uptime6": null, + "ipv6_addr": "" +} diff --git a/tests/components/sfr_box/snapshots/test_diagnostics.ambr b/tests/components/sfr_box/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..2e25259268d --- /dev/null +++ b/tests/components/sfr_box/snapshots/test_diagnostics.ambr @@ -0,0 +1,60 @@ +# serializer version: 1 +# name: test_entry_diagnostics + dict({ + 'data': dict({ + 'dsl': dict({ + '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, + }), + 'ftth': dict({ + 'status': 'down', + 'wanfibre': 'out', + }), + 'system': dict({ + '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', + }), + 'wan': dict({ + 'infra': 'adsl', + 'infra6': '', + 'ip_addr': '1.2.3.4', + 'ipv6_addr': '', + 'mode': 'adsl/routed', + 'status': 'up', + 'status6': 'down', + 'uptime': 297464, + 'uptime6': None, + }), + }), + 'entry': dict({ + 'data': dict({ + 'host': '192.168.0.1', + }), + 'title': 'Mock Title', + }), + }) +# --- diff --git a/tests/components/sfr_box/test_diagnostics.py b/tests/components/sfr_box/test_diagnostics.py index 966a038b489..37e3ba9487f 100644 --- a/tests/components/sfr_box/test_diagnostics.py +++ b/tests/components/sfr_box/test_diagnostics.py @@ -3,15 +3,17 @@ from collections.abc import Generator from unittest.mock import patch import pytest +from syrupy.assertion import SnapshotAssertion -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 from tests.typing import ClientSessionGenerator -pytestmark = pytest.mark.usefixtures("system_get_info", "dsl_get_info") +pytestmark = pytest.mark.usefixtures( + "dsl_get_info", "ftth_get_info", "system_get_info", "wan_get_info" +) @pytest.fixture(autouse=True) @@ -22,49 +24,16 @@ def override_platforms() -> Generator[None, None, None]: async def test_entry_diagnostics( - hass: HomeAssistant, config_entry: ConfigEntry, hass_client: ClientSessionGenerator + hass: HomeAssistant, + config_entry: ConfigEntry, + hass_client: ClientSessionGenerator, + snapshot: SnapshotAssertion, ) -> 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", - }, - }, - } + assert ( + await get_diagnostics_for_config_entry(hass, hass_client, config_entry) + == snapshot + )