Improve ozw websocket response when node is not found (#39653)

* Return not_found error over ws if node is not found

* Remove unrelated code from this PR

* Only import ERR_NOT_FOUND from core websocket_api
This commit is contained in:
Charles Garwood 2020-09-04 15:52:47 -04:00 committed by GitHub
parent 1fb70625a3
commit 4885b22cb4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 4 deletions

View file

@ -150,6 +150,15 @@ def websocket_node_status(hass, connection, msg):
"""Get the status for a Z-Wave node."""
manager = hass.data[DOMAIN][MANAGER]
node = manager.get_instance(msg[OZW_INSTANCE]).get_node(msg[NODE_ID])
if not node:
connection.send_message(
websocket_api.error_message(
msg[ID], websocket_api.const.ERR_NOT_FOUND, "OZW Node not found"
)
)
return
connection.send_result(
msg[ID],
{
@ -185,6 +194,15 @@ def websocket_node_metadata(hass, connection, msg):
"""Get the metadata for a Z-Wave node."""
manager = hass.data[DOMAIN][MANAGER]
node = manager.get_instance(msg[OZW_INSTANCE]).get_node(msg[NODE_ID])
if not node:
connection.send_message(
websocket_api.error_message(
msg[ID], websocket_api.const.ERR_NOT_FOUND, "OZW Node not found"
)
)
return
connection.send_result(
msg[ID],
{

View file

@ -19,6 +19,7 @@ from homeassistant.components.ozw.websocket_api import (
OZW_INSTANCE,
TYPE,
)
from homeassistant.components.websocket_api.const import ERR_NOT_FOUND
from .common import MQTTMessage, setup_ozw
@ -68,8 +69,13 @@ async def test_websocket_api(hass, generic_data, hass_ws_client):
assert result[ATTR_NODE_SPECIFIC_STRING] == "Binary Power Switch"
assert result[ATTR_NEIGHBORS] == [1, 33, 36, 37, 39]
await client.send_json({ID: 7, TYPE: "ozw/node_status", NODE_ID: 999})
msg = await client.receive_json()
result = msg["error"]
assert result["code"] == ERR_NOT_FOUND
# Test node statistics
await client.send_json({ID: 7, TYPE: "ozw/node_statistics", NODE_ID: 39})
await client.send_json({ID: 8, TYPE: "ozw/node_statistics", NODE_ID: 39})
msg = await client.receive_json()
result = msg["result"]
@ -87,13 +93,18 @@ async def test_websocket_api(hass, generic_data, hass_ws_client):
assert result["received_unsolicited"] == 3546
# Test node metadata
await client.send_json({ID: 8, TYPE: "ozw/node_metadata", NODE_ID: 39})
await client.send_json({ID: 9, TYPE: "ozw/node_metadata", NODE_ID: 39})
msg = await client.receive_json()
result = msg["result"]
assert result["metadata"]["ProductPic"] == "images/aeotec/zwa002.png"
await client.send_json({ID: 10, TYPE: "ozw/node_metadata", NODE_ID: 999})
msg = await client.receive_json()
result = msg["error"]
assert result["code"] == ERR_NOT_FOUND
# Test network statistics
await client.send_json({ID: 9, TYPE: "ozw/network_statistics"})
await client.send_json({ID: 11, TYPE: "ozw/network_statistics"})
msg = await client.receive_json()
result = msg["result"]
assert result["readCnt"] == 92220
@ -101,7 +112,7 @@ async def test_websocket_api(hass, generic_data, hass_ws_client):
assert result["node_count"] == 5
# Test get nodes
await client.send_json({ID: 10, TYPE: "ozw/get_nodes"})
await client.send_json({ID: 12, TYPE: "ozw/get_nodes"})
msg = await client.receive_json()
result = msg["result"]
assert len(result) == 5