mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Change zha diagnostic to snapshot (#123198)
This commit is contained in:
parent
537d7728a7
commit
f51cc8fe12
266
tests/components/zha/snapshots/test_diagnostics.ambr
Normal file
266
tests/components/zha/snapshots/test_diagnostics.ambr
Normal 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,
|
||||||
|
})
|
||||||
|
# ---
|
@ -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
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user