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
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
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_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()
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
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
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