def test_configure_reporting_response_serialization(): direction_attr_id = b'\x00\x01\x10' extra = b'12da-' res, d = foundation.ConfigureReportingResponseRecord.deserialize( b'\x00' + direction_attr_id + extra) assert res.status == foundation.Status.SUCCESS assert res.direction is None assert res.attrid is None assert d == direction_attr_id + extra r = repr(res) assert r.startswith( '<' + foundation.ConfigureReportingResponseRecord.__name__) assert 'status' in r assert 'direction' not in r assert 'attrid' not in r res, d = foundation.ConfigureReportingResponseRecord.deserialize( b'\x8c' + direction_attr_id + extra) assert res.status == foundation.Status.UNREPORTABLE_ATTRIBUTE assert res.direction is not None assert res.attrid == 0x1001 assert d == extra r = repr(res) assert 'status' in r assert 'direction' in r assert 'attrid' in r rec = foundation.ConfigureReportingResponseRecord( foundation.Status.SUCCESS, 0x00, 0xaabb ) assert rec.serialize() == b'\x00' rec.status = foundation.Status.UNREPORTABLE_ATTRIBUTE assert rec.serialize()[0:1] == foundation.Status.UNREPORTABLE_ATTRIBUTE.serialize() assert rec.serialize()[1:] == b'\x00\xbb\xaa'
def test_configure_reporting_response_serialization(): direction_attr_id = b"\x00\x01\x10" extra = b"12da-" res, d = foundation.ConfigureReportingResponseRecord.deserialize( b"\x00" + direction_attr_id + extra) assert res.status == foundation.Status.SUCCESS assert res.direction is None assert res.attrid is None assert d == direction_attr_id + extra r = repr(res) assert r.startswith("<" + foundation.ConfigureReportingResponseRecord.__name__) assert "status" in r assert "direction" not in r assert "attrid" not in r res, d = foundation.ConfigureReportingResponseRecord.deserialize( b"\x8c" + direction_attr_id + extra) assert res.status == foundation.Status.UNREPORTABLE_ATTRIBUTE assert res.direction is not None assert res.attrid == 0x1001 assert d == extra r = repr(res) assert "status" in r assert "direction" in r assert "attrid" in r rec = foundation.ConfigureReportingResponseRecord( foundation.Status.SUCCESS, 0x00, 0xAABB) assert rec.serialize() == b"\x00" rec.status = foundation.Status.UNREPORTABLE_ATTRIBUTE assert rec.serialize( )[0:1] == foundation.Status.UNREPORTABLE_ATTRIBUTE.serialize() assert rec.serialize()[1:] == b"\x00\xbb\xaa"
def test_configure_reporting_response_serialize(attributes, data): """Test ConfigureReporting Response serialization.""" r = foundation.ConfigureReportingResponse() for attr_id, status in attributes.items(): rec = foundation.ConfigureReportingResponseRecord() rec.status = status rec.direction = 0x01 rec.attrid = attr_id r.append(rec) assert r.serialize() == data
def patch_cluster(cluster): """Patch a cluster for testing.""" cluster.PLUGGED_ATTR_READS = {} async def _read_attribute_raw(attributes, *args, **kwargs): result = [] for attr_id in attributes: value = cluster.PLUGGED_ATTR_READS.get(attr_id) if value is None: # try converting attr_id to attr_name and lookup the plugs again attr = cluster.attributes.get(attr_id) if attr is not None: value = cluster.PLUGGED_ATTR_READS.get(attr.name) if value is not None: result.append( zcl_f.ReadAttributeRecord( attr_id, zcl_f.Status.SUCCESS, zcl_f.TypeValue(python_type=None, value=value), ) ) else: result.append(zcl_f.ReadAttributeRecord(attr_id, zcl_f.Status.FAILURE)) return (result,) cluster.bind = AsyncMock(return_value=[0]) cluster.configure_reporting = AsyncMock( return_value=[ [zcl_f.ConfigureReportingResponseRecord(zcl_f.Status.SUCCESS, 0x00, 0xAABB)] ] ) cluster.configure_reporting_multiple = AsyncMock( return_value=zcl_f.ConfigureReportingResponse.deserialize(b"\x00")[0] ) cluster.deserialize = Mock() cluster.handle_cluster_request = Mock() cluster.read_attributes = AsyncMock(wraps=cluster.read_attributes) cluster.read_attributes_raw = AsyncMock(side_effect=_read_attribute_raw) cluster.unbind = AsyncMock(return_value=[0]) cluster.write_attributes = AsyncMock(wraps=cluster.write_attributes) cluster._write_attributes = AsyncMock( return_value=[zcl_f.WriteAttributesResponse.deserialize(b"\x00")[0]] ) if cluster.cluster_id == 4: cluster.add = AsyncMock(return_value=[0])
def test_configure_reporting_response_serialization(): # success status only res, d = foundation.ConfigureReportingResponseRecord.deserialize(b"\x00") assert res.status == foundation.Status.SUCCESS assert res.direction is None assert res.attrid is None assert d == b"" # success + direction and attr id direction_attr_id = b"\x00\x01\x10" extra = b"12da-" res, d = foundation.ConfigureReportingResponseRecord.deserialize( b"\x00" + direction_attr_id + extra ) assert res.status == foundation.Status.SUCCESS assert res.direction is foundation.ReportingDirection.SendReports assert res.attrid == 0x1001 assert d == extra r = repr(res) assert r.startswith(foundation.ConfigureReportingResponseRecord.__name__ + "(") assert "status" in r assert "direction" not in r assert "attrid" not in r # failure record deserialization res, d = foundation.ConfigureReportingResponseRecord.deserialize( b"\x8c" + direction_attr_id + extra ) assert res.status == foundation.Status.UNREPORTABLE_ATTRIBUTE assert res.direction is not None assert res.attrid == 0x1001 assert d == extra r = repr(res) assert "status" in r assert "direction" in r assert "attrid" in r # successful record serializes only Status rec = foundation.ConfigureReportingResponseRecord( foundation.Status.SUCCESS, 0x00, 0xAABB ) assert rec.serialize() == b"\x00" rec.status = foundation.Status.UNREPORTABLE_ATTRIBUTE assert rec.serialize()[0:1] == foundation.Status.UNREPORTABLE_ATTRIBUTE.serialize() assert rec.serialize()[1:] == b"\x00\xbb\xaa"