Use voluptuous for statsd (#2928)

* Migrate to voluptuous

* Update tests
This commit is contained in:
Fabian Affolter 2016-09-14 03:22:30 +02:00 committed by Paulus Schoutsen
parent cb3ab1e873
commit ac5647a30e
2 changed files with 54 additions and 25 deletions

View file

@ -6,27 +6,36 @@ https://home-assistant.io/components/statsd/
""" """
import logging import logging
import homeassistant.util as util import voluptuous as vol
from homeassistant.const import EVENT_STATE_CHANGED
from homeassistant.const import (
CONF_HOST, CONF_PORT, CONF_PREFIX, EVENT_STATE_CHANGED)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers import state as state_helper from homeassistant.helpers import state as state_helper
REQUIREMENTS = ['statsd==3.2.1']
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
DOMAIN = "statsd" CONF_ATTR = 'log_attributes'
DEPENDENCIES = [] CONF_RATE = 'rate'
DEFAULT_HOST = 'localhost' DEFAULT_HOST = 'localhost'
DEFAULT_PORT = 8125 DEFAULT_PORT = 8125
DEFAULT_PREFIX = 'hass' DEFAULT_PREFIX = 'hass'
DEFAULT_RATE = 1 DEFAULT_RATE = 1
DOMAIN = 'statsd'
REQUIREMENTS = ['statsd==3.2.1'] CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({
CONF_HOST = 'host' vol.Required(CONF_HOST, default=DEFAULT_HOST): cv.string,
CONF_PORT = 'port' vol.Optional(CONF_ATTR, default=False): cv.boolean,
CONF_PREFIX = 'prefix' vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
CONF_RATE = 'rate' vol.Optional(CONF_PREFIX, default=DEFAULT_PREFIX): cv.string,
CONF_ATTR = 'log_attributes' vol.Optional(CONF_RATE, default=DEFAULT_RATE):
vol.All(vol.Coerce(int), vol.Range(min=1)),
}),
}, extra=vol.ALLOW_EXTRA)
def setup(hass, config): def setup(hass, config):
@ -34,18 +43,13 @@ def setup(hass, config):
import statsd import statsd
conf = config[DOMAIN] conf = config[DOMAIN]
host = conf.get(CONF_HOST)
port = conf.get(CONF_PORT)
sample_rate = conf.get(CONF_RATE)
prefix = conf.get(CONF_PREFIX)
show_attribute_flag = conf.get(CONF_ATTR)
host = conf[CONF_HOST] statsd_client = statsd.StatsClient(host=host, port=port, prefix=prefix)
port = util.convert(conf.get(CONF_PORT), int, DEFAULT_PORT)
sample_rate = util.convert(conf.get(CONF_RATE), int, DEFAULT_RATE)
prefix = util.convert(conf.get(CONF_PREFIX), str, DEFAULT_PREFIX)
show_attribute_flag = conf.get(CONF_ATTR, False)
statsd_client = statsd.StatsClient(
host=host,
port=port,
prefix=prefix
)
def statsd_event_listener(event): def statsd_event_listener(event):
"""Listen for new messages on the bus and sends them to StatsD.""" """Listen for new messages on the bus and sends them to StatsD."""

View file

@ -2,14 +2,29 @@
import unittest import unittest
from unittest import mock from unittest import mock
import voluptuous as vol
import homeassistant.core as ha import homeassistant.core as ha
import homeassistant.components.statsd as statsd import homeassistant.components.statsd as statsd
from homeassistant.const import STATE_ON, STATE_OFF, EVENT_STATE_CHANGED from homeassistant.const import (STATE_ON, STATE_OFF, EVENT_STATE_CHANGED)
class TestStatsd(unittest.TestCase): class TestStatsd(unittest.TestCase):
"""Test the StatsD component.""" """Test the StatsD component."""
def test_invalid_config(self):
"""Test configuration with defaults."""
config = {
'statsd': {
'host1': 'host1',
}
}
with self.assertRaises(vol.Invalid):
statsd.CONFIG_SCHEMA(None)
with self.assertRaises(vol.Invalid):
statsd.CONFIG_SCHEMA(config)
@mock.patch('statsd.StatsClient') @mock.patch('statsd.StatsClient')
def test_statsd_setup_full(self, mock_connection): def test_statsd_setup_full(self, mock_connection):
"""Test setup with all data.""" """Test setup with all data."""
@ -40,12 +55,16 @@ class TestStatsd(unittest.TestCase):
'host': 'host', 'host': 'host',
} }
} }
config['statsd'][statsd.CONF_PORT] = statsd.DEFAULT_PORT
config['statsd'][statsd.CONF_PREFIX] = statsd.DEFAULT_PREFIX
hass = mock.MagicMock() hass = mock.MagicMock()
self.assertTrue(statsd.setup(hass, config)) self.assertTrue(statsd.setup(hass, config))
mock_connection.assert_called_once_with( mock_connection.assert_called_once_with(
host='host', host='host',
port=statsd.DEFAULT_PORT, port=8125,
prefix=statsd.DEFAULT_PREFIX) prefix='hass')
self.assertTrue(hass.bus.listen.called) self.assertTrue(hass.bus.listen.called)
@mock.patch('statsd.StatsClient') @mock.patch('statsd.StatsClient')
@ -56,6 +75,9 @@ class TestStatsd(unittest.TestCase):
'host': 'host', 'host': 'host',
} }
} }
config['statsd'][statsd.CONF_RATE] = statsd.DEFAULT_RATE
hass = mock.MagicMock() hass = mock.MagicMock()
statsd.setup(hass, config) statsd.setup(hass, config)
self.assertTrue(hass.bus.listen.called) self.assertTrue(hass.bus.listen.called)
@ -94,6 +116,9 @@ class TestStatsd(unittest.TestCase):
'log_attributes': True 'log_attributes': True
} }
} }
config['statsd'][statsd.CONF_RATE] = statsd.DEFAULT_RATE
hass = mock.MagicMock() hass = mock.MagicMock()
statsd.setup(hass, config) statsd.setup(hass, config)
self.assertTrue(hass.bus.listen.called) self.assertTrue(hass.bus.listen.called)