def test_onPacket_ZipND(connection: ZIPConnection): pkt = ZipND.ZipNodeAdvertisement( local=False, validity=0, nodeId=6, ipv6=0, homeId=0, ) assert connection.onPacket(pkt.compose()) is True pkt = Zip.ZipKeepAlive(ackRequest=True, ackResponse=False) assert connection.onPacket(pkt.compose()) is False pkt = Zip.ZipKeepAlive(ackRequest=False, ackResponse=True) assert connection.onPacket(pkt.compose()) is True
async def test_sendToNode(gateway: ZIPGateway): connection = await gateway.connectToNode(6) [res, _] = await asyncio.gather( gateway.sendToNode(6, Basic.Get()), runDelayed(connection.ackReceived, Zip.ZipPacket(seqNo=1)), ) assert res == True
async def send(self, cmd, sourceEP=0, destEP=0, timeout=3) -> bool: self._seq = (self._seq + 1) & 0xFF msg = Zip.ZipPacket( ackRequest=True, ackResponse=False, nackResponse=False, nackWaiting=False, nackQueueFull=False, nackOptionError=False, headerExtIncluded=False, zwCmdIncluded=True, moreInformation=False, secureOrigin=True, seqNo=self._seq, sourceEP=sourceEP, destEP=destEP, command=cmd, ) self._conn.send(msg.compose()) self.resetKeepAlive() try: await self.waitForAck(msg.seqNo, timeout=timeout) except asyncio.TimeoutError: return False return True
def test_onMessageReceived(gateway: ZIPGateway): connection = DummyConnection() msg = Basic.Get() gateway._connections = {2: connection} gateway.onMessageReceived(connection, Zip.ZipPacket(sourceEP=0, command=msg)) gateway.listener.messageReceived.assert_called_once_with( gateway, 2, 0, msg, 0)
def keepAlive(self): """Send a keepalive message""" msg = Zip.ZipKeepAlive( ackRequest=True, ackResponse=False, ) self._conn.send(msg.compose()) self.resetKeepAlive()
async def sendAck(): await asyncio.sleep(0) # pylint: disable=line-too-long pkt = b"#\x020\x90\x01\x00\x00\x16\x01\x03\x00\x06=\x03\x0e\x00\x01\x00\x01\x02\x00\x1a\x02\x05\x00\x00\x00\x00\x02" msg = Message.decode(pkt) adapter.ackReceived(msg) await asyncio.sleep(0) await asyncio.sleep(0) await asyncio.sleep(0) adapter.ackReceived(Zip.ZipPacket(ackResponse=True, seqNo=1))
async def test_send(connection: ZIPConnection): connection._conn.send = MagicMock() basicGet = Basic.Get() [res, _] = await asyncio.gather( connection.send(basicGet), runDelayed(connection.ackReceived, Zip.ZipPacket(seqNo=1)), ) assert res is True connection._conn.send.assert_called_once_with( b"#\x02\x80\x50\x01\x00\x00 \x02")
async def test_onMessageReceived(app: Application): listener = MagicMock() app.addListener(listener) command = NetworkManagementInclusion.NodeAddStatus() assert await app.onMessageReceived(None, Zip.ZipPacket(command=command)) is True listener.addNodeStatus.assert_called_once_with(app, command) listener.reset_mock() command = NetworkManagementInclusion.NodeRemoveStatus( status=NetworkManagementInclusion.NodeRemoveStatus.Status.FAILED) assert await app.onMessageReceived(None, Zip.ZipPacket(command=command)) is True listener.nodeRemoved.assert_not_called() listener.nodesRemoved.assert_not_called() listener.reset_mock() command = NetworkManagementInclusion.NodeRemoveStatus( status=NetworkManagementInclusion.NodeRemoveStatus.Status.DONE, nodeID=0) assert await app.onMessageReceived(None, Zip.ZipPacket(command=command)) is True listener.nodeRemoved.assert_called_once_with(app, 0) listener.nodesRemoved.assert_called_once_with(app, [0]) assert (await app.onMessageReceived( None, Zip.ZipPacket(command=Basic.Get())) is False) listener.reset_mock() listener.messageReceived.return_value = True assert await app.onMessageReceived( None, Zip.ZipPacket(command=Basic.Get())) is True assert await app.onMessageReceived(None, Basic.Get()) is False assert await app.onMessageReceived(None, Zip.ZipPacket()) is False
async def test_ack(adapter: Adapter): await asyncio.gather( adapter.waitForAck(1), runDelayed(adapter.ackReceived, Zip.ZipPacket(seqNo=1)))
def test_nack_not_existing(adapter: Adapter): assert (adapter.ackReceived( Zip.ZipPacket(nackResponse=True, nackWaiting=True, seqNo=43)) is False)
def test_commandReceived(adapter: Adapter): adapter.messageReceived = MagicMock() adapter.commandReceived(Zip.ZipPacket(command=Basic.Report(value=0))) adapter.messageReceived.assert_called_once_with(Basic.Report(value=0))
def test_ack_not_existing(adapter: Adapter): assert adapter.ackReceived(Zip.ZipPacket(seqNo=43)) is False
def test_onPacket_Zip(connection: ZIPConnection): connection.ackReceived = MagicMock() connection.commandReceived = MagicMock() ackResponse = Zip.ZipPacket( ackRequest=False, ackResponse=True, nackResponse=False, nackWaiting=False, nackQueueFull=False, nackOptionError=False, headerExtIncluded=False, zwCmdIncluded=False, moreInformation=False, secureOrigin=True, seqNo=0, sourceEP=0, destEP=0, command=None, ) assert connection.onPacket(ackResponse.compose()) is True connection.ackReceived.assert_called_once() nackResponse = Zip.ZipPacket( ackRequest=False, ackResponse=False, nackResponse=True, nackWaiting=False, nackQueueFull=False, nackOptionError=False, headerExtIncluded=False, zwCmdIncluded=False, moreInformation=False, secureOrigin=True, seqNo=0, sourceEP=0, destEP=0, command=None, ) msg = Message.decode(nackResponse.compose()) assert msg.ackRequest == False assert msg.ackResponse == False assert msg.nackResponse == True assert connection.onPacket(nackResponse.compose()) is False nackResponse = Zip.ZipPacket( ackRequest=False, ackResponse=False, nackResponse=True, nackWaiting=True, nackQueueFull=False, nackOptionError=False, headerExtIncluded=False, zwCmdIncluded=False, moreInformation=False, secureOrigin=True, seqNo=0, sourceEP=0, destEP=0, command=None, ) msg = Message.decode(nackResponse.compose()) assert msg.ackRequest == False assert msg.ackResponse == False assert msg.nackResponse == True # This should be treated as success assert connection.onPacket(nackResponse.compose()) is True ackRequest = Zip.ZipPacket( ackRequest=True, ackResponse=False, nackResponse=False, nackWaiting=False, nackQueueFull=False, nackOptionError=False, headerExtIncluded=False, zwCmdIncluded=False, moreInformation=False, secureOrigin=True, seqNo=0, sourceEP=0, destEP=0, command=None, ) assert connection.onPacket(ackRequest.compose()) is False pkt = Zip.ZipPacket( ackRequest=False, ackResponse=False, nackResponse=False, nackWaiting=False, nackQueueFull=False, nackOptionError=False, headerExtIncluded=False, zwCmdIncluded=True, moreInformation=False, secureOrigin=True, seqNo=0, sourceEP=0, destEP=0, command=Basic.Get(), ) assert connection.onPacket(pkt.compose()) is True connection.commandReceived.assert_called_once()
def test_zip_packet_ima(header, includedReport): data = Zip.HeaderExtension.deserialize(BitStreamReader(header)) hdr = Zip.HeaderExtension() hdr.__setstate__(data) assert hdr.get(includedReport)