mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Improve error handling (#24204)
This commit is contained in:
parent
f32d1c0dea
commit
6f299e7245
@ -135,15 +135,15 @@ class Scanner:
|
|||||||
if not xml:
|
if not xml:
|
||||||
resp = await session.get(xml_location, timeout=5)
|
resp = await session.get(xml_location, timeout=5)
|
||||||
xml = await resp.text()
|
xml = await resp.text()
|
||||||
except aiohttp.ClientError as err:
|
except (aiohttp.ClientError, asyncio.TimeoutError) as err:
|
||||||
_LOGGER.debug("Error fetching %s: %s", xml_location, err)
|
_LOGGER.debug("Error fetching %s: %s", xml_location, err)
|
||||||
return None
|
return {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tree = ElementTree.fromstring(xml)
|
tree = ElementTree.fromstring(xml)
|
||||||
except ElementTree.ParseError as err:
|
except ElementTree.ParseError as err:
|
||||||
_LOGGER.debug("Error parsing %s: %s", xml_location, err)
|
_LOGGER.debug("Error parsing %s: %s", xml_location, err)
|
||||||
return None
|
return {}
|
||||||
|
|
||||||
return util.etree_to_dict(tree).get('root', {}).get('device', {})
|
return util.etree_to_dict(tree).get('root', {}).get('device', {})
|
||||||
|
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
"""Test the SSDP integration."""
|
"""Test the SSDP integration."""
|
||||||
|
import asyncio
|
||||||
from unittest.mock import patch, Mock
|
from unittest.mock import patch, Mock
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
import pytest
|
||||||
|
|
||||||
from homeassistant.generated import ssdp as gn_ssdp
|
from homeassistant.generated import ssdp as gn_ssdp
|
||||||
from homeassistant.components import ssdp
|
from homeassistant.components import ssdp
|
||||||
|
|
||||||
@ -76,3 +80,28 @@ async def test_scan_match_device_type(hass, aioclient_mock):
|
|||||||
assert len(mock_init.mock_calls) == 1
|
assert len(mock_init.mock_calls) == 1
|
||||||
assert mock_init.mock_calls[0][1][0] == 'mock-domain'
|
assert mock_init.mock_calls[0][1][0] == 'mock-domain'
|
||||||
assert mock_init.mock_calls[0][2]['context'] == {'source': 'ssdp'}
|
assert mock_init.mock_calls[0][2]['context'] == {'source': 'ssdp'}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('exc', [asyncio.TimeoutError, aiohttp.ClientError])
|
||||||
|
async def test_scan_description_fetch_fail(hass, aioclient_mock, exc):
|
||||||
|
"""Test failing to fetch description."""
|
||||||
|
aioclient_mock.get('http://1.1.1.1', exc=exc)
|
||||||
|
scanner = ssdp.Scanner(hass)
|
||||||
|
|
||||||
|
with patch('netdisco.ssdp.scan', return_value=[
|
||||||
|
Mock(st="mock-st", location='http://1.1.1.1')
|
||||||
|
]):
|
||||||
|
await scanner.async_scan(None)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_scan_description_parse_fail(hass, aioclient_mock):
|
||||||
|
"""Test invalid XML."""
|
||||||
|
aioclient_mock.get('http://1.1.1.1', text="""
|
||||||
|
<root>INVALIDXML
|
||||||
|
""")
|
||||||
|
scanner = ssdp.Scanner(hass)
|
||||||
|
|
||||||
|
with patch('netdisco.ssdp.scan', return_value=[
|
||||||
|
Mock(st="mock-st", location='http://1.1.1.1')
|
||||||
|
]):
|
||||||
|
await scanner.async_scan(None)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user