Example #1
0
async def test_change_network_state(app, support_watchdog):
    app._reset_watchdog_task = MagicMock()

    app._api.device_state = AsyncMock(side_effect=[
        (deconz_api.DeviceState(deconz_api.NetworkState.OFFLINE), 0, 0),
        (deconz_api.DeviceState(deconz_api.NetworkState.JOINING), 0, 0),
        (deconz_api.DeviceState(deconz_api.NetworkState.CONNECTED), 0, 0),
    ])

    if support_watchdog:
        app._api._proto_ver = application.PROTO_VER_WATCHDOG
        app._api.protocol_version = application.PROTO_VER_WATCHDOG
    else:
        app._api._proto_ver = application.PROTO_VER_WATCHDOG - 1
        app._api.protocol_version = application.PROTO_VER_WATCHDOG - 1

    old_watchdog_task = app._reset_watchdog_task
    cancel_mock = app._reset_watchdog_task.cancel = MagicMock()

    await app._change_network_state(deconz_api.NetworkState.CONNECTED,
                                    timeout=0.01)

    if support_watchdog:
        assert cancel_mock.call_count == 1
        assert app._reset_watchdog_task is not old_watchdog_task
    else:
        assert cancel_mock.call_count == 0
        assert app._reset_watchdog_task is old_watchdog_task
Example #2
0
async def test_start_network(app, proto_ver, nwk_state, error):
    app.load_network_info = AsyncMock()
    app.restore_neighbours = AsyncMock()
    app.add_endpoint = AsyncMock()
    app._change_network_state = AsyncMock(side_effect=error)

    app._api.device_state = AsyncMock(
        return_value=(deconz_api.DeviceState(nwk_state), 0, 0))
    app._api._proto_ver = proto_ver
    app._api.protocol_version = proto_ver

    if nwk_state != deconz_api.NetworkState.CONNECTED and error is not None:
        with pytest.raises(zigpy.exceptions.FormationFailure):
            await app.start_network()

        return

    with patch.object(application.DeconzDevice, "initialize", AsyncMock()):
        await app.start_network()
        assert app.load_network_info.await_count == 1
        assert app._change_network_state.await_count == 1

        assert (app._change_network_state.await_args_list[0][0][0] ==
                deconz_api.NetworkState.CONNECTED)

        if proto_ver >= application.PROTO_VER_NEIGBOURS:
            assert app.restore_neighbours.await_count == 1
        else:
            assert app.restore_neighbours.await_count == 0
Example #3
0
async def test_startup(
    protocol_ver, watchdog_cc, app, nwk_state, designed_coord, form_count, version=0
):
    async def _version():
        app._api._proto_ver = protocol_ver
        return [version]

    async def _read_param(param, *args):
        if param == deconz_api.NetworkParameter.mac_address:
            return (t.EUI64([0x01] * 8),)
        return (designed_coord,)

    app._reset_watchdog = AsyncMock()
    app.form_network = AsyncMock()
    app._delayed_neighbour_scan = AsyncMock()

    app._api._command = AsyncMock()
    api = deconz_api.Deconz(app, app._config[zigpy.config.CONF_DEVICE])
    api.connect = AsyncMock()
    api._command = AsyncMock()
    api.device_state = AsyncMock(return_value=(deconz_api.DeviceState(nwk_state), 0, 0))
    api.read_parameter = AsyncMock(side_effect=_read_param)
    api.version = MagicMock(side_effect=_version)
    api.write_parameter = AsyncMock()

    p2 = patch(
        "zigpy_deconz.zigbee.application.DeconzDevice.new",
        new=AsyncMock(return_value=zigpy.device.Device(app, sentinel.ieee, 0x0000)),
    )
    with patch.object(application, "Deconz", return_value=api), p2:
        await app.startup(auto_form=False)
        assert app.form_network.call_count == 0
        assert app._reset_watchdog.call_count == watchdog_cc
        await app.startup(auto_form=True)
        assert app.form_network.call_count == form_count
Example #4
0
async def test_form_network(app, api):
    """Test network forming."""

    await app.form_network()
    assert api.change_network_state.await_count == 2
    assert (
        api.change_network_state.call_args_list[0][0][0]
        == deconz_api.NetworkState.OFFLINE
    )
    assert (
        api.change_network_state.call_args_list[1][0][0]
        == deconz_api.NetworkState.CONNECTED
    )
    assert api.write_parameter.await_count >= 3
    assert (
        api.write_parameter.await_args_list[0][0][0]
        == deconz_api.NetworkParameter.aps_designed_coordinator
    )
    assert api.write_parameter.await_args_list[0][0][1] == 1

    api.device_state.return_value = (
        deconz_api.DeviceState(deconz_api.NetworkState.JOINING),
        0,
        0,
    )
    with pytest.raises(Exception):
        await app.form_network()
Example #5
0
async def test_form_network(app):
    app._api.change_network_state = mock.MagicMock(
        side_effect=asyncio.coroutine(mock.MagicMock())
    )
    app._api.device_state = mock.MagicMock(
        side_effect=asyncio.coroutine(mock.MagicMock())
    )

    app._api._device_state = deconz_api.DeviceState(2)
    await app.form_network()
    assert app._api.device_state.call_count == 0

    app._api._device_state = deconz_api.DeviceState(0)
    application.CHANGE_NETWORK_WAIT = 0.001
    with pytest.raises(Exception):
        await app.form_network()
    assert app._api.device_state.call_count == 10
Example #6
0
def api():
    """Return API fixture."""
    api = MagicMock(spec_set=zigpy_deconz.api.Deconz)
    api.device_state = AsyncMock(
        return_value=(deconz_api.DeviceState(deconz_api.NetworkState.CONNECTED), 0, 0)
    )
    api.write_parameter = AsyncMock()
    api.change_network_state = AsyncMock()
    return api
Example #7
0
def api():
    """Return API fixture."""
    api = MagicMock(spec_set=zigpy_deconz.api.Deconz(None, None))
    api.device_state = AsyncMock(return_value=(
        deconz_api.DeviceState(deconz_api.NetworkState.CONNECTED), 0, 0))
    api.write_parameter = AsyncMock()

    # So the protocol version is effectively infinite
    api._proto_ver.__ge__.return_value = True
    api._proto_ver.__lt__.return_value = False

    api.protocol_version.__ge__.return_value = True
    api.protocol_version.__lt__.return_value = False

    return api