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)
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
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
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
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
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
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
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
def api(): api = deconz_api.Deconz() api._uart = mock.MagicMock() return api
def app(monkeypatch, database_file=None): app = application.ControllerApplication( deconz_api.Deconz(), database_file=database_file ) return app