Use async_capture_events to avoid running in executor (#47111)

This commit is contained in:
Paulus Schoutsen 2021-02-26 13:28:52 -08:00 committed by GitHub
parent b1898cc176
commit 7c2545af6e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 39 additions and 51 deletions

View file

@ -26,7 +26,7 @@ from homeassistant.components.media_player.const import (
import homeassistant.components.vacuum as vacuum
from homeassistant.config import async_process_ha_core_config
from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT
from homeassistant.core import Context, callback
from homeassistant.core import Context
from homeassistant.helpers import entityfilter
from homeassistant.setup import async_setup_component
@ -42,17 +42,13 @@ from . import (
reported_properties,
)
from tests.common import async_mock_service
from tests.common import async_capture_events, async_mock_service
@pytest.fixture
def events(hass):
"""Fixture that catches alexa events."""
events = []
hass.bus.async_listen(
smart_home.EVENT_ALEXA_SMART_HOME, callback(lambda e: events.append(e))
)
yield events
return async_capture_events(hass, smart_home.EVENT_ALEXA_SMART_HOME)
@pytest.fixture

View file

@ -30,7 +30,12 @@ from homeassistant.exceptions import HomeAssistantError, Unauthorized
from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util
from tests.common import assert_setup_component, async_mock_service, mock_restore_cache
from tests.common import (
assert_setup_component,
async_capture_events,
async_mock_service,
mock_restore_cache,
)
from tests.components.logbook.test_init import MockLazyEventPartialState
@ -496,10 +501,7 @@ async def test_reload_config_service(hass, calls, hass_admin_user, hass_read_onl
assert len(calls) == 1
assert calls[0].data.get("event") == "test_event"
test_reload_event = []
hass.bus.async_listen(
EVENT_AUTOMATION_RELOADED, lambda event: test_reload_event.append(event)
)
test_reload_event = async_capture_events(hass, EVENT_AUTOMATION_RELOADED)
with patch(
"homeassistant.config.load_yaml_config_file",

View file

@ -12,7 +12,7 @@ from homeassistant.core import callback
from homeassistant.helpers import discovery
from homeassistant.setup import async_setup_component
from tests.common import assert_setup_component
from tests.common import assert_setup_component, async_capture_events
CONFIG = {notify.DOMAIN: {"platform": "demo"}}
@ -20,9 +20,7 @@ CONFIG = {notify.DOMAIN: {"platform": "demo"}}
@pytest.fixture
def events(hass):
"""Fixture that catches notify events."""
events = []
hass.bus.async_listen(demo.EVENT_NOTIFY, callback(lambda e: events.append(e)))
yield events
return async_capture_events(hass, demo.EVENT_NOTIFY)
@pytest.fixture

View file

@ -30,7 +30,12 @@ from homeassistant.setup import async_setup_component
from . import BASIC_CONFIG, MockConfig
from tests.common import mock_area_registry, mock_device_registry, mock_registry
from tests.common import (
async_capture_events,
mock_area_registry,
mock_device_registry,
mock_registry,
)
REQ_ID = "ff36a3cc-ec34-11e6-b1a0-64510650abcf"
@ -77,8 +82,7 @@ async def test_sync_message(hass):
},
)
events = []
hass.bus.async_listen(EVENT_SYNC_RECEIVED, events.append)
events = async_capture_events(hass, EVENT_SYNC_RECEIVED)
result = await sh.async_handle_message(
hass,
@ -192,8 +196,7 @@ async def test_sync_in_area(area_on_device, hass, registries):
config = MockConfig(should_expose=lambda _: True, entity_config={})
events = []
hass.bus.async_listen(EVENT_SYNC_RECEIVED, events.append)
events = async_capture_events(hass, EVENT_SYNC_RECEIVED)
result = await sh.async_handle_message(
hass,
@ -295,8 +298,7 @@ async def test_query_message(hass):
light3.entity_id = "light.color_temp_light"
await light3.async_update_ha_state()
events = []
hass.bus.async_listen(EVENT_QUERY_RECEIVED, events.append)
events = async_capture_events(hass, EVENT_QUERY_RECEIVED)
result = await sh.async_handle_message(
hass,
@ -387,11 +389,8 @@ async def test_execute(hass):
"light", "turn_off", {"entity_id": "light.ceiling_lights"}, blocking=True
)
events = []
hass.bus.async_listen(EVENT_COMMAND_RECEIVED, events.append)
service_events = []
hass.bus.async_listen(EVENT_CALL_SERVICE, service_events.append)
events = async_capture_events(hass, EVENT_COMMAND_RECEIVED)
service_events = async_capture_events(hass, EVENT_CALL_SERVICE)
result = await sh.async_handle_message(
hass,
@ -570,8 +569,7 @@ async def test_raising_error_trait(hass):
{ATTR_MIN_TEMP: 15, ATTR_MAX_TEMP: 30, ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS},
)
events = []
hass.bus.async_listen(EVENT_COMMAND_RECEIVED, events.append)
events = async_capture_events(hass, EVENT_COMMAND_RECEIVED)
await hass.async_block_till_done()
result = await sh.async_handle_message(
@ -660,8 +658,7 @@ async def test_unavailable_state_does_sync(hass):
light._available = False # pylint: disable=protected-access
await light.async_update_ha_state()
events = []
hass.bus.async_listen(EVENT_SYNC_RECEIVED, events.append)
events = async_capture_events(hass, EVENT_SYNC_RECEIVED)
result = await sh.async_handle_message(
hass,

View file

@ -54,7 +54,7 @@ from homeassistant.util import color
from . import BASIC_CONFIG, MockConfig
from tests.common import async_mock_service
from tests.common import async_capture_events, async_mock_service
REQ_ID = "ff36a3cc-ec34-11e6-b1a0-64510650abcf"
@ -84,8 +84,7 @@ async def test_brightness_light(hass):
assert trt.query_attributes() == {"brightness": 95}
events = []
hass.bus.async_listen(EVENT_CALL_SERVICE, events.append)
events = async_capture_events(hass, EVENT_CALL_SERVICE)
calls = async_mock_service(hass, light.DOMAIN, light.SERVICE_TURN_ON)
await trt.execute(

View file

@ -8,17 +8,14 @@ from homeassistant.components.homeassistant import scene as ha_scene
from homeassistant.components.homeassistant.scene import EVENT_SCENE_RELOADED
from homeassistant.setup import async_setup_component
from tests.common import async_mock_service
from tests.common import async_capture_events, async_mock_service
async def test_reload_config_service(hass):
"""Test the reload config service."""
assert await async_setup_component(hass, "scene", {})
test_reloaded_event = []
hass.bus.async_listen(
EVENT_SCENE_RELOADED, lambda event: test_reloaded_event.append(event)
)
test_reloaded_event = async_capture_events(hass, EVENT_SCENE_RELOADED)
with patch(
"homeassistant.config.load_yaml_config_file",

View file

@ -5,7 +5,8 @@ from pyhap.accessory_driver import AccessoryDriver
import pytest
from homeassistant.components.homekit.const import EVENT_HOMEKIT_CHANGED
from homeassistant.core import callback as ha_callback
from tests.common import async_capture_events
@pytest.fixture
@ -24,8 +25,4 @@ def hk_driver(loop):
@pytest.fixture
def events(hass):
"""Yield caught homekit_changed events."""
events = []
hass.bus.async_listen(
EVENT_HOMEKIT_CHANGED, ha_callback(lambda e: events.append(e))
)
yield events
return async_capture_events(hass, EVENT_HOMEKIT_CHANGED)

View file

@ -10,10 +10,14 @@ from homeassistant.components.shelly.const import (
DOMAIN,
EVENT_SHELLY_CLICK,
)
from homeassistant.core import callback as ha_callback
from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry, async_mock_service, mock_device_registry
from tests.common import (
MockConfigEntry,
async_capture_events,
async_mock_service,
mock_device_registry,
)
MOCK_SETTINGS = {
"name": "Test name",
@ -81,9 +85,7 @@ def calls(hass):
@pytest.fixture
def events(hass):
"""Yield caught shelly_click events."""
ha_events = []
hass.bus.async_listen(EVENT_SHELLY_CLICK, ha_callback(ha_events.append))
yield ha_events
return async_capture_events(hass, EVENT_SHELLY_CLICK)
@pytest.fixture