Exemple #1
0
async def test_handleNodeListReport(gateway: ZIPGateway):
    async def ipOfNode(_):
        return ipaddress.IPv6Address("::1")

    listener = MagicMock()
    gateway.ipOfNode = ipOfNode
    gateway.addListener(listener)
    gateway._nodes = {
        1: {
            "ip": ipaddress.IPv6Address("::1")
        },
        2: {
            "ip": ipaddress.IPv6Address("::1")
        },
    }
    # pylint: disable=line-too-long
    zipPkt = b"#\x02@\x10\x00\x00\x00R\x02\x02\x00\x01!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    future = gateway.onUnsolicitedMessage(zipPkt, ("::1", ))
    await asyncio.gather(future)
    assert gateway._nodes == {
        1: {
            "ip": ipaddress.IPv6Address("::1")
        },
        6: {
            "ip": ipaddress.IPv6Address("::1")
        },
    }
    listener.nodeListUpdated.assert_called_once()
Exemple #2
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)
Exemple #3
0
async def test_connect(gateway: ZIPGateway):
    gateway._nodes = {1: {}, 2: {}}
    gateway.ipOfNode = ipOfNode

    async def runScript():
        await asyncio.sleep(0)
        gateway.commandReceived(ZipGateway.GatewayModeReport(mode=2))

    await asyncio.gather(gateway.connect(), runScript())
Exemple #4
0
async def test_getMultiChannelEndPoints(gateway: ZIPGateway):
    gateway.send = sendNop
    [endpoints, _] = await asyncio.gather(
        gateway.getMultiChannelEndPoints(1),
        runDelayed(
            gateway.commandReceived,
            NetworkManagementProxy.MultiChannelEndPointReport(
                individualEndPoints=2, aggregatedEndPoints=0),
        ),
    )
    assert endpoints == 2
Exemple #5
0
async def test_getMultiChannelCapability(gateway: ZIPGateway):
    gateway.send = sendNop
    [report, _] = await asyncio.gather(
        gateway.getMultiChannelCapability(1, 1),
        runDelayed(
            gateway.commandReceived,
            NetworkManagementProxy.MultiChannelCapabilityReport(),
        ),
    )
    assert isinstance(report,
                      NetworkManagementProxy.MultiChannelCapabilityReport)
Exemple #6
0
async def test_getFailedNodeList(gateway: ZIPGateway):
    # pylint: disable=line-too-long
    failedNodeListReport = Message.decode(
        b"R\x0C\x02!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    )

    gateway.send = sendNop
    [nodeList, _] = await asyncio.gather(
        gateway.getFailedNodeList(),
        runDelayed(gateway.commandReceived, failedNodeListReport),
    )
    assert nodeList == {1, 6}
Exemple #7
0
async def test_removeFailedNode(gateway: ZIPGateway):
    gateway.send = sendNop
    [status, _] = await asyncio.gather(
        gateway.removeFailedNode(42),
        runDelayed(
            gateway.commandReceived,
            NetworkManagementInclusion.FailedNodeRemoveStatus(
                status=NetworkManagementInclusion.FailedNodeRemoveStatus.
                Status.DONE),
        ),
    )
    assert status == NetworkManagementInclusion.FailedNodeRemoveStatus.Status.DONE
Exemple #8
0
async def test_getNodeInfo(gateway: ZIPGateway):
    # pylint: disable=line-too-long
    cachedNodeInfoReport = Message.decode(
        b"R\x04\x03\x1b\x9c\x9c\x00\x04\x10\x01^%'\x85\\pru\x86ZYszh#")

    gateway.send = sendNop
    [nodeInfo, _] = await asyncio.gather(
        gateway.getNodeInfo(1),
        runDelayed(gateway.commandReceived, cachedNodeInfoReport),
    )
    assert isinstance(nodeInfo, NetworkManagementProxy.NodeInfoCachedReport)
    assert nodeInfo == cachedNodeInfoReport
Exemple #9
0
def test_onUnsolicitedMessage(gateway: ZIPGateway):
    ip = ipaddress.IPv6Address("::ffff:c0a8:ee")
    gateway._nodes = {7: {"ip": ip}}
    pkt = b"#\x02\x80\xc0\xf9\x00\x00\x05\x84\x02\x00\x00%\x03\x00"
    assert gateway.onUnsolicitedMessage(pkt, (ip, 4123)) is True

    # Extract the flags from the call
    call = gateway.listener.messageReceived.mock_calls[1]
    args = call[1]
    flags = args[4]
    gateway.listener.messageReceived.assert_called_once_with(
        gateway, 7, 0, SwitchBinary.Report(value=0), flags)
    gateway._unsolicitedConnection.sendTo.assert_called_once_with(
        b"#\x02@\x00\xf9\x00\x00", (ip, 4123))
Exemple #10
0
async def test_setupUnsolicitedConnection(gateway: ZIPGateway):
    gateway._nodes = {1: {}}
    await asyncio.gather(
        gateway.setupUnsolicitedConnection(),
        runDelayed(
            gateway.commandReceived,
            ZipND.ZipNodeAdvertisement(
                local=False,
                validity=0,
                nodeId=1,
                ipv6=ipaddress.IPv6Address("2001:db8::1"),
                homeId=0x12345678,
            ),
        ),
    )
    assert gateway._nodes == {1: {"ip": IPv6("2001:db8::1")}}
Exemple #11
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
Exemple #12
0
async def test_setGatewayMode(gateway: ZIPGateway):
    async def runScript():
        await asyncio.sleep(0)
        gateway.commandReceived(ZipGateway.GatewayModeReport(mode=2))

    (retval, _) = await asyncio.gather(gateway.setGatewayMode(1), runScript())
    assert retval is True
Exemple #13
0
async def test_ipOfNode(gateway: ZIPGateway):
    # pylint: disable=line-too-long
    pkt = b"X\x01\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xc0\xa8\x00\xee\xea\xec\xfa\xf9"
    zipNodeAdvertisement = Message.decode(pkt)
    [reply, _] = await asyncio.gather(
        gateway.ipOfNode(6),
        runDelayed(gateway.commandReceived, zipNodeAdvertisement))
    assert reply == ipaddress.IPv6Address("::ffff:c0a8:ee")
Exemple #14
0
async def test_getNodeList(gateway: ZIPGateway):
    # pylint: disable=line-too-long
    nodeListReport = Message.decode(
        b"R\x02\x02\x00\x01!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    )

    async def dummySend(_msg):
        pass

    gateway.send = dummySend
    assert gateway.nodeId == 0
    [nodeList, _] = await asyncio.gather(
        gateway.getNodeList(),
        runDelayed(gateway.commandReceived, nodeListReport))
    assert nodeList == {1, 6}
    assert gateway._nodes == {1: {}, 6: {}}
    assert gateway.nodeId == 1
Exemple #15
0
async def test_removeNodeTimeout(gateway: ZIPGateway):
    gateway.send = sendTimeout
    assert await gateway.removeNode() is False
Exemple #16
0
async def test_removeNodeStop(gateway: ZIPGateway):
    gateway.send = sendNop
    assert await gateway.removeNodeStop() is True
Exemple #17
0
async def test_removeFailedNodeTimeout(gateway: ZIPGateway):
    gateway.sendAndReceive = sendAndReceiveTimeout
    assert (
        await gateway.removeFailedNode(42) is
        NetworkManagementInclusion.FailedNodeRemoveStatus.Status.REMOVE_FAIL)
Exemple #18
0
async def test_addNodeStopTimeout(gateway: ZIPGateway):
    gateway.send = sendTimeout
    assert await gateway.addNodeStop() is False
Exemple #19
0
def test_onUnsolicitedMessage_unknownNode(gateway: ZIPGateway):
    ip = ipaddress.IPv6Address("::ffff:c0a8:ee")
    gateway._nodes = {7: {"ip": ipaddress.IPv6Address("::ffff:c0a8:ef")}}
    pkt = b"#\x02\x00\xc0\xf9\x00\x00\x05\x84\x02\x00\x00%\x03\x00"
    assert gateway.onUnsolicitedMessage(pkt, (ip, )) is False
    gateway.listener.messageReceived.assert_not_called()
Exemple #20
0
async def test_getNodeInfo_timeout(gateway: ZIPGateway):
    gateway.sendAndReceive = sendAndReceiveTimeout
    nodeInfo = await gateway.getNodeInfo(1)
    assert isinstance(nodeInfo, NetworkManagementProxy.NodeInfoCachedReport)
Exemple #21
0
def test_onMessageReceived_noNode(gateway: ZIPGateway):
    gateway._connections = {2: DummyConnection()}
    gateway.onMessageReceived(DummyConnection(), Basic.Get())
    gateway.listener.messageReceived.assert_not_called()
Exemple #22
0
async def test_getMultiChannelCapability_timeout(gateway: ZIPGateway):
    gateway.sendAndReceive = sendAndReceiveTimeout
    report = await gateway.getMultiChannelCapability(1, 1)
    assert isinstance(report,
                      NetworkManagementProxy.MultiChannelCapabilityReport)
Exemple #23
0
async def test_addNodeTimeout(gateway: ZIPGateway):
    gateway.send = sendTimeout
    assert await gateway.addNode(TxOptions.TRANSMIT_OPTION_EXPLORE) is False
Exemple #24
0
async def test_addNode(gateway: ZIPGateway):
    gateway.send = sendNop
    assert await gateway.addNode(TxOptions.TRANSMIT_OPTION_EXPLORE) is True
Exemple #25
0
async def test_getNodeList_cached(gateway: ZIPGateway):
    gateway._nodes = {1: {}, 2: {}}
    assert await gateway.getNodeList() == {1, 2}
Exemple #26
0
async def test_connectToNode(gateway: ZIPGateway):
    gateway.ipOfNode = ipOfNode
    assert 2 not in gateway._connections
    assert await gateway.connectToNode(2)
    assert 2 in gateway._connections
Exemple #27
0
async def test_getNodeList_timeout(gateway: ZIPGateway):
    gateway.sendAndReceive = sendAndReceiveTimeout
    nodeList = await gateway.getNodeList()
    assert nodeList == set()
Exemple #28
0
async def test_getMultiChannelEndPoints_timeout(gateway: ZIPGateway):
    gateway.sendAndReceive = sendAndReceiveTimeout
    assert await gateway.getMultiChannelEndPoints(1) == 0
Exemple #29
0
async def test_addNodeDSKSet(gateway: ZIPGateway):
    gateway.send = sendNop
    assert await gateway.addNodeDSKSet(True, 0, b"") is True
Exemple #30
0
async def test_addNodeKeysSetTimeout(gateway: ZIPGateway):
    gateway.send = sendTimeout
    assert await gateway.addNodeKeysSet(False, True, 0) is False