Change zha diagnostic to snapshot (#123198)

This commit is contained in:
Joakim Plate 2024-08-05 19:02:07 +02:00 committed by GitHub
parent 537d7728a7
commit f51cc8fe12
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 275 additions and 42 deletions

View File

@ -0,0 +1,266 @@
# serializer version: 1
# name: test_diagnostics_for_config_entry
dict({
'application_state': dict({
'broadcast_counters': dict({
}),
'counters': dict({
'ezsp_counters': dict({
'counter_1': dict({
'__type': "<class 'zigpy.state.Counter'>",
'repr': "Counter(name='counter_1', _raw_value=1, reset_count=0, _last_reset_value=0)",
}),
'counter_2': dict({
'__type': "<class 'zigpy.state.Counter'>",
'repr': "Counter(name='counter_2', _raw_value=1, reset_count=0, _last_reset_value=0)",
}),
'counter_3': dict({
'__type': "<class 'zigpy.state.Counter'>",
'repr': "Counter(name='counter_3', _raw_value=1, reset_count=0, _last_reset_value=0)",
}),
}),
}),
'device_counters': dict({
}),
'group_counters': dict({
}),
'network_info': dict({
'channel': 15,
'channel_mask': 0,
'children': list([
]),
'extended_pan_id': '**REDACTED**',
'key_table': list([
]),
'metadata': dict({
}),
'network_key': '**REDACTED**',
'nwk_addresses': dict({
}),
'nwk_manager_id': 0,
'nwk_update_id': 0,
'pan_id': 4660,
'security_level': 0,
'source': None,
'stack_specific': dict({
}),
'tc_link_key': dict({
'key': list([
90,
105,
103,
66,
101,
101,
65,
108,
108,
105,
97,
110,
99,
101,
48,
57,
]),
'partner_ieee': '**REDACTED**',
'rx_counter': 0,
'seq': 0,
'tx_counter': 0,
}),
}),
'node_info': dict({
'ieee': '**REDACTED**',
'logical_type': 2,
'manufacturer': 'Coordinator Manufacturer',
'model': 'Coordinator Model',
'nwk': 0,
'version': None,
}),
}),
'config': dict({
'device_config': dict({
}),
'enable_quirks': False,
}),
'config_entry': dict({
'data': dict({
'device': dict({
'baudrate': 115200,
'flow_control': 'hardware',
'path': '/dev/ttyUSB0',
}),
'radio_type': 'ezsp',
}),
'disabled_by': None,
'domain': 'zha',
'minor_version': 1,
'options': dict({
'custom_configuration': dict({
'zha_alarm_options': dict({
'alarm_arm_requires_code': False,
'alarm_failed_tries': 2,
'alarm_master_code': '**REDACTED**',
}),
'zha_options': dict({
'enhanced_light_transition': True,
'group_members_assume_state': False,
}),
}),
}),
'pref_disable_new_entities': False,
'pref_disable_polling': False,
'source': 'user',
'title': 'Mock Title',
'unique_id': None,
'version': 4,
}),
'devices': list([
dict({
'logical_type': 'Coordinator',
'manufacturer': 'Coordinator Manufacturer',
'model': 'Coordinator Model',
}),
dict({
'logical_type': 'EndDevice',
'manufacturer': 'FakeManufacturer',
'model': 'FakeModel',
}),
]),
'energy_scan': dict({
'11': 4.313725490196078,
'12': 4.705882352941177,
'13': 5.098039215686274,
'14': 5.490196078431373,
'15': 5.882352941176471,
'16': 6.2745098039215685,
'17': 6.666666666666667,
'18': 7.0588235294117645,
'19': 7.450980392156863,
'20': 7.8431372549019605,
'21': 8.235294117647058,
'22': 8.627450980392156,
'23': 9.019607843137255,
'24': 9.411764705882353,
'25': 9.803921568627452,
'26': 10.196078431372548,
}),
})
# ---
# name: test_diagnostics_for_device
dict({
'active_coordinator': False,
'area_id': None,
'available': True,
'cluster_details': dict({
'1': dict({
'device_type': dict({
'id': 1025,
'name': 'IAS_ANCILLARY_CONTROL',
}),
'in_clusters': dict({
'0x0500': dict({
'attributes': dict({
'0x0010': dict({
'attribute_name': 'cie_addr',
'value': list([
50,
79,
50,
2,
0,
141,
21,
0,
]),
}),
}),
'endpoint_attribute': 'ias_zone',
'unsupported_attributes': dict({
'0x0012': dict({
'attribute_name': 'num_zone_sensitivity_levels_supported',
}),
'0x0013': dict({
'attribute_name': 'current_zone_sensitivity_level',
}),
}),
}),
'0x0501': dict({
'attributes': dict({
}),
'endpoint_attribute': 'ias_ace',
'unsupported_attributes': dict({
'0x1000': dict({
}),
'unknown_attribute_name': dict({
}),
}),
}),
}),
'out_clusters': dict({
}),
'profile_id': 260,
}),
}),
'device_type': 'EndDevice',
'endpoint_names': list([
dict({
'name': 'IAS_ANCILLARY_CONTROL',
}),
]),
'entities': list([
dict({
'entity_id': 'alarm_control_panel.fakemanufacturer_fakemodel_alarm_control_panel',
'name': 'FakeManufacturer FakeModel',
}),
]),
'ieee': '**REDACTED**',
'lqi': None,
'manufacturer': 'FakeManufacturer',
'manufacturer_code': 4098,
'model': 'FakeModel',
'name': 'FakeManufacturer FakeModel',
'neighbors': list([
]),
'nwk': 47004,
'power_source': 'Mains',
'quirk_applied': False,
'quirk_class': 'zigpy.device.Device',
'quirk_id': None,
'routes': list([
]),
'rssi': None,
'signature': dict({
'endpoints': dict({
'1': dict({
'device_type': '0x0401',
'input_clusters': list([
'0x0500',
'0x0501',
]),
'output_clusters': list([
]),
'profile_id': '0x0104',
}),
}),
'manufacturer': 'FakeManufacturer',
'model': 'FakeModel',
'node_descriptor': dict({
'aps_flags': 0,
'complex_descriptor_available': 0,
'descriptor_capability_field': 0,
'frequency_band': 8,
'logical_type': 2,
'mac_capability_flags': 140,
'manufacturer_code': 4098,
'maximum_buffer_size': 82,
'maximum_incoming_transfer_size': 82,
'maximum_outgoing_transfer_size': 82,
'reserved': 0,
'server_mask': 0,
'user_descriptor_available': 0,
}),
}),
'user_given_name': None,
})
# ---

View File

@ -3,11 +3,11 @@
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
from syrupy.assertion import SnapshotAssertion
from syrupy.filters import props
from zigpy.profiles import zha from zigpy.profiles import zha
from zigpy.zcl.clusters import security from zigpy.zcl.clusters import security
from homeassistant.components.diagnostics import REDACTED
from homeassistant.components.zha.diagnostics import KEYS_TO_REDACT
from homeassistant.components.zha.helpers import ( from homeassistant.components.zha.helpers import (
ZHADeviceProxy, ZHADeviceProxy,
ZHAGatewayProxy, ZHAGatewayProxy,
@ -27,14 +27,6 @@ from tests.components.diagnostics import (
) )
from tests.typing import ClientSessionGenerator from tests.typing import ClientSessionGenerator
CONFIG_ENTRY_DIAGNOSTICS_KEYS = [
"config",
"config_entry",
"application_state",
"versions",
"devices",
]
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def required_platforms_only(): def required_platforms_only():
@ -51,6 +43,7 @@ async def test_diagnostics_for_config_entry(
config_entry: MockConfigEntry, config_entry: MockConfigEntry,
setup_zha, setup_zha,
zigpy_device_mock, zigpy_device_mock,
snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test diagnostics for config entry.""" """Test diagnostics for config entry."""
@ -81,30 +74,9 @@ async def test_diagnostics_for_config_entry(
hass, hass_client, config_entry hass, hass_client, config_entry
) )
for key in CONFIG_ENTRY_DIAGNOSTICS_KEYS: assert diagnostics_data == snapshot(
assert key in diagnostics_data exclude=props("created_at", "modified_at", "entry_id", "versions")
assert diagnostics_data[key] is not None )
# Energy scan results are presented as a percentage. JSON object keys also must be
# strings, not integers.
assert diagnostics_data["energy_scan"] == {
str(k): 100 * v / 255 for k, v in scan.items()
}
assert isinstance(diagnostics_data["devices"], list)
assert len(diagnostics_data["devices"]) == 2
assert diagnostics_data["devices"] == [
{
"manufacturer": "Coordinator Manufacturer",
"model": "Coordinator Model",
"logical_type": "Coordinator",
},
{
"manufacturer": "FakeManufacturer",
"model": "FakeModel",
"logical_type": "EndDevice",
},
]
async def test_diagnostics_for_device( async def test_diagnostics_for_device(
@ -114,6 +86,7 @@ async def test_diagnostics_for_device(
config_entry: MockConfigEntry, config_entry: MockConfigEntry,
setup_zha, setup_zha,
zigpy_device_mock, zigpy_device_mock,
snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test diagnostics for device.""" """Test diagnostics for device."""
await setup_zha() await setup_zha()
@ -161,11 +134,5 @@ async def test_diagnostics_for_device(
diagnostics_data = await get_diagnostics_for_device( diagnostics_data = await get_diagnostics_for_device(
hass, hass_client, config_entry, device hass, hass_client, config_entry, device
) )
assert diagnostics_data
device_info: dict = zha_device_proxy.zha_device_info assert diagnostics_data == snapshot(exclude=props("device_reg_id", "last_seen"))
for key in device_info:
assert key in diagnostics_data
if key not in KEYS_TO_REDACT:
assert key in diagnostics_data
else:
assert diagnostics_data[key] == REDACTED