106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
"""Tests for the system health component init."""
|
|
import asyncio
|
|
from unittest.mock import Mock
|
|
|
|
import pytest
|
|
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from tests.common import mock_coro
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_system_info(hass):
|
|
"""Mock system info."""
|
|
hass.helpers.system_info.async_get_system_info = Mock(
|
|
return_value=mock_coro({'hello': True})
|
|
)
|
|
|
|
|
|
async def test_info_endpoint_return_info(hass, hass_ws_client,
|
|
mock_system_info):
|
|
"""Test that the info endpoint works."""
|
|
assert await async_setup_component(hass, 'system_health', {})
|
|
client = await hass_ws_client(hass)
|
|
|
|
resp = await client.send_json({
|
|
'id': 6,
|
|
'type': 'system_health/info',
|
|
})
|
|
resp = await client.receive_json()
|
|
assert resp['success']
|
|
data = resp['result']
|
|
|
|
assert len(data) == 1
|
|
data = data['homeassistant']
|
|
assert data == {'hello': True}
|
|
|
|
|
|
async def test_info_endpoint_register_callback(hass, hass_ws_client,
|
|
mock_system_info):
|
|
"""Test that the info endpoint allows registering callbacks."""
|
|
async def mock_info(hass):
|
|
return {'storage': 'YAML'}
|
|
|
|
hass.components.system_health.async_register_info('lovelace', mock_info)
|
|
assert await async_setup_component(hass, 'system_health', {})
|
|
client = await hass_ws_client(hass)
|
|
|
|
resp = await client.send_json({
|
|
'id': 6,
|
|
'type': 'system_health/info',
|
|
})
|
|
resp = await client.receive_json()
|
|
assert resp['success']
|
|
data = resp['result']
|
|
|
|
assert len(data) == 2
|
|
data = data['lovelace']
|
|
assert data == {'storage': 'YAML'}
|
|
|
|
|
|
async def test_info_endpoint_register_callback_timeout(hass, hass_ws_client,
|
|
mock_system_info):
|
|
"""Test that the info endpoint timing out."""
|
|
async def mock_info(hass):
|
|
raise asyncio.TimeoutError
|
|
|
|
hass.components.system_health.async_register_info('lovelace', mock_info)
|
|
assert await async_setup_component(hass, 'system_health', {})
|
|
client = await hass_ws_client(hass)
|
|
|
|
resp = await client.send_json({
|
|
'id': 6,
|
|
'type': 'system_health/info',
|
|
})
|
|
resp = await client.receive_json()
|
|
assert resp['success']
|
|
data = resp['result']
|
|
|
|
assert len(data) == 2
|
|
data = data['lovelace']
|
|
assert data == {'error': 'Fetching info timed out'}
|
|
|
|
|
|
async def test_info_endpoint_register_callback_exc(hass, hass_ws_client,
|
|
mock_system_info):
|
|
"""Test that the info endpoint requires auth."""
|
|
async def mock_info(hass):
|
|
raise Exception("TEST ERROR")
|
|
|
|
hass.components.system_health.async_register_info('lovelace', mock_info)
|
|
assert await async_setup_component(hass, 'system_health', {})
|
|
client = await hass_ws_client(hass)
|
|
|
|
resp = await client.send_json({
|
|
'id': 6,
|
|
'type': 'system_health/info',
|
|
})
|
|
resp = await client.receive_json()
|
|
assert resp['success']
|
|
data = resp['result']
|
|
|
|
assert len(data) == 2
|
|
data = data['lovelace']
|
|
assert data == {'error': 'TEST ERROR'}
|