From 753a3c0921d50d7778d9bb184fe4e957e3dbf412 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Tue, 9 Aug 2022 17:45:48 +0200 Subject: [PATCH] Add new sensors to NextDNS integration (#76262) * Add DNS-over-HTTP/3 sensors * Update tests --- homeassistant/components/nextdns/sensor.py | 22 ++++++++++ tests/components/nextdns/__init__.py | 1 + tests/components/nextdns/test_diagnostics.py | 12 +++--- tests/components/nextdns/test_sensor.py | 42 ++++++++++++++++++-- 4 files changed, 67 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/nextdns/sensor.py b/homeassistant/components/nextdns/sensor.py index 422bc2a237b..62cd671835b 100644 --- a/homeassistant/components/nextdns/sensor.py +++ b/homeassistant/components/nextdns/sensor.py @@ -107,6 +107,17 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( state_class=SensorStateClass.TOTAL, value=lambda data: data.doh_queries, ), + NextDnsSensorEntityDescription[AnalyticsProtocols]( + key="doh3_queries", + coordinator_type=ATTR_PROTOCOLS, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + icon="mdi:dns", + name="DNS-over-HTTP/3 queries", + native_unit_of_measurement="queries", + state_class=SensorStateClass.TOTAL, + value=lambda data: data.doh3_queries, + ), NextDnsSensorEntityDescription[AnalyticsProtocols]( key="dot_queries", coordinator_type=ATTR_PROTOCOLS, @@ -162,6 +173,17 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( state_class=SensorStateClass.MEASUREMENT, value=lambda data: data.doh_queries_ratio, ), + NextDnsSensorEntityDescription[AnalyticsProtocols]( + key="doh3_queries_ratio", + coordinator_type=ATTR_PROTOCOLS, + entity_registry_enabled_default=False, + icon="mdi:dns", + entity_category=EntityCategory.DIAGNOSTIC, + name="DNS-over-HTTP/3 queries ratio", + native_unit_of_measurement=PERCENTAGE, + state_class=SensorStateClass.MEASUREMENT, + value=lambda data: data.doh3_queries_ratio, + ), NextDnsSensorEntityDescription[AnalyticsProtocols]( key="dot_queries_ratio", coordinator_type=ATTR_PROTOCOLS, diff --git a/tests/components/nextdns/__init__.py b/tests/components/nextdns/__init__.py index 32b8bed76fa..04d838f8f58 100644 --- a/tests/components/nextdns/__init__.py +++ b/tests/components/nextdns/__init__.py @@ -25,6 +25,7 @@ ENCRYPTION = AnalyticsEncryption(encrypted_queries=60, unencrypted_queries=40) IP_VERSIONS = AnalyticsIpVersions(ipv4_queries=90, ipv6_queries=10) PROTOCOLS = AnalyticsProtocols( doh_queries=20, + doh3_queries=15, doq_queries=10, dot_queries=30, tcp_queries=0, diff --git a/tests/components/nextdns/test_diagnostics.py b/tests/components/nextdns/test_diagnostics.py index ec4ffa10aaf..21c030274cc 100644 --- a/tests/components/nextdns/test_diagnostics.py +++ b/tests/components/nextdns/test_diagnostics.py @@ -52,17 +52,17 @@ async def test_entry_diagnostics( } assert result["protocols_coordinator_data"] == { "doh_queries": 20, - "doh3_queries": 0, + "doh3_queries": 15, "doq_queries": 10, "dot_queries": 30, "tcp_queries": 0, "udp_queries": 40, - "doh_queries_ratio": 20.0, - "doh3_queries_ratio": 0.0, - "doq_queries_ratio": 10.0, - "dot_queries_ratio": 30.0, + "doh_queries_ratio": 17.4, + "doh3_queries_ratio": 13.0, + "doq_queries_ratio": 8.7, + "dot_queries_ratio": 26.1, "tcp_queries_ratio": 0.0, - "udp_queries_ratio": 40.0, + "udp_queries_ratio": 34.8, } assert result["settings_coordinator_data"] == settings assert result["status_coordinator_data"] == { diff --git a/tests/components/nextdns/test_sensor.py b/tests/components/nextdns/test_sensor.py index a90999a592b..c3c7577bd83 100644 --- a/tests/components/nextdns/test_sensor.py +++ b/tests/components/nextdns/test_sensor.py @@ -31,6 +31,13 @@ async def test_sensor(hass: HomeAssistant) -> None: suggested_object_id="fake_profile_dns_over_https_queries", disabled_by=None, ) + registry.async_get_or_create( + SENSOR_DOMAIN, + DOMAIN, + "xyz12_doh3_queries", + suggested_object_id="fake_profile_dns_over_http_3_queries", + disabled_by=None, + ) registry.async_get_or_create( SENSOR_DOMAIN, DOMAIN, @@ -38,6 +45,13 @@ async def test_sensor(hass: HomeAssistant) -> None: suggested_object_id="fake_profile_dns_over_https_queries_ratio", disabled_by=None, ) + registry.async_get_or_create( + SENSOR_DOMAIN, + DOMAIN, + "xyz12_doh3_queries_ratio", + suggested_object_id="fake_profile_dns_over_http_3_queries_ratio", + disabled_by=None, + ) registry.async_get_or_create( SENSOR_DOMAIN, DOMAIN, @@ -212,7 +226,7 @@ async def test_sensor(hass: HomeAssistant) -> None: state = hass.states.get("sensor.fake_profile_dns_over_https_queries_ratio") assert state - assert state.state == "20.0" + assert state.state == "17.4" assert state.attributes.get(ATTR_STATE_CLASS) is SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE @@ -220,6 +234,26 @@ async def test_sensor(hass: HomeAssistant) -> None: assert entry assert entry.unique_id == "xyz12_doh_queries_ratio" + state = hass.states.get("sensor.fake_profile_dns_over_http_3_queries") + assert state + assert state.state == "15" + assert state.attributes.get(ATTR_STATE_CLASS) is SensorStateClass.TOTAL + assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "queries" + + entry = registry.async_get("sensor.fake_profile_dns_over_http_3_queries") + assert entry + assert entry.unique_id == "xyz12_doh3_queries" + + state = hass.states.get("sensor.fake_profile_dns_over_http_3_queries_ratio") + assert state + assert state.state == "13.0" + assert state.attributes.get(ATTR_STATE_CLASS) is SensorStateClass.MEASUREMENT + assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE + + entry = registry.async_get("sensor.fake_profile_dns_over_http_3_queries_ratio") + assert entry + assert entry.unique_id == "xyz12_doh3_queries_ratio" + state = hass.states.get("sensor.fake_profile_dns_over_quic_queries") assert state assert state.state == "10" @@ -232,7 +266,7 @@ async def test_sensor(hass: HomeAssistant) -> None: state = hass.states.get("sensor.fake_profile_dns_over_quic_queries_ratio") assert state - assert state.state == "10.0" + assert state.state == "8.7" assert state.attributes.get(ATTR_STATE_CLASS) is SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE @@ -252,7 +286,7 @@ async def test_sensor(hass: HomeAssistant) -> None: state = hass.states.get("sensor.fake_profile_dns_over_tls_queries_ratio") assert state - assert state.state == "30.0" + assert state.state == "26.1" assert state.attributes.get(ATTR_STATE_CLASS) is SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE @@ -382,7 +416,7 @@ async def test_sensor(hass: HomeAssistant) -> None: state = hass.states.get("sensor.fake_profile_udp_queries_ratio") assert state - assert state.state == "40.0" + assert state.state == "34.8" assert state.attributes.get(ATTR_STATE_CLASS) is SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE