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.""" """Get the status for a Z-Wave node."""
manager = hass.data[DOMAIN][MANAGER] manager = hass.data[DOMAIN][MANAGER]
node = manager.get_instance(msg[OZW_INSTANCE]).get_node(msg[NODE_ID]) 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( connection.send_result(
msg[ID], msg[ID],
{ {
@ -185,6 +194,15 @@ def websocket_node_metadata(hass, connection, msg):
"""Get the metadata for a Z-Wave node.""" """Get the metadata for a Z-Wave node."""
manager = hass.data[DOMAIN][MANAGER] manager = hass.data[DOMAIN][MANAGER]
node = manager.get_instance(msg[OZW_INSTANCE]).get_node(msg[NODE_ID]) 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( connection.send_result(
msg[ID], msg[ID],
{ {

View File

@ -19,6 +19,7 @@ from homeassistant.components.ozw.websocket_api import (
OZW_INSTANCE, OZW_INSTANCE,
TYPE, TYPE,
) )
from homeassistant.components.websocket_api.const import ERR_NOT_FOUND
from .common import MQTTMessage, setup_ozw 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_NODE_SPECIFIC_STRING] == "Binary Power Switch"
assert result[ATTR_NEIGHBORS] == [1, 33, 36, 37, 39] 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 # 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() msg = await client.receive_json()
result = msg["result"] result = msg["result"]
@ -87,13 +93,18 @@ async def test_websocket_api(hass, generic_data, hass_ws_client):
assert result["received_unsolicited"] == 3546 assert result["received_unsolicited"] == 3546
# Test node metadata # 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() msg = await client.receive_json()
result = msg["result"] result = msg["result"]
assert result["metadata"]["ProductPic"] == "images/aeotec/zwa002.png" 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 # 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() msg = await client.receive_json()
result = msg["result"] result = msg["result"]
assert result["readCnt"] == 92220 assert result["readCnt"] == 92220
@ -101,7 +112,7 @@ async def test_websocket_api(hass, generic_data, hass_ws_client):
assert result["node_count"] == 5 assert result["node_count"] == 5
# Test get nodes # 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() msg = await client.receive_json()
result = msg["result"] result = msg["result"]
assert len(result) == 5 assert len(result) == 5