From ff2291756e3277a56a6b526a25ddcc247f59de0d Mon Sep 17 00:00:00 2001 From: Billy Olsen Date: Wed, 3 Dec 2014 16:23:51 -0700 Subject: [PATCH] Refactor loop from code review feedback. Address possibility of the remote value not being set prior to being used. --- hooks/ceilometer_contexts.py | 27 +++++++++++++------------- hooks/shared-db-relation-departed | 1 + unit_tests/test_ceilometer_contexts.py | 18 +++++++++++++++-- 3 files changed, 31 insertions(+), 15 deletions(-) create mode 120000 hooks/shared-db-relation-departed diff --git a/hooks/ceilometer_contexts.py b/hooks/ceilometer_contexts.py index 75030e4..793fdbb 100644 --- a/hooks/ceilometer_contexts.py +++ b/hooks/ceilometer_contexts.py @@ -42,28 +42,29 @@ class MongoDBContext(OSContextGenerator): host = relation_get('hostname', unit, relid) port = relation_get('port', unit, relid) + conf = { + "db_host": host, + "db_port": port, + "db_name": CEILOMETER_DB + } + + if not context_complete(conf): + continue + if not use_replset: - conf = { - "db_host": host, - "db_port": port, - "db_name": CEILOMETER_DB - } + return conf - if context_complete(conf): - return conf - else: - if replset is None: - replset = relation_get('replset', unit, relid) + if replset is None: + replset = relation_get('replset', unit, relid) - mongo_servers.append('{}:{}'.format(host, port)) + mongo_servers.append('{}:{}'.format(host, port)) if mongo_servers: - conf = { + return { 'db_mongo_servers': ','.join(mongo_servers), 'db_name': CEILOMETER_DB, 'db_replset': replset } - return conf return {} diff --git a/hooks/shared-db-relation-departed b/hooks/shared-db-relation-departed new file mode 120000 index 0000000..c948469 --- /dev/null +++ b/hooks/shared-db-relation-departed @@ -0,0 +1 @@ +ceilometer_hooks.py \ No newline at end of file diff --git a/unit_tests/test_ceilometer_contexts.py b/unit_tests/test_ceilometer_contexts.py index a696b74..5d63575 100644 --- a/unit_tests/test_ceilometer_contexts.py +++ b/unit_tests/test_ceilometer_contexts.py @@ -6,11 +6,11 @@ import ceilometer_utils as utils from test_utils import CharmTestCase, mock_open TO_PATCH = [ + 'config', 'relation_get', 'relation_ids', 'related_units', - 'config', - 'os_release' + 'os_release', ] @@ -69,6 +69,20 @@ class CeilometerContextsTest(CharmTestCase): {'db_host': 'mongodb-0', 'db_port': 8090, 'db_name': 'ceilometer'}) + @patch.object(contexts, 'context_complete') + def test_mongodb_context_related_replset_missing_values(self, mock_ctxcmp): + mock_ctxcmp.return_value = False + self.relation_ids.return_value = ['shared-db:0'] + self.related_units.return_value = ['mongodb/0'] + data = { + 'hostname': None, + 'port': 8090, + 'replset': 'replset-1' + } + self.test_relation.set(data) + self.os_release.return_value = 'icehouse' + self.assertEquals(contexts.MongoDBContext()(), {}) + def test_mongodb_context_related_replset_multiple_mongo(self): self.relation_ids.return_value = ['shared-db:0'] related_units = {