Fix creating cert_expiry configs during runtime (#56298)

* Fix creating cert_expiry configs during runtime

* Address review feedback on tests

* Improve delayed startup test
This commit is contained in:
jjlawren 2021-09-18 12:54:54 -05:00 committed by GitHub
parent 312a9e5df2
commit f31b9eae61
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 15 deletions

View file

@ -7,7 +7,7 @@ from typing import Optional
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STARTED
from homeassistant.core import HomeAssistant
from homeassistant.core import CoreState, HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DEFAULT_PORT, DOMAIN
@ -38,9 +38,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await coordinator.async_refresh()
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
entry.async_on_unload(
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, async_finish_startup)
)
if hass.state == CoreState.running:
await async_finish_startup(None)
else:
entry.async_on_unload(
hass.bus.async_listen_once(
EVENT_HOMEASSISTANT_STARTED, async_finish_startup
)
)
return True

View file

@ -12,6 +12,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STARTED,
STATE_UNAVAILABLE,
)
from homeassistant.core import CoreState
from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util
@ -23,6 +24,8 @@ from tests.common import MockConfigEntry, async_fire_time_changed
async def test_setup_with_config(hass):
"""Test setup component with config."""
assert hass.state is CoreState.running
config = {
SENSOR_DOMAIN: [
{"platform": DOMAIN, CONF_HOST: HOST, CONF_PORT: PORT},
@ -49,6 +52,8 @@ async def test_setup_with_config(hass):
async def test_update_unique_id(hass):
"""Test updating a config entry without a unique_id."""
assert hass.state is CoreState.running
entry = MockConfigEntry(domain=DOMAIN, data={CONF_HOST: HOST, CONF_PORT: PORT})
entry.add_to_hass(hass)
@ -71,6 +76,8 @@ async def test_update_unique_id(hass):
@patch("homeassistant.util.dt.utcnow", return_value=static_datetime())
async def test_unload_config_entry(mock_now, hass):
"""Test unloading a config entry."""
assert hass.state is CoreState.running
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: HOST, CONF_PORT: PORT},
@ -107,3 +114,35 @@ async def test_unload_config_entry(mock_now, hass):
await hass.async_block_till_done()
state = hass.states.get("sensor.cert_expiry_timestamp_example_com")
assert state is None
async def test_delay_load_during_startup(hass):
"""Test delayed loading of a config entry during startup."""
hass.state = CoreState.not_running
entry = MockConfigEntry(domain=DOMAIN, data={CONF_HOST: HOST, CONF_PORT: PORT})
entry.add_to_hass(hass)
assert await async_setup_component(hass, DOMAIN, {}) is True
await hass.async_block_till_done()
assert hass.state is CoreState.not_running
assert entry.state is ConfigEntryState.LOADED
state = hass.states.get("sensor.cert_expiry_timestamp_example_com")
assert state is None
timestamp = future_timestamp(100)
with patch(
"homeassistant.components.cert_expiry.get_cert_expiry_timestamp",
return_value=timestamp,
):
await hass.async_start()
await hass.async_block_till_done()
assert hass.state is CoreState.running
state = hass.states.get("sensor.cert_expiry_timestamp_example_com")
assert state.state == timestamp.isoformat()
assert state.attributes.get("error") == "None"
assert state.attributes.get("is_valid")

View file

@ -5,13 +5,8 @@ import ssl
from unittest.mock import patch
from homeassistant.components.cert_expiry.const import DOMAIN
from homeassistant.const import (
CONF_HOST,
CONF_PORT,
EVENT_HOMEASSISTANT_STARTED,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
)
from homeassistant.const import CONF_HOST, CONF_PORT, STATE_UNAVAILABLE, STATE_UNKNOWN
from homeassistant.core import CoreState
from homeassistant.util.dt import utcnow
from .const import HOST, PORT
@ -23,6 +18,8 @@ from tests.common import MockConfigEntry, async_fire_time_changed
@patch("homeassistant.util.dt.utcnow", return_value=static_datetime())
async def test_async_setup_entry(mock_now, hass):
"""Test async_setup_entry."""
assert hass.state is CoreState.running
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: HOST, CONF_PORT: PORT},
@ -37,7 +34,6 @@ async def test_async_setup_entry(mock_now, hass):
):
entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(entry.entry_id)
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
await hass.async_block_till_done()
state = hass.states.get("sensor.cert_expiry_timestamp_example_com")
@ -50,6 +46,8 @@ async def test_async_setup_entry(mock_now, hass):
async def test_async_setup_entry_bad_cert(hass):
"""Test async_setup_entry with a bad/expired cert."""
assert hass.state is CoreState.running
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: HOST, CONF_PORT: PORT},
@ -62,7 +60,6 @@ async def test_async_setup_entry_bad_cert(hass):
):
entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(entry.entry_id)
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
await hass.async_block_till_done()
state = hass.states.get("sensor.cert_expiry_timestamp_example_com")
@ -74,6 +71,8 @@ async def test_async_setup_entry_bad_cert(hass):
async def test_update_sensor(hass):
"""Test async_update for sensor."""
assert hass.state is CoreState.running
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: HOST, CONF_PORT: PORT},
@ -89,7 +88,6 @@ async def test_update_sensor(hass):
):
entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(entry.entry_id)
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
await hass.async_block_till_done()
state = hass.states.get("sensor.cert_expiry_timestamp_example_com")
@ -117,6 +115,8 @@ async def test_update_sensor(hass):
async def test_update_sensor_network_errors(hass):
"""Test async_update for sensor."""
assert hass.state is CoreState.running
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: HOST, CONF_PORT: PORT},
@ -132,7 +132,6 @@ async def test_update_sensor_network_errors(hass):
):
entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(entry.entry_id)
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
await hass.async_block_till_done()
state = hass.states.get("sensor.cert_expiry_timestamp_example_com")