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
import pytest
from syrupy.assertion import SnapshotAssertion
from syrupy.filters import props
from zigpy.profiles import zha
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 (
ZHADeviceProxy,
ZHAGatewayProxy,
@ -27,14 +27,6 @@ from tests.components.diagnostics import (
)
from tests.typing import ClientSessionGenerator
CONFIG_ENTRY_DIAGNOSTICS_KEYS = [
"config",
"config_entry",
"application_state",
"versions",
"devices",
]
@pytest.fixture(autouse=True)
def required_platforms_only():
@ -51,6 +43,7 @@ async def test_diagnostics_for_config_entry(
config_entry: MockConfigEntry,
setup_zha,
zigpy_device_mock,
snapshot: SnapshotAssertion,
) -> None:
"""Test diagnostics for config entry."""
@ -81,30 +74,9 @@ async def test_diagnostics_for_config_entry(
hass, hass_client, config_entry
)
for key in CONFIG_ENTRY_DIAGNOSTICS_KEYS:
assert key in diagnostics_data
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",
},
]
assert diagnostics_data == snapshot(
exclude=props("created_at", "modified_at", "entry_id", "versions")
)
async def test_diagnostics_for_device(
@ -114,6 +86,7 @@ async def test_diagnostics_for_device(
config_entry: MockConfigEntry,
setup_zha,
zigpy_device_mock,
snapshot: SnapshotAssertion,
) -> None:
"""Test diagnostics for device."""
await setup_zha()
@ -161,11 +134,5 @@ async def test_diagnostics_for_device(
diagnostics_data = await get_diagnostics_for_device(
hass, hass_client, config_entry, device
)
assert diagnostics_data
device_info: dict = zha_device_proxy.zha_device_info
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
assert diagnostics_data == snapshot(exclude=props("device_reg_id", "last_seen"))