From d045e8678ddf2d05bf42befc56e73246af3e4b9d Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 25 Apr 2022 14:23:52 +0200 Subject: [PATCH] Use recorder test fixtures in tests (#70652) --- tests/components/recorder/test_init.py | 37 ++++++++++++-------------- tests/components/recorder/test_util.py | 19 ++++++++----- tests/helpers/test_recorder.py | 9 ++++--- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/tests/components/recorder/test_init.py b/tests/components/recorder/test_init.py index b0b2ed10580..aad6d3df0f3 100644 --- a/tests/components/recorder/test_init.py +++ b/tests/components/recorder/test_init.py @@ -56,7 +56,6 @@ from .common import async_wait_recording_done, corrupt_db_file, wait_recording_d from tests.common import ( SetupRecorderInstanceT, async_fire_time_changed, - async_init_recorder_component, fire_time_changed, get_test_home_assistant, ) @@ -79,7 +78,9 @@ def _default_recorder(hass): ) -async def test_shutdown_before_startup_finishes(hass, tmp_path): +async def test_shutdown_before_startup_finishes( + hass: HomeAssistant, async_setup_recorder_instance: SetupRecorderInstanceT, tmp_path +): """Test shutdown before recorder starts is clean.""" # On-disk database because this test does not play nice with the @@ -90,7 +91,7 @@ async def test_shutdown_before_startup_finishes(hass, tmp_path): } hass.state = CoreState.not_running - await async_init_recorder_component(hass, config) + await async_setup_recorder_instance(hass, config) await hass.data[DATA_INSTANCE].async_db_ready await hass.async_block_till_done() @@ -138,7 +139,7 @@ async def test_state_gets_saved_when_set_before_start_event( hass.state = CoreState.not_running - await async_init_recorder_component(hass) + await async_setup_recorder_instance(hass) entity_id = "test.recorder" state = "restoring_from_db" @@ -156,12 +157,8 @@ async def test_state_gets_saved_when_set_before_start_event( assert db_states[0].event_id > 0 -async def test_saving_state( - hass: HomeAssistant, async_setup_recorder_instance: SetupRecorderInstanceT -): +async def test_saving_state(hass: HomeAssistant, recorder_mock): """Test saving and restoring a state.""" - await async_setup_recorder_instance(hass) - entity_id = "test.recorder" state = "restoring_from_db" attributes = {"test_attr": 5, "test_attr_10": "nice"} @@ -209,11 +206,9 @@ async def test_saving_many_states( async def test_saving_state_with_intermixed_time_changes( - hass: HomeAssistant, async_setup_recorder_instance: SetupRecorderInstanceT + hass: HomeAssistant, recorder_mock ): """Test saving states with intermixed time changes.""" - await async_setup_recorder_instance(hass) - entity_id = "test.recorder" state = "restoring_from_db" attributes = {"test_attr": 5, "test_attr_10": "nice"} @@ -1297,14 +1292,16 @@ def test_entity_id_filter(hass_recorder): assert len(db_events) == idx + 1, data -async def test_database_lock_and_unlock(hass: HomeAssistant, tmp_path): +async def test_database_lock_and_unlock( + hass: HomeAssistant, async_setup_recorder_instance: SetupRecorderInstanceT, tmp_path +): """Test writing events during lock getting written after unlocking.""" # Use file DB, in memory DB cannot do write locks. config = { recorder.CONF_COMMIT_INTERVAL: 0, recorder.CONF_DB_URL: "sqlite:///" + str(tmp_path / "pytest.db"), } - await async_init_recorder_component(hass, config) + await async_setup_recorder_instance(hass, config) await hass.async_block_till_done() instance: Recorder = hass.data[DATA_INSTANCE] @@ -1334,14 +1331,16 @@ async def test_database_lock_and_unlock(hass: HomeAssistant, tmp_path): assert len(db_events) == 1 -async def test_database_lock_and_overflow(hass: HomeAssistant, tmp_path): +async def test_database_lock_and_overflow( + hass: HomeAssistant, async_setup_recorder_instance: SetupRecorderInstanceT, tmp_path +): """Test writing events during lock leading to overflow the queue causes the database to unlock.""" # Use file DB, in memory DB cannot do write locks. config = { recorder.CONF_COMMIT_INTERVAL: 0, recorder.CONF_DB_URL: "sqlite:///" + str(tmp_path / "pytest.db"), } - await async_init_recorder_component(hass, config) + await async_setup_recorder_instance(hass, config) await hass.async_block_till_done() instance: Recorder = hass.data[DATA_INSTANCE] @@ -1366,9 +1365,8 @@ async def test_database_lock_and_overflow(hass: HomeAssistant, tmp_path): assert not instance.unlock_database() -async def test_database_lock_timeout(hass): +async def test_database_lock_timeout(hass, recorder_mock): """Test locking database timeout when recorder stopped.""" - await async_init_recorder_component(hass) hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP) instance: Recorder = hass.data[DATA_INSTANCE] @@ -1390,9 +1388,8 @@ async def test_database_lock_timeout(hass): block_task.event.set() -async def test_database_lock_without_instance(hass): +async def test_database_lock_without_instance(hass, recorder_mock): """Test database lock doesn't fail if instance is not initialized.""" - await async_init_recorder_component(hass) hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP) instance: Recorder = hass.data[DATA_INSTANCE] diff --git a/tests/components/recorder/test_util.py b/tests/components/recorder/test_util.py index db702b3a3e3..9f2a1a08e46 100644 --- a/tests/components/recorder/test_util.py +++ b/tests/components/recorder/test_util.py @@ -18,11 +18,12 @@ from homeassistant.components.recorder.util import ( session_scope, ) from homeassistant.const import EVENT_HOMEASSISTANT_STOP +from homeassistant.core import HomeAssistant from homeassistant.util import dt as dt_util from .common import corrupt_db_file -from tests.common import async_init_recorder_component, async_test_home_assistant +from tests.common import SetupRecorderInstanceT, async_test_home_assistant def test_session_scope_not_setup(hass_recorder): @@ -96,7 +97,9 @@ def test_validate_or_move_away_sqlite_database(hass, tmpdir, caplog): assert util.validate_or_move_away_sqlite_database(dburl) is True -async def test_last_run_was_recently_clean(hass, tmp_path): +async def test_last_run_was_recently_clean( + loop, async_setup_recorder_instance: SetupRecorderInstanceT, tmp_path +): """Test we can check if the last recorder run was recently clean.""" config = { recorder.CONF_DB_URL: "sqlite:///" + str(tmp_path / "pytest.db"), @@ -116,7 +119,7 @@ async def test_last_run_was_recently_clean(hass, tmp_path): "homeassistant.components.recorder.util.last_run_was_recently_clean", wraps=_last_run_was_recently_clean, ) as last_run_was_recently_clean_mock: - await async_init_recorder_component(hass, config) + await async_setup_recorder_instance(hass, config) await hass.async_block_till_done() last_run_was_recently_clean_mock.assert_not_called() @@ -130,7 +133,7 @@ async def test_last_run_was_recently_clean(hass, tmp_path): wraps=_last_run_was_recently_clean, ) as last_run_was_recently_clean_mock: hass = await async_test_home_assistant(None) - await async_init_recorder_component(hass, config) + await async_setup_recorder_instance(hass, config) last_run_was_recently_clean_mock.assert_called_once() assert return_values[-1] is True @@ -149,7 +152,7 @@ async def test_last_run_was_recently_clean(hass, tmp_path): return_value=thirty_min_future_time, ): hass = await async_test_home_assistant(None) - await async_init_recorder_component(hass, config) + await async_setup_recorder_instance(hass, config) last_run_was_recently_clean_mock.assert_called_once() assert return_values[-1] is False @@ -594,7 +597,9 @@ def test_periodic_db_cleanups(hass_recorder): assert str(text_obj) == "PRAGMA wal_checkpoint(TRUNCATE);" -async def test_write_lock_db(hass, tmp_path): +async def test_write_lock_db( + hass: HomeAssistant, async_setup_recorder_instance: SetupRecorderInstanceT, tmp_path +): """Test database write lock.""" from sqlalchemy.exc import OperationalError @@ -602,7 +607,7 @@ async def test_write_lock_db(hass, tmp_path): config = { recorder.CONF_DB_URL: "sqlite:///" + str(tmp_path / "pytest.db?timeout=0.1") } - await async_init_recorder_component(hass, config) + await async_setup_recorder_instance(hass, config) await hass.async_block_till_done() instance = hass.data[DATA_INSTANCE] diff --git a/tests/helpers/test_recorder.py b/tests/helpers/test_recorder.py index c0663cba165..9410117acb4 100644 --- a/tests/helpers/test_recorder.py +++ b/tests/helpers/test_recorder.py @@ -2,12 +2,15 @@ from unittest.mock import patch +from homeassistant.core import HomeAssistant from homeassistant.helpers import recorder -from tests.common import async_init_recorder_component +from tests.common import SetupRecorderInstanceT -async def test_async_migration_in_progress(hass): +async def test_async_migration_in_progress( + hass: HomeAssistant, async_setup_recorder_instance: SetupRecorderInstanceT +): """Test async_migration_in_progress wraps the recorder.""" with patch( "homeassistant.components.recorder.util.async_migration_in_progress", @@ -22,7 +25,7 @@ async def test_async_migration_in_progress(hass): ): assert recorder.async_migration_in_progress(hass) is False - await async_init_recorder_component(hass) + await async_setup_recorder_instance(hass) # The recorder is now loaded with patch(