Fix zwave_js config flow server version timeout (#46990)
This commit is contained in:
parent
424526db7e
commit
db8f597f10
2 changed files with 30 additions and 12 deletions
|
@ -41,6 +41,7 @@ TITLE = "Z-Wave JS"
|
|||
|
||||
ADDON_SETUP_TIMEOUT = 5
|
||||
ADDON_SETUP_TIMEOUT_ROUNDS = 4
|
||||
SERVER_VERSION_TIMEOUT = 10
|
||||
|
||||
ON_SUPERVISOR_SCHEMA = vol.Schema({vol.Optional(CONF_USE_ADDON, default=True): bool})
|
||||
STEP_USER_DATA_SCHEMA = vol.Schema({vol.Required(CONF_URL, default=DEFAULT_URL): str})
|
||||
|
@ -61,16 +62,16 @@ async def validate_input(hass: HomeAssistant, user_input: dict) -> VersionInfo:
|
|||
|
||||
async def async_get_version_info(hass: HomeAssistant, ws_address: str) -> VersionInfo:
|
||||
"""Return Z-Wave JS version info."""
|
||||
async with timeout(10):
|
||||
try:
|
||||
try:
|
||||
async with timeout(SERVER_VERSION_TIMEOUT):
|
||||
version_info: VersionInfo = await get_server_version(
|
||||
ws_address, async_get_clientsession(hass)
|
||||
)
|
||||
except (asyncio.TimeoutError, aiohttp.ClientError) as err:
|
||||
# We don't want to spam the log if the add-on isn't started
|
||||
# or takes a long time to start.
|
||||
_LOGGER.debug("Failed to connect to Z-Wave JS server: %s", err)
|
||||
raise CannotConnect from err
|
||||
except (asyncio.TimeoutError, aiohttp.ClientError) as err:
|
||||
# We don't want to spam the log if the add-on isn't started
|
||||
# or takes a long time to start.
|
||||
_LOGGER.debug("Failed to connect to Z-Wave JS server: %s", err)
|
||||
raise CannotConnect from err
|
||||
|
||||
return version_info
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ from zwave_js_server.version import VersionInfo
|
|||
|
||||
from homeassistant import config_entries, setup
|
||||
from homeassistant.components.hassio.handler import HassioAPIError
|
||||
from homeassistant.components.zwave_js.config_flow import TITLE
|
||||
from homeassistant.components.zwave_js.config_flow import SERVER_VERSION_TIMEOUT, TITLE
|
||||
from homeassistant.components.zwave_js.const import DOMAIN
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
@ -138,7 +138,7 @@ def server_version_side_effect_fixture():
|
|||
|
||||
|
||||
@pytest.fixture(name="get_server_version", autouse=True)
|
||||
def mock_get_server_version(server_version_side_effect):
|
||||
def mock_get_server_version(server_version_side_effect, server_version_timeout):
|
||||
"""Mock server version."""
|
||||
version_info = VersionInfo(
|
||||
driver_version="mock-driver-version",
|
||||
|
@ -149,10 +149,19 @@ def mock_get_server_version(server_version_side_effect):
|
|||
"homeassistant.components.zwave_js.config_flow.get_server_version",
|
||||
side_effect=server_version_side_effect,
|
||||
return_value=version_info,
|
||||
) as mock_version:
|
||||
) as mock_version, patch(
|
||||
"homeassistant.components.zwave_js.config_flow.SERVER_VERSION_TIMEOUT",
|
||||
new=server_version_timeout,
|
||||
):
|
||||
yield mock_version
|
||||
|
||||
|
||||
@pytest.fixture(name="server_version_timeout")
|
||||
def mock_server_version_timeout():
|
||||
"""Patch the timeout for getting server version."""
|
||||
return SERVER_VERSION_TIMEOUT
|
||||
|
||||
|
||||
@pytest.fixture(name="addon_setup_time", autouse=True)
|
||||
def mock_addon_setup_time():
|
||||
"""Mock add-on setup sleep time."""
|
||||
|
@ -198,22 +207,30 @@ async def test_manual(hass):
|
|||
assert result2["result"].unique_id == 1234
|
||||
|
||||
|
||||
async def slow_server_version(*args):
|
||||
"""Simulate a slow server version."""
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"url, server_version_side_effect, error",
|
||||
"url, server_version_side_effect, server_version_timeout, error",
|
||||
[
|
||||
(
|
||||
"not-ws-url",
|
||||
None,
|
||||
SERVER_VERSION_TIMEOUT,
|
||||
"invalid_ws_url",
|
||||
),
|
||||
(
|
||||
"ws://localhost:3000",
|
||||
asyncio.TimeoutError,
|
||||
slow_server_version,
|
||||
0,
|
||||
"cannot_connect",
|
||||
),
|
||||
(
|
||||
"ws://localhost:3000",
|
||||
Exception("Boom"),
|
||||
SERVER_VERSION_TIMEOUT,
|
||||
"unknown",
|
||||
),
|
||||
],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue