def test_bind_req_serialize(): payload = {"dstaddr": NWK(25234), "srcaddr": EUI64(reversed(b'\x00\x0b\x57\xff\xfe\x27\x78\x3c')), "srcendpoint": 1, "clusterid": 8, "dstaddrmode": 3, "dstaddress": EUI64(reversed(b'\x00\x12\x4b\x00\x18\xed\x25\x0c')), "dstendpoint": 1} obj = ZpiObject.from_command(t.Subsystem.ZDO, 'bindReq', payload) assert ( "SREQ ZDO bindReq tsn: None {" "'dstaddr': 0x6292, " "'srcaddr': 00:0b:57:ff:fe:27:78:3c, " "'srcendpoint': 1, " "'clusterid': 8, " "'dstaddrmode': 3, " "'dstaddress': 00:12:4b:00:18:ed:25:0c, " "'dstendpoint': 1}" == str(obj) ) assert ( bytes( [254, 23, 37, 33, 146, 98, 60, 120, 39, 254, 255, 87, 11, 0, 1, 8, 0, 3, 12, 37, 237, 24, 0, 75, 18, 0, 1, 83]) == obj.to_unpi_frame().to_buffer() )
def convert_ieee(ieee_str): """Convert given ieee string to EUI64.""" from zigpy.types import EUI64, uint8_t if ieee_str is None: return None return EUI64([uint8_t(p, base=16) for p in ieee_str.split(":")])
async def test_startup_no_api_mode(app): auto_form = True await _test_startup(app, 0x00, auto_form, api_mode=False) assert app._nwk == 0x0000 assert app._ieee == EUI64(range(1, 9)) assert app.form_network.call_count == 0 assert app._api.init_api_mode.call_count == 1 assert app._api._at_command.call_count >= 16
def _test_rx(app, addr_ieee, addr_nwk, device, data): app.get_device = MagicMock(return_value=device) app.devices = (EUI64(addr_ieee.address), ) app.handle_rx( addr_nwk, sentinel.src_ep, sentinel.dst_ep, sentinel.profile_id, sentinel.cluster_id, data, sentinel.lqi, sentinel.rssi, )
async def test_startup_ai(app): auto_form = True await _test_startup(app, 0x00, auto_form) assert app._nwk == 0x0000 assert app._ieee == EUI64(range(1, 9)) assert app.form_network.call_count == 0 auto_form = False await _test_startup(app, 0x00, auto_form) assert app._nwk == 0x0000 assert app._ieee == EUI64(range(1, 9)) assert app.form_network.call_count == 0 auto_form = True await _test_startup(app, 0x06, auto_form) assert app._nwk == 0xfffe assert app._ieee == EUI64(range(1, 9)) assert app.form_network.call_count == 1 auto_form = False await _test_startup(app, 0x06, auto_form) assert app._nwk == 0xfffe assert app._ieee == EUI64(range(1, 9)) assert app.form_network.call_count == 0
def _test_rx(app, addr_ieee, addr_nwk, device, deserialized): app.get_device = mock.MagicMock(return_value=device) app.deserialize = mock.MagicMock(return_value=deserialized) app.devices = (EUI64(addr_ieee.address), ) app.handle_rx( addr_nwk, mock.sentinel.src_ep, mock.sentinel.dst_ep, mock.sentinel.profile_id, mock.sentinel.cluster_id, b'', mock.sentinel.lqi, mock.sentinel.rssi, ) assert app.deserialize.call_count == 1
def test_rx_wrong_addr_mode(app, addr_ieee, addr_nwk, caplog): device = MagicMock() app.handle_message = MagicMock() app.get_device = MagicMock(return_value=device) app.devices = (EUI64(addr_ieee.address), ) with pytest.raises(Exception): # TODO: don't use broad exceptions addr_nwk.address_mode = 0x22 app.handle_rx( addr_nwk, sentinel.src_ep, sentinel.dst_ep, sentinel.profile_id, sentinel.cluster_id, b"", sentinel.lqi, sentinel.rssi, ) assert app.handle_message.call_count == 0
def test_rx_failed_deserialize(app, addr_ieee, addr_nwk, caplog): app._handle_reply = mock.MagicMock() app.handle_message = mock.MagicMock() app.get_device = mock.MagicMock(return_value=mock.MagicMock()) app.deserialize = mock.MagicMock(side_effect=ValueError) app.devices = (EUI64(addr_ieee.address), ) app.handle_rx( addr_nwk, mock.sentinel.src_ep, mock.sentinel.dst_ep, mock.sentinel.profile_id, mock.sentinel.cluster_id, b'', mock.sentinel.lqi, mock.sentinel.rssi, ) assert any(record.levelname == 'ERROR' for record in caplog.records) assert app._handle_reply.call_count == 0 assert app.handle_message.call_count == 0