Skip to content

Commit

Permalink
Replace node descriptor bytestrings with objects (#177)
Browse files Browse the repository at this point in the history
* Use real node descriptor objects instead of opaque bytestrings

* Fix node descriptor construction in discovery tests
  • Loading branch information
puddly authored Aug 23, 2024
1 parent c516144 commit 98349c6
Show file tree
Hide file tree
Showing 10 changed files with 1,735 additions and 116 deletions.
22 changes: 20 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ def _mock_dev(
ieee: str = "00:0d:6f:00:0a:90:69:e7",
manufacturer: str = "FakeManufacturer",
model: str = "FakeModel",
node_descriptor: bytes = b"\x02@\x807\x10\x7fd\x00\x00*d\x00\x00",
node_descriptor: zdo_t.NodeDescriptor | None = None,
nwk: int = 0xB79C,
patch_cluster: bool = True,
quirk: Optional[Callable] = None,
Expand All @@ -416,7 +416,25 @@ def _mock_dev(
)
device.manufacturer = manufacturer
device.model = model
device.node_desc = zdo_t.NodeDescriptor.deserialize(node_descriptor)[0]

if node_descriptor is None:
node_descriptor = zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress,
manufacturer_code=4151,
maximum_buffer_size=127,
maximum_incoming_transfer_size=100,
server_mask=10752,
maximum_outgoing_transfer_size=100,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
)

device.node_desc = node_descriptor
device.last_seen = time.time()

for epid, ep in endpoints.items():
Expand Down
22 changes: 21 additions & 1 deletion tests/test_alarm_control_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from zigpy.profiles import zha
from zigpy.zcl.clusters import security
import zigpy.zcl.foundation as zcl_f
import zigpy.zdo.types as zdo_t

from tests.conftest import SIG_EP_INPUT, SIG_EP_OUTPUT, SIG_EP_PROFILE, SIG_EP_TYPE
from zha.application import Platform
Expand All @@ -32,7 +33,26 @@ def zigpy_device(zigpy_device_mock: Callable[..., ZigpyDevice]) -> ZigpyDevice:
}
}
return zigpy_device_mock(
endpoints, node_descriptor=b"\x02@\x8c\x02\x10RR\x00\x00\x00R\x00\x00"
endpoints,
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.RxOnWhenIdle
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4098,
maximum_buffer_size=82,
maximum_incoming_transfer_size=82,
server_mask=0,
maximum_outgoing_transfer_size=82,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)


Expand Down
20 changes: 19 additions & 1 deletion tests/test_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,25 @@ def _dev(with_basic_cluster_handler: bool = True):
}
}
return zigpy_device_mock(
endpoints, node_descriptor=b"\x02@\x84_\x11\x7fd\x00\x00,d\x00\x00"
endpoints,
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4447,
maximum_buffer_size=127,
maximum_incoming_transfer_size=100,
server_mask=11264,
maximum_outgoing_transfer_size=100,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)

return _dev
Expand Down
7 changes: 4 additions & 3 deletions tests/test_discover.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import zigpy.zcl.clusters.general
import zigpy.zcl.clusters.security
import zigpy.zcl.foundation as zcl_f
import zigpy.zdo.types as zdo_t

from tests.common import get_entity, update_attribute_cache
from tests.conftest import SIG_EP_INPUT, SIG_EP_OUTPUT, SIG_EP_PROFILE, SIG_EP_TYPE
Expand Down Expand Up @@ -99,7 +100,7 @@ async def _mock(
ieee="00:11:22:33:44:55:66:77",
manufacturer="mock manufacturer",
model="mock model",
node_desc=b"\x02@\x807\x10\x7fd\x00\x00*d\x00\x00",
node_desc=None,
patch_cluster=False,
):
return await device_joined(
Expand Down Expand Up @@ -133,7 +134,7 @@ async def test_devices(
ieee="00:11:22:33:44:55:66:77",
manufacturer=device[SIG_MANUFACTURER],
model=device[SIG_MODEL],
node_descriptor=device[SIG_NODE_DESC],
node_descriptor=zdo_t.NodeDescriptor(**device[SIG_NODE_DESC]),
attributes=device.get(DEV_SIG_ATTRIBUTES),
patch_cluster=False,
)
Expand Down Expand Up @@ -328,7 +329,7 @@ async def test_discover_endpoint(
device_info[SIG_ENDPOINTS],
manufacturer=device_info[SIG_MANUFACTURER],
model=device_info[SIG_MODEL],
node_desc=device_info[SIG_NODE_DESC],
node_desc=zdo_t.NodeDescriptor(**device_info[SIG_NODE_DESC]),
patch_cluster=True,
)

Expand Down
62 changes: 59 additions & 3 deletions tests/test_fan.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from zigpy.profiles import zha
from zigpy.zcl.clusters import general, hvac
import zigpy.zcl.foundation as zcl_f
import zigpy.zdo.types as zdo_t

from tests.common import (
get_entity,
Expand Down Expand Up @@ -62,7 +63,26 @@ def zigpy_device(
}
}
return zigpy_device_mock(
endpoints, node_descriptor=b"\x02@\x8c\x02\x10RR\x00\x00\x00R\x00\x00"
endpoints,
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.RxOnWhenIdle
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4098,
maximum_buffer_size=82,
maximum_incoming_transfer_size=82,
server_mask=0,
maximum_outgoing_transfer_size=82,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)


Expand Down Expand Up @@ -511,7 +531,25 @@ def zigpy_device_ikea(zigpy_device_mock) -> ZigpyDevice:
manufacturer="IKEA of Sweden",
model="STARKVIND Air purifier",
quirk=zhaquirks.ikea.starkvind.IkeaSTARKVIND,
node_descriptor=b"\x02@\x8c\x02\x10RR\x00\x00\x00R\x00\x00",
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.RxOnWhenIdle
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4098,
maximum_buffer_size=82,
maximum_incoming_transfer_size=82,
server_mask=0,
maximum_outgoing_transfer_size=82,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)


Expand Down Expand Up @@ -665,7 +703,25 @@ def zigpy_device_kof(zigpy_device_mock) -> ZigpyDevice:
manufacturer="King Of Fans, Inc.",
model="HBUniversalCFRemote",
quirk=zhaquirks.kof.kof_mr101z.CeilingFan,
node_descriptor=b"\x02@\x8c\x02\x10RR\x00\x00\x00R\x00\x00",
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.RxOnWhenIdle
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4098,
maximum_buffer_size=82,
maximum_incoming_transfer_size=82,
server_mask=0,
maximum_outgoing_transfer_size=82,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)


Expand Down
23 changes: 22 additions & 1 deletion tests/test_gateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import zigpy.types
from zigpy.zcl.clusters import general, lighting
import zigpy.zdo.types
import zigpy.zdo.types as zdo_t
from zigpy.zdo.types import LogicalType, NodeDescriptor

from tests.common import get_entity, get_group_entity
Expand Down Expand Up @@ -85,7 +86,27 @@ async def coordinator(
},
ieee="00:15:8d:00:02:32:4f:32",
nwk=0x0000,
node_descriptor=b"\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.Coordinator,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.AlternatePanCoordinator
| zdo_t.NodeDescriptor.MACCapabilityFlags.FullFunctionDevice
| zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.RxOnWhenIdle
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=43981,
maximum_buffer_size=82,
maximum_incoming_transfer_size=128,
server_mask=11329,
maximum_outgoing_transfer_size=128,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)
zha_device = await device_joined(zigpy_device)
zha_device.available = True
Expand Down
22 changes: 21 additions & 1 deletion tests/test_light.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from zigpy.profiles import zha
from zigpy.zcl.clusters import general, lighting
import zigpy.zcl.foundation as zcl_f
import zigpy.zdo.types as zdo_t

from tests.common import (
get_entity,
Expand Down Expand Up @@ -105,7 +106,26 @@ async def coordinator(
},
ieee="00:15:8d:00:02:32:4f:32",
nwk=0x0000,
node_descriptor=b"\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.Router,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.FullFunctionDevice
| zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.RxOnWhenIdle
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4107,
maximum_buffer_size=82,
maximum_incoming_transfer_size=128,
server_mask=11264,
maximum_outgoing_transfer_size=128,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)
zha_device = await device_joined(zigpy_device)
zha_device.available = True
Expand Down
20 changes: 19 additions & 1 deletion tests/test_number.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from zigpy.profiles import zha
import zigpy.types
from zigpy.zcl.clusters import general, lighting
import zigpy.zdo.types as zdo_t

from tests.common import get_entity, send_attributes_report, update_attribute_cache
from tests.conftest import SIG_EP_INPUT, SIG_EP_OUTPUT, SIG_EP_PROFILE, SIG_EP_TYPE
Expand Down Expand Up @@ -56,7 +57,24 @@ async def light(zigpy_device_mock: Callable[..., ZigpyDevice]) -> ZigpyDevice:
SIG_EP_OUTPUT: [general.Ota.cluster_id],
}
},
node_descriptor=b"\x02@\x84_\x11\x7fd\x00\x00,d\x00\x00",
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4447,
maximum_buffer_size=127,
maximum_incoming_transfer_size=100,
server_mask=11264,
maximum_outgoing_transfer_size=100,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)

return zigpy_device
Expand Down
21 changes: 20 additions & 1 deletion tests/test_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import zigpy.types as t
from zigpy.zcl import Cluster, foundation
from zigpy.zcl.clusters import general
import zigpy.zdo.types as zdo_t

from tests.common import get_entity, update_attribute_cache
from tests.conftest import SIG_EP_INPUT, SIG_EP_OUTPUT, SIG_EP_TYPE
Expand All @@ -39,7 +40,25 @@ def zigpy_device(zigpy_device_mock):
}
}
return zigpy_device_mock(
endpoints, node_descriptor=b"\x02@\x84_\x11\x7fd\x00\x00,d\x00\x00"
endpoints,
node_descriptor=zdo_t.NodeDescriptor(
logical_type=zdo_t.LogicalType.EndDevice,
complex_descriptor_available=0,
user_descriptor_available=0,
reserved=0,
aps_flags=0,
frequency_band=zdo_t.NodeDescriptor.FrequencyBand.Freq2400MHz,
mac_capability_flags=(
zdo_t.NodeDescriptor.MACCapabilityFlags.MainsPowered
| zdo_t.NodeDescriptor.MACCapabilityFlags.AllocateAddress
),
manufacturer_code=4447,
maximum_buffer_size=127,
maximum_incoming_transfer_size=100,
server_mask=11264,
maximum_outgoing_transfer_size=100,
descriptor_capability_field=zdo_t.NodeDescriptor.DescriptorCapability.NONE,
),
)


Expand Down
Loading

0 comments on commit 98349c6

Please sign in to comment.