Exemple #1
0
async def test_connect(monkeypatch):
    api = deconz_api.Deconz()
    dev = mock.MagicMock()
    monkeypatch.setattr(
        uart, 'connect',
        mock.MagicMock(side_effect=asyncio.coroutine(mock.MagicMock())))
    await api.connect(dev, 115200)
Exemple #2
0
def api(event_loop):
    controller = mock.MagicMock(
        spec_set=zigpy_deconz.zigbee.application.ControllerApplication)
    api = deconz_api.Deconz(controller,
                            {zigpy.config.CONF_DEVICE_PATH: "/dev/null"})
    api._uart = mock.MagicMock()
    return api
Exemple #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
Exemple #4
0
async def test_connect():
    controller = mock.MagicMock(
        spec_set=zigpy_deconz.zigbee.application.ControllerApplication)
    api = deconz_api.Deconz(controller,
                            {zigpy.config.CONF_DEVICE_PATH: "/dev/null"})

    with mock.patch.object(uart, "connect", new=CoroutineMock()) as conn_mck:
        await api.connect()
        assert conn_mck.call_count == 1
        assert conn_mck.await_count == 1
        assert api._uart == conn_mck.return_value
Exemple #5
0
async def test_reconnect_multiple_attempts(connect_mock, caplog):
    api = deconz_api.Deconz(None, DEVICE_CONFIG)
    gw = MagicMock(spec_set=uart.Gateway)
    connect_mock.return_value = gw

    await api.connect()

    caplog.set_level(logging.DEBUG)
    connect_mock.reset_mock()
    connect_mock.side_effect = [asyncio.TimeoutError, OSError, gw]

    with patch("asyncio.sleep"):
        api.connection_lost("connection lost")
        await api._conn_lost_task

    assert api._uart is gw
    assert connect_mock.call_count == 3
Exemple #6
0
async def test_reconnect_multiple_disconnects(connect_mock, caplog):
    api = deconz_api.Deconz(None, DEVICE_CONFIG)
    gw = MagicMock(spec_set=uart.Gateway)
    connect_mock.return_value = gw

    await api.connect()

    caplog.set_level(logging.DEBUG)
    connect_mock.reset_mock()
    connect_mock.return_value = asyncio.Future()
    api.connection_lost("connection lost")
    await asyncio.sleep(0)
    connect_mock.return_value = sentinel.uart_reconnect
    api.connection_lost("connection lost 2")
    await asyncio.sleep(0)

    assert api._uart is sentinel.uart_reconnect
    assert connect_mock.call_count == 1
Exemple #7
0
async def test_reconnect_multiple_attempts(monkeypatch, caplog):
    api = deconz_api.Deconz(None, DEVICE_CONFIG)
    connect_mock = CoroutineMock()
    connect_mock.return_value = asyncio.Future()
    connect_mock.return_value.set_result(True)
    monkeypatch.setattr(uart, "connect", connect_mock)

    await api.connect()

    caplog.set_level(logging.DEBUG)
    connected = asyncio.Future()
    connected.set_result(mock.sentinel.uart_reconnect)
    connect_mock.reset_mock()
    connect_mock.side_effect = [asyncio.TimeoutError, OSError, connected]

    with mock.patch("asyncio.sleep"):
        api.connection_lost("connection lost")
        await api._conn_lost_task

    assert api._uart is mock.sentinel.uart_reconnect
    assert connect_mock.call_count == 3
Exemple #8
0
async def test_reconnect_multiple_disconnects(monkeypatch, caplog):
    api = deconz_api.Deconz(None, DEVICE_CONFIG)
    connect_mock = CoroutineMock()
    connect_mock.return_value = asyncio.Future()
    connect_mock.return_value.set_result(True)
    monkeypatch.setattr(uart, "connect", connect_mock)

    await api.connect()

    caplog.set_level(logging.DEBUG)
    connected = asyncio.Future()
    connected.set_result(mock.sentinel.uart_reconnect)
    connect_mock.reset_mock()
    connect_mock.side_effect = [asyncio.Future(), connected]
    api.connection_lost("connection lost")
    await asyncio.sleep(0.3)
    api.connection_lost("connection lost 2")
    await asyncio.sleep(0.3)

    assert "Cancelling reconnection attempt" in caplog.messages
    assert api._uart is mock.sentinel.uart_reconnect
    assert connect_mock.call_count == 2
Exemple #9
0
def api():
    api = deconz_api.Deconz()
    api._uart = mock.MagicMock()
    return api
Exemple #10
0
def app(monkeypatch, database_file=None):
    app = application.ControllerApplication(
        deconz_api.Deconz(), database_file=database_file
    )
    return app