From 4fcfffc17203c85030d1214f23523d3b53137f47 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 17 Aug 2016 05:55:29 +0200 Subject: [PATCH] add tcp/udp port to config validation (#2854) --- homeassistant/components/envisalink.py | 3 +-- homeassistant/components/homematic.py | 23 ++++++++++------------ homeassistant/components/sensor/imap.py | 3 +-- homeassistant/components/sensor/plex.py | 4 +--- homeassistant/helpers/config_validation.py | 1 + tests/helpers/test_config_validation.py | 12 +++++++++++ 6 files changed, 26 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/envisalink.py b/homeassistant/components/envisalink.py index ab4312ff20f..eea06307f7d 100644 --- a/homeassistant/components/envisalink.py +++ b/homeassistant/components/envisalink.py @@ -62,8 +62,7 @@ CONFIG_SCHEMA = vol.Schema({ vol.Required(CONF_CODE): cv.string, vol.Optional(CONF_ZONES): {vol.Coerce(int): ZONE_SCHEMA}, vol.Optional(CONF_PARTITIONS): {vol.Coerce(int): PARTITION_SCHEMA}, - vol.Optional(CONF_EVL_PORT, default=DEFAULT_PORT): - vol.All(vol.Coerce(int), vol.Range(min=1, max=65535)), + vol.Optional(CONF_EVL_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_EVL_VERSION, default=DEFAULT_EVL_VERSION): vol.All(vol.Coerce(int), vol.Range(min=3, max=4)), vol.Optional(CONF_EVL_KEEPALIVE, default=DEFAULT_KEEPALIVE): diff --git a/homeassistant/components/homematic.py b/homeassistant/components/homematic.py index fb3316c9bd6..1a917789638 100644 --- a/homeassistant/components/homematic.py +++ b/homeassistant/components/homematic.py @@ -10,6 +10,7 @@ import logging from functools import partial import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, STATE_UNKNOWN, CONF_USERNAME, CONF_PASSWORD) from homeassistant.helpers.entity import Entity @@ -97,25 +98,21 @@ CONF_RESOLVENAMES = 'resolvenames' CONF_DELAY = 'delay' PLATFORM_SCHEMA = vol.Schema({ - vol.Required(CONF_LOCAL_IP): vol.Coerce(str), - vol.Optional(CONF_LOCAL_PORT, default=8943): - vol.All(vol.Coerce(int), - vol.Range(min=1, max=65535)), - vol.Required(CONF_REMOTE_IP): vol.Coerce(str), - vol.Optional(CONF_REMOTE_PORT, default=2001): - vol.All(vol.Coerce(int), - vol.Range(min=1, max=65535)), + vol.Required(CONF_LOCAL_IP): cv.string, + vol.Optional(CONF_LOCAL_PORT, default=8943): cv.port, + vol.Required(CONF_REMOTE_IP): cv.string, + vol.Optional(CONF_REMOTE_PORT, default=2001): cv.port, vol.Optional(CONF_RESOLVENAMES, default=False): vol.In(CONF_RESOLVENAMES_OPTIONS), - vol.Optional(CONF_USERNAME, default="Admin"): vol.Coerce(str), - vol.Optional(CONF_PASSWORD, default=""): vol.Coerce(str), - vol.Optional(CONF_DELAY, default=0.5): vol.Coerce(float) + vol.Optional(CONF_USERNAME, default="Admin"): cv.string, + vol.Optional(CONF_PASSWORD, default=""): cv.string, + vol.Optional(CONF_DELAY, default=0.5): cv.string, }) SCHEMA_SERVICE_VIRTUALKEY = vol.Schema({ - vol.Required(ATTR_ADDRESS): vol.Coerce(str), + vol.Required(ATTR_ADDRESS): cv.string, vol.Required(ATTR_CHANNEL): vol.Coerce(int), - vol.Required(ATTR_PARAM): vol.Coerce(str) + vol.Required(ATTR_PARAM): cv.string, }) diff --git a/homeassistant/components/sensor/imap.py b/homeassistant/components/sensor/imap.py index c458799215f..9958ff5a36a 100644 --- a/homeassistant/components/sensor/imap.py +++ b/homeassistant/components/sensor/imap.py @@ -28,8 +28,7 @@ PLATFORM_SCHEMA = vol.Schema({ vol.Required(CONF_USER): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_SERVER): cv.string, - vol.Optional(CONF_PORT, default=DEFAULT_PORT): - vol.All(vol.Coerce(int), vol.Range(min=1, max=65535)), + vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, }) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 89ffd020bdd..4ef01304488 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -28,9 +28,7 @@ PLATFORM_SCHEMA = vol.Schema({ vol.Optional(CONF_SERVER): cv.string, vol.Optional(CONF_NAME, default='Plex'): cv.string, vol.Optional(CONF_HOST, default='localhost'): cv.string, - vol.Optional(CONF_PORT, default=32400): vol.All(vol.Coerce(int), - vol.Range(min=1, - max=65535)) + vol.Optional(CONF_PORT, default=32400): cv.port, }) diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index 91a05b37b5d..ff1f694151f 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -29,6 +29,7 @@ latitude = vol.All(vol.Coerce(float), vol.Range(min=-90, max=90), longitude = vol.All(vol.Coerce(float), vol.Range(min=-180, max=180), msg='invalid longitude') sun_event = vol.All(vol.Lower, vol.Any(SUN_EVENT_SUNSET, SUN_EVENT_SUNRISE)) +port = vol.All(vol.Coerce(int), vol.Range(min=1, max=65535)) # typing typevar T = TypeVar('T') diff --git a/tests/helpers/test_config_validation.py b/tests/helpers/test_config_validation.py index 7f94ab53b23..3a72ef1da37 100644 --- a/tests/helpers/test_config_validation.py +++ b/tests/helpers/test_config_validation.py @@ -47,6 +47,18 @@ def test_longitude(): schema(value) +def test_port(): + """Test tcp/udp network port.""" + schema = vol.Schema(cv.port) + + for value in('invalid', None, -1, 0, 80000, '81000'): + with pytest.raises(vol.MultipleInvalid): + schema(value) + + for value in ('1000', 21, 24574): + schema(value) + + def test_platform_config(): """Test platform config validation.""" for value in (