From 4b8bc90d162feb1c6d6d02ef1b7e3a6359840705 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen <paulus@paulusschoutsen.nl> Date: Wed, 28 Sep 2016 00:05:38 -0700 Subject: [PATCH] Limit worker pool to 10 threads (#3560) * Limit worker pool to 10 threads * Comment evdev in requirements * Allow skipping RFXtrx tests locally * Fix worker pool size tests * lol whut --- homeassistant/bootstrap.py | 3 ++- homeassistant/components/switch/rfxtrx.py | 1 - requirements_all.txt | 2 +- script/gen_requirements_all.py | 1 + tests/components/camera/test_uvc.py | 5 +++++ tests/components/cover/test_rfxtrx.py | 3 +++ tests/components/light/test_rfxtrx.py | 3 +++ tests/components/rollershutter/test_rfxtrx.py | 3 +++ tests/components/sensor/test_rfxtrx.py | 3 +++ tests/components/switch/test_rfxtrx.py | 3 +++ tests/components/test_influxdb.py | 1 + tests/components/test_logentries.py | 3 +++ tests/components/test_logger.py | 8 ++++++-- tests/components/test_splunk.py | 3 +++ tests/components/test_statsd.py | 4 ++++ 15 files changed, 41 insertions(+), 5 deletions(-) diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py index b2c1d256c4a..21c56f55bad 100644 --- a/homeassistant/bootstrap.py +++ b/homeassistant/bootstrap.py @@ -118,7 +118,8 @@ def _setup_component(hass: core.HomeAssistant, domain: str, config) -> bool: # Assumption: if a component does not depend on groups # it communicates with devices - if 'group' not in getattr(component, 'DEPENDENCIES', []): + if 'group' not in getattr(component, 'DEPENDENCIES', []) and \ + hass.pool.worker_count <= 10: hass.pool.add_worker() hass.bus.fire( diff --git a/homeassistant/components/switch/rfxtrx.py b/homeassistant/components/switch/rfxtrx.py index 43f2fe6a86f..959bab5fe40 100644 --- a/homeassistant/components/switch/rfxtrx.py +++ b/homeassistant/components/switch/rfxtrx.py @@ -6,7 +6,6 @@ https://home-assistant.io/components/switch.rfxtrx/ """ import logging - import homeassistant.components.rfxtrx as rfxtrx from homeassistant.components.switch import SwitchDevice diff --git a/requirements_all.txt b/requirements_all.txt index ba021d93cb0..083865f8db2 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -81,7 +81,7 @@ eliqonline==1.0.12 enocean==0.31 # homeassistant.components.keyboard_remote -evdev==0.6.1 +# evdev==0.6.1 # homeassistant.components.climate.honeywell # homeassistant.components.thermostat.honeywell diff --git a/script/gen_requirements_all.py b/script/gen_requirements_all.py index 65ffa26116a..a5a25e7bab4 100755 --- a/script/gen_requirements_all.py +++ b/script/gen_requirements_all.py @@ -16,6 +16,7 @@ COMMENT_REQUIREMENTS = ( 'python-lirc', 'gattlib', 'pyuserinput', + 'evdev', ) IGNORE_PACKAGES = ( diff --git a/tests/components/camera/test_uvc.py b/tests/components/camera/test_uvc.py index 10b5cf832f3..01ce1cec518 100644 --- a/tests/components/camera/test_uvc.py +++ b/tests/components/camera/test_uvc.py @@ -38,6 +38,7 @@ class TestUVCSetup(unittest.TestCase): return {'model': 'UVC'} hass = mock.MagicMock() + hass.pool.worker_count = 2 hass.config.components = ['http'] mock_remote.return_value.index.return_value = fake_cameras mock_remote.return_value.get_camera.side_effect = fake_get_camera @@ -65,6 +66,7 @@ class TestUVCSetup(unittest.TestCase): {'uuid': 'two', 'name': 'Back', 'id': 'id2'}, ] hass = mock.MagicMock() + hass.pool.worker_count = 2 hass.config.components = ['http'] mock_remote.return_value.index.return_value = fake_cameras mock_remote.return_value.get_camera.return_value = {'model': 'UVC'} @@ -92,6 +94,7 @@ class TestUVCSetup(unittest.TestCase): {'uuid': 'two', 'name': 'Back', 'id': 'id2'}, ] hass = mock.MagicMock() + hass.pool.worker_count = 2 hass.config.components = ['http'] mock_remote.return_value.index.return_value = fake_cameras mock_remote.return_value.get_camera.return_value = {'model': 'UVC'} @@ -109,6 +112,7 @@ class TestUVCSetup(unittest.TestCase): def test_setup_incomplete_config(self, mock_uvc): """"Test the setup with incomplete configuration.""" hass = mock.MagicMock() + hass.pool.worker_count = 2 hass.config.components = ['http'] assert setup_component( @@ -133,6 +137,7 @@ class TestUVCSetup(unittest.TestCase): 'key': 'secret', } hass = mock.MagicMock() + hass.pool.worker_count = 2 hass.config.components = ['http'] for error in errors: diff --git a/tests/components/cover/test_rfxtrx.py b/tests/components/cover/test_rfxtrx.py index 96fecff2ee2..a73a2b978dc 100644 --- a/tests/components/cover/test_rfxtrx.py +++ b/tests/components/cover/test_rfxtrx.py @@ -1,12 +1,15 @@ """The tests for the Rfxtrx cover platform.""" import unittest +import pytest + from homeassistant.bootstrap import _setup_component from homeassistant.components import rfxtrx as rfxtrx_core from tests.common import get_test_home_assistant +@pytest.mark.skipif("os.environ.get('RFXTRX') == 'SKIP'") class TestCoverRfxtrx(unittest.TestCase): """Test the Rfxtrx cover platform.""" diff --git a/tests/components/light/test_rfxtrx.py b/tests/components/light/test_rfxtrx.py index cd4cecd8505..80014dfd1c1 100644 --- a/tests/components/light/test_rfxtrx.py +++ b/tests/components/light/test_rfxtrx.py @@ -1,12 +1,15 @@ """The tests for the Rfxtrx light platform.""" import unittest +import pytest + from homeassistant.bootstrap import _setup_component from homeassistant.components import rfxtrx as rfxtrx_core from tests.common import get_test_home_assistant +@pytest.mark.skipif("os.environ.get('RFXTRX') == 'SKIP'") class TestLightRfxtrx(unittest.TestCase): """Test the Rfxtrx light platform.""" diff --git a/tests/components/rollershutter/test_rfxtrx.py b/tests/components/rollershutter/test_rfxtrx.py index 704fa9310e6..1218ab37a59 100644 --- a/tests/components/rollershutter/test_rfxtrx.py +++ b/tests/components/rollershutter/test_rfxtrx.py @@ -1,12 +1,15 @@ """The tests for the Rfxtrx roller shutter platform.""" import unittest +import pytest + from homeassistant.bootstrap import _setup_component from homeassistant.components import rfxtrx as rfxtrx_core from tests.common import get_test_home_assistant +@pytest.mark.skipif("os.environ.get('RFXTRX') == 'SKIP'") class TestRollershutterRfxtrx(unittest.TestCase): """Test the Rfxtrx roller shutter platform.""" diff --git a/tests/components/sensor/test_rfxtrx.py b/tests/components/sensor/test_rfxtrx.py index 2d38de5eab5..e42aaea7e04 100644 --- a/tests/components/sensor/test_rfxtrx.py +++ b/tests/components/sensor/test_rfxtrx.py @@ -1,6 +1,8 @@ """The tests for the Rfxtrx sensor platform.""" import unittest +import pytest + from homeassistant.bootstrap import _setup_component from homeassistant.components import rfxtrx as rfxtrx_core from homeassistant.const import TEMP_CELSIUS @@ -8,6 +10,7 @@ from homeassistant.const import TEMP_CELSIUS from tests.common import get_test_home_assistant +@pytest.mark.skipif("os.environ.get('RFXTRX') == 'SKIP'") class TestSensorRfxtrx(unittest.TestCase): """Test the Rfxtrx sensor platform.""" diff --git a/tests/components/switch/test_rfxtrx.py b/tests/components/switch/test_rfxtrx.py index 72c13bd0ba4..729abf6db06 100644 --- a/tests/components/switch/test_rfxtrx.py +++ b/tests/components/switch/test_rfxtrx.py @@ -1,12 +1,15 @@ """The tests for the Rfxtrx switch platform.""" import unittest +import pytest + from homeassistant.bootstrap import _setup_component from homeassistant.components import rfxtrx as rfxtrx_core from tests.common import get_test_home_assistant +@pytest.mark.skipif("os.environ.get('RFXTRX') == 'SKIP'") class TestSwitchRfxtrx(unittest.TestCase): """Test the Rfxtrx switch platform.""" diff --git a/tests/components/test_influxdb.py b/tests/components/test_influxdb.py index 7aa4fd616a9..3210bf0db9f 100644 --- a/tests/components/test_influxdb.py +++ b/tests/components/test_influxdb.py @@ -17,6 +17,7 @@ class TestInfluxDB(unittest.TestCase): def setUp(self): """Setup things to be run when tests are started.""" self.hass = mock.MagicMock() + self.hass.pool.worker_count = 2 self.handler_method = None def test_setup_config_full(self, mock_client): diff --git a/tests/components/test_logentries.py b/tests/components/test_logentries.py index 8642c4aa9a2..94097fba32c 100644 --- a/tests/components/test_logentries.py +++ b/tests/components/test_logentries.py @@ -19,6 +19,7 @@ class TestLogentries(unittest.TestCase): } } hass = mock.MagicMock() + hass.pool.worker_count = 2 self.assertTrue(setup_component(hass, logentries.DOMAIN, config)) self.assertTrue(hass.bus.listen.called) self.assertEqual(EVENT_STATE_CHANGED, @@ -32,6 +33,7 @@ class TestLogentries(unittest.TestCase): } } hass = mock.MagicMock() + hass.pool.worker_count = 2 self.assertTrue(setup_component(hass, logentries.DOMAIN, config)) self.assertTrue(hass.bus.listen.called) self.assertEqual(EVENT_STATE_CHANGED, @@ -48,6 +50,7 @@ class TestLogentries(unittest.TestCase): } } self.hass = mock.MagicMock() + self.hass.pool.worker_count = 2 setup_component(self.hass, logentries.DOMAIN, config) self.handler_method = self.hass.bus.listen.call_args_list[0][0][1] diff --git a/tests/components/test_logger.py b/tests/components/test_logger.py index 89577d8535d..e0243335dfa 100644 --- a/tests/components/test_logger.py +++ b/tests/components/test_logger.py @@ -24,7 +24,9 @@ class TestUpdater(unittest.TestCase): def test_logger_setup(self): """Use logger to create a logging filter.""" - setup_component(MagicMock(), logger.DOMAIN, self.log_config) + hass = MagicMock() + hass.pool.worker_count = 2 + setup_component(hass, logger.DOMAIN, self.log_config) self.assertTrue(len(logging.root.handlers) > 0) handler = logging.root.handlers[-1] @@ -37,7 +39,9 @@ class TestUpdater(unittest.TestCase): def test_logger_test_filters(self): """Test resulting filter operation.""" - setup_component(MagicMock(), logger.DOMAIN, self.log_config) + hass = MagicMock() + hass.pool.worker_count = 2 + setup_component(hass, logger.DOMAIN, self.log_config) log_filter = logging.root.handlers[-1].filters[0] diff --git a/tests/components/test_splunk.py b/tests/components/test_splunk.py index 7dcc3ca5f5c..84dc4dfaac5 100644 --- a/tests/components/test_splunk.py +++ b/tests/components/test_splunk.py @@ -22,6 +22,7 @@ class TestSplunk(unittest.TestCase): } hass = mock.MagicMock() + hass.pool.worker_count = 2 self.assertTrue(setup_component(hass, splunk.DOMAIN, config)) self.assertTrue(hass.bus.listen.called) self.assertEqual(EVENT_STATE_CHANGED, @@ -37,6 +38,7 @@ class TestSplunk(unittest.TestCase): } hass = mock.MagicMock() + hass.pool.worker_count = 2 self.assertTrue(setup_component(hass, splunk.DOMAIN, config)) self.assertTrue(hass.bus.listen.called) self.assertEqual(EVENT_STATE_CHANGED, @@ -56,6 +58,7 @@ class TestSplunk(unittest.TestCase): } self.hass = mock.MagicMock() + self.hass.pool.worker_count = 2 setup_component(self.hass, splunk.DOMAIN, config) self.handler_method = self.hass.bus.listen.call_args_list[0][0][1] diff --git a/tests/components/test_statsd.py b/tests/components/test_statsd.py index ff3647674fd..6cbb26b7416 100644 --- a/tests/components/test_statsd.py +++ b/tests/components/test_statsd.py @@ -38,6 +38,7 @@ class TestStatsd(unittest.TestCase): } } hass = mock.MagicMock() + hass.pool.worker_count = 2 self.assertTrue(setup_component(hass, statsd.DOMAIN, config)) mock_connection.assert_called_once_with( host='host', @@ -61,6 +62,7 @@ class TestStatsd(unittest.TestCase): config['statsd'][statsd.CONF_PREFIX] = statsd.DEFAULT_PREFIX hass = mock.MagicMock() + hass.pool.worker_count = 2 self.assertTrue(setup_component(hass, statsd.DOMAIN, config)) mock_connection.assert_called_once_with( host='host', @@ -80,6 +82,7 @@ class TestStatsd(unittest.TestCase): config['statsd'][statsd.CONF_RATE] = statsd.DEFAULT_RATE hass = mock.MagicMock() + hass.pool.worker_count = 2 setup_component(hass, statsd.DOMAIN, config) self.assertTrue(hass.bus.listen.called) handler_method = hass.bus.listen.call_args_list[0][0][1] @@ -121,6 +124,7 @@ class TestStatsd(unittest.TestCase): config['statsd'][statsd.CONF_RATE] = statsd.DEFAULT_RATE hass = mock.MagicMock() + hass.pool.worker_count = 2 setup_component(hass, statsd.DOMAIN, config) self.assertTrue(hass.bus.listen.called) handler_method = hass.bus.listen.call_args_list[0][0][1] -- GitLab