From 10e929deb16254032ed9fd694f12d761eb541013 Mon Sep 17 00:00:00 2001 From: Deirdre O'Connor Date: Tue, 10 Apr 2018 16:29:16 +0100 Subject: [PATCH] changes code to pass config in sender class - This change refactor base sender to accept the config option in its constructor. - The use of singleton config in the sender classes has been replaced with the use of self._config - This change updates the unit tests to reflect the new constructor paramaters. Change-Id: I8458145044d76b61e51462674c8fbfc84fd02b0a Related-bug: #1746097 --- collectd_openstack/aodh/notifier.py | 2 +- collectd_openstack/aodh/sender.py | 4 ++-- collectd_openstack/common/sender.py | 12 ++++++------ collectd_openstack/gnocchi/sender.py | 2 +- collectd_openstack/tests/aodh/test_plugin.py | 5 +++-- collectd_openstack/tests/aodh/test_sender.py | 4 +++- collectd_openstack/tests/common/test_sender.py | 4 +++- collectd_openstack/tests/gnocchi/test_plugin.py | 9 +++++++-- collectd_openstack/tests/gnocchi/test_sender.py | 4 +++- 9 files changed, 29 insertions(+), 17 deletions(-) diff --git a/collectd_openstack/aodh/notifier.py b/collectd_openstack/aodh/notifier.py index 70d38c4..06b476e 100644 --- a/collectd_openstack/aodh/notifier.py +++ b/collectd_openstack/aodh/notifier.py @@ -30,7 +30,7 @@ class Notifier(object): def __init__(self, meters, config): """Initialize Notifier.""" self._meters = meters - self._sender = aodh_sender.Sender() + self._sender = aodh_sender.Sender(config) self._config = config def notify(self, vl, data): diff --git a/collectd_openstack/aodh/sender.py b/collectd_openstack/aodh/sender.py index 821d89e..cff350a 100644 --- a/collectd_openstack/aodh/sender.py +++ b/collectd_openstack/aodh/sender.py @@ -39,12 +39,12 @@ HTTP_NOT_FOUND = 404 class Sender(common_sender.Sender): """Sends the JSON serialized data to Aodh.""" - def __init__(self): + def __init__(self, config): """Create the Sender instance. The configuration must be initialized before the object is created. """ - super(Sender, self).__init__() + super(Sender, self).__init__(config) self._alarm_ids = {} diff --git a/collectd_openstack/common/sender.py b/collectd_openstack/common/sender.py index 686e172..60fc0fc 100644 --- a/collectd_openstack/common/sender.py +++ b/collectd_openstack/common/sender.py @@ -50,7 +50,7 @@ class Sender(object): HTTP_UNAUTHORIZED = requests.codes['UNAUTHORIZED'] HTTP_NOT_FOUND = requests.codes['NOT_FOUND'] - def __init__(self): + def __init__(self, config): """Create the Sender instance The configuration must be initialized before the object is created. @@ -60,6 +60,7 @@ class Sender(object): self._auth_token = None self._auth_lock = threading.Lock() self._failed_auth = False + self._config = config def _on_authenticated(self): """Defines an action to be taken after auth_token acquired. @@ -96,12 +97,11 @@ class Sender(object): try: # create a keystone client if it doesn't exist if self._keystone is None: - cfg = Config.instance() self._keystone = ClientV3( - auth_url=cfg.OS_AUTH_URL, - username=cfg.OS_USERNAME, - password=cfg.OS_PASSWORD, - tenant_name=cfg.OS_TENANT_NAME + auth_url=self._config.OS_AUTH_URL, + username=self._config.OS_USERNAME, + password=self._config.OS_PASSWORD, + tenant_name=self._config.OS_TENANT_NAME ) # store the authentication token self._auth_token = self._keystone.auth_token diff --git a/collectd_openstack/gnocchi/sender.py b/collectd_openstack/gnocchi/sender.py index 82a38f8..9c75576 100644 --- a/collectd_openstack/gnocchi/sender.py +++ b/collectd_openstack/gnocchi/sender.py @@ -35,7 +35,7 @@ class Sender(common_sender.Sender): The cofinguration must be initialized before the object is created. """ - super(Sender, self).__init__() + super(Sender, self).__init__(config) self._meter_ids = {} self._config = config diff --git a/collectd_openstack/tests/aodh/test_plugin.py b/collectd_openstack/tests/aodh/test_plugin.py index bfbdcf6..d40f8d8 100644 --- a/collectd_openstack/tests/aodh/test_plugin.py +++ b/collectd_openstack/tests/aodh/test_plugin.py @@ -75,11 +75,12 @@ class MockedCollectd(object): """Get notification severity.""" -def mock_config(**kwargs): +def mock_config(OS_AUTH_URL=None, OS_USERNAME=None, OS_PASSWORD=None, **kwargs): """Return collectd module with collectd logging hooks.""" return mock.patch( __name__ + '.' + MockedConfig.__name__, specs=True, - **kwargs) + OS_AUTH_URL=OS_AUTH_URL, OS_USERNAME=OS_USERNAME, + OS_PASSWORD=OS_PASSWORD, **kwargs) def config_module( diff --git a/collectd_openstack/tests/aodh/test_sender.py b/collectd_openstack/tests/aodh/test_sender.py index eccd912..b5186fb 100644 --- a/collectd_openstack/tests/aodh/test_sender.py +++ b/collectd_openstack/tests/aodh/test_sender.py @@ -22,6 +22,7 @@ import requests import unittest from collectd_openstack.aodh import sender as aodh_sender +from collectd_openstack.common.settings import Config from collections import OrderedDict from collectd_openstack.common.meters import base @@ -56,7 +57,8 @@ class TestSender(unittest.TestCase): def setUp(self): super(TestSender, self).setUp() - self.sender = aodh_sender.Sender() + self._config = Config._decorated() + self.sender = aodh_sender.Sender(self._config) @mock.patch.object(aodh_sender.Sender, "_get_remote_alarm_id", autospec=True) diff --git a/collectd_openstack/tests/common/test_sender.py b/collectd_openstack/tests/common/test_sender.py index 34f8cf0..3a3c6d8 100644 --- a/collectd_openstack/tests/common/test_sender.py +++ b/collectd_openstack/tests/common/test_sender.py @@ -22,6 +22,7 @@ import requests import unittest from collectd_openstack.common import sender as common_sender +from collectd_openstack.common.settings import Config class TestSender(unittest.TestCase): @@ -29,7 +30,8 @@ class TestSender(unittest.TestCase): def setUp(self): super(TestSender, self).setUp() - self.sender = common_sender.Sender() + self._config = Config._decorated() + self.sender = common_sender.Sender(self._config) self.sender._url_base = \ "http://my-gnocchi-endpoint/v1/action" diff --git a/collectd_openstack/tests/gnocchi/test_plugin.py b/collectd_openstack/tests/gnocchi/test_plugin.py index 2bc20c5..7fa34e5 100644 --- a/collectd_openstack/tests/gnocchi/test_plugin.py +++ b/collectd_openstack/tests/gnocchi/test_plugin.py @@ -70,17 +70,22 @@ class MockedCollectd(object): "Gets a dataset." -def mock_config(BATCH_SIZE=1, **kwargs): +def mock_config(BATCH_SIZE=1, OS_AUTH_URL=None, OS_USERNAME=None, + OS_PASSWORD=None, **kwargs): "Returns collectd module with collectd logging hooks." return mock.patch( __name__ + '.' + MockedConfig.__name__, specs=True, - BATCH_SIZE=BATCH_SIZE, **kwargs) + BATCH_SIZE=BATCH_SIZE, OS_AUTH_URL=OS_AUTH_URL, OS_USERNAME=OS_USERNAME, + OS_PASSWORD=OS_PASSWORD, **kwargs) class MockedConfig(object): "Mocked config class." BATCH_SIZE = 1 + OS_AUTH_URL = '' + OS_USERNAME = 'test' + OS_PASSWORD = 'test' def mock_value( diff --git a/collectd_openstack/tests/gnocchi/test_sender.py b/collectd_openstack/tests/gnocchi/test_sender.py index 8d8fd95..b076558 100644 --- a/collectd_openstack/tests/gnocchi/test_sender.py +++ b/collectd_openstack/tests/gnocchi/test_sender.py @@ -21,6 +21,7 @@ import mock import requests import unittest +from collectd_openstack.common.settings import Config from collectd_openstack.gnocchi import sender as gnocchi_sender @@ -32,7 +33,8 @@ class TestGnocchiSender(unittest.TestCase): """Test the sender class.""" def setUp(self): - self.sender = gnocchi_sender.Sender(config=MockedConfig) + self._config = Config._decorated() + self.sender = gnocchi_sender.Sender(self._config) self.sender._url_base = \ "http://my-endpoint/v1/metric/%s/measures"