diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index aca36aabd3b..6028e5547c6 100644 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -159,7 +159,8 @@ CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ vol.Optional(CONF_AUTOHEAL, default=DEFAULT_CONF_AUTOHEAL): cv.boolean, vol.Optional(CONF_CONFIG_PATH): cv.string, - vol.Optional(CONF_NETWORK_KEY): cv.string, + vol.Optional(CONF_NETWORK_KEY): + vol.All(cv.string, vol.Match(r'(0x\w\w,\s?){15}0x\w\w')), vol.Optional(CONF_DEVICE_CONFIG, default={}): vol.Schema({cv.entity_id: DEVICE_CONFIG_SCHEMA_ENTRY}), vol.Optional(CONF_DEVICE_CONFIG_GLOB, default={}): diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index 66011f3e6ee..3f0c082591c 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -3,6 +3,7 @@ import asyncio from collections import OrderedDict from datetime import datetime from pytz import utc +import voluptuous as vol import unittest from unittest.mock import patch, MagicMock @@ -83,6 +84,35 @@ async def test_network_options(hass, mock_openzwave): assert network.options.config_path == 'mock_config_path' +async def test_network_key_validation(hass, mock_openzwave): + """Test network key validation.""" + test_values = [ + ('0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, ' + '0x0C, 0x0D, 0x0E, 0x0F, 0x10'), + ('0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,' + '0x0E,0x0F,0x10'), + ] + for value in test_values: + result = zwave.CONFIG_SCHEMA({'zwave': {'network_key': value}}) + assert result['zwave']['network_key'] == value + + +async def test_erronous_network_key_fails_validation(hass, mock_openzwave): + """Test failing erronous network key validation.""" + test_values = [ + ('0x 01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, ' + '0x0C, 0x0D, 0x0E, 0x0F, 0x10'), + ('0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A,0X0B,0X0C,0X0D,' + '0X0E,0X0F,0X10'), + 'invalid', + '1234567', + 1234567 + ] + for value in test_values: + with pytest.raises(vol.Invalid): + zwave.CONFIG_SCHEMA({'zwave': {'network_key': value}}) + + async def test_auto_heal_midnight(hass, mock_openzwave): """Test network auto-heal at midnight.""" await async_setup_component(hass, 'zwave', {