Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
 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
Beispiel #4
0
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)
Beispiel #5
0
 def keepAlive(self):
     """Send a keepalive message"""
     msg = Zip.ZipKeepAlive(
         ackRequest=True,
         ackResponse=False,
     )
     self._conn.send(msg.compose())
     self.resetKeepAlive()
Beispiel #6
0
 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))
Beispiel #7
0
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")
Beispiel #8
0
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
Beispiel #9
0
async def test_ack(adapter: Adapter):
    await asyncio.gather(
        adapter.waitForAck(1),
        runDelayed(adapter.ackReceived, Zip.ZipPacket(seqNo=1)))
Beispiel #10
0
def test_nack_not_existing(adapter: Adapter):
    assert (adapter.ackReceived(
        Zip.ZipPacket(nackResponse=True, nackWaiting=True, seqNo=43)) is False)
Beispiel #11
0
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))
Beispiel #12
0
def test_ack_not_existing(adapter: Adapter):
    assert adapter.ackReceived(Zip.ZipPacket(seqNo=43)) is False
Beispiel #13
0
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()
Beispiel #14
0
def test_zip_packet_ima(header, includedReport):
    data = Zip.HeaderExtension.deserialize(BitStreamReader(header))
    hdr = Zip.HeaderExtension()
    hdr.__setstate__(data)
    assert hdr.get(includedReport)