mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Handle exception handling websocket command (#16927)
* Handle exception handling websocket command * lint * Lint2
This commit is contained in:
parent
bac71d3d22
commit
a7248d4574
@ -40,6 +40,7 @@ ERR_ID_REUSE = 1
|
||||
ERR_INVALID_FORMAT = 2
|
||||
ERR_NOT_FOUND = 3
|
||||
ERR_UNKNOWN_COMMAND = 4
|
||||
ERR_UNKNOWN_ERROR = 5
|
||||
|
||||
TYPE_AUTH = 'auth'
|
||||
TYPE_AUTH_INVALID = 'auth_invalid'
|
||||
@ -405,7 +406,13 @@ class ActiveConnection:
|
||||
|
||||
else:
|
||||
handler, schema = handlers[msg['type']]
|
||||
handler(self.hass, self, schema(msg))
|
||||
try:
|
||||
handler(self.hass, self, schema(msg))
|
||||
except Exception: # pylint: disable=broad-except
|
||||
_LOGGER.exception('Error handling message: %s', msg)
|
||||
self.to_write.put_nowait(error_message(
|
||||
cur_id, ERR_UNKNOWN_ERROR,
|
||||
'Unknown error.'))
|
||||
|
||||
last_id = cur_id
|
||||
msg = await wsock.receive_json()
|
||||
|
@ -1,6 +1,6 @@
|
||||
"""Tests for the Home Assistant Websocket API."""
|
||||
import asyncio
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import patch, Mock
|
||||
|
||||
from aiohttp import WSMsgType
|
||||
from async_timeout import timeout
|
||||
@ -539,3 +539,20 @@ async def test_call_service_context_no_user(hass, aiohttp_client):
|
||||
assert call.service == 'test_service'
|
||||
assert call.data == {'hello': 'world'}
|
||||
assert call.context.user_id is None
|
||||
|
||||
|
||||
async def test_handler_failing(hass, websocket_client):
|
||||
"""Test a command that raises."""
|
||||
hass.components.websocket_api.async_register_command(
|
||||
'bla', Mock(side_effect=TypeError),
|
||||
wapi.BASE_COMMAND_MESSAGE_SCHEMA.extend({'type': 'bla'}))
|
||||
await websocket_client.send_json({
|
||||
'id': 5,
|
||||
'type': 'bla',
|
||||
})
|
||||
|
||||
msg = await websocket_client.receive_json()
|
||||
assert msg['id'] == 5
|
||||
assert msg['type'] == wapi.TYPE_RESULT
|
||||
assert not msg['success']
|
||||
assert msg['error']['code'] == wapi.ERR_UNKNOWN_ERROR
|
||||
|
Loading…
x
Reference in New Issue
Block a user