async def test_shutdown_run_callback_threadsafe(hass): """Test we can shutdown run_callback_threadsafe.""" hasync.shutdown_run_callback_threadsafe(hass.loop) callback = MagicMock() with pytest.raises(RuntimeError): hasync.run_callback_threadsafe(hass.loop, callback)
async def test_callback_is_always_scheduled(hass): """Test run_callback_threadsafe always calls call_soon_threadsafe before checking for shutdown.""" # We have to check the shutdown state AFTER the callback is scheduled otherwise # the function could continue on and the caller call `future.result()` after # the point in the main thread where callbacks are no longer run. callback = MagicMock() hasync.shutdown_run_callback_threadsafe(hass.loop) with patch.object(hass.loop, "call_soon_threadsafe") as mock_call_soon_threadsafe: with pytest.raises(RuntimeError): hasync.run_callback_threadsafe(hass.loop, callback) mock_call_soon_threadsafe.assert_called_once()