aboutsummaryrefslogtreecommitdiffstats
path: root/charms/trusty/ceilometer/unit_tests/test_ceilometer_contexts.py
diff options
context:
space:
mode:
Diffstat (limited to 'charms/trusty/ceilometer/unit_tests/test_ceilometer_contexts.py')
-rw-r--r--charms/trusty/ceilometer/unit_tests/test_ceilometer_contexts.py164
1 files changed, 164 insertions, 0 deletions
diff --git a/charms/trusty/ceilometer/unit_tests/test_ceilometer_contexts.py b/charms/trusty/ceilometer/unit_tests/test_ceilometer_contexts.py
new file mode 100644
index 0000000..038dfd0
--- /dev/null
+++ b/charms/trusty/ceilometer/unit_tests/test_ceilometer_contexts.py
@@ -0,0 +1,164 @@
+from mock import patch
+
+import ceilometer_contexts as contexts
+import ceilometer_utils as utils
+
+from test_utils import CharmTestCase, mock_open
+
+TO_PATCH = [
+ 'config',
+ 'relation_get',
+ 'relation_ids',
+ 'related_units',
+ 'os_release',
+]
+
+
+class CeilometerContextsTest(CharmTestCase):
+
+ def setUp(self):
+ super(CeilometerContextsTest, self).setUp(contexts, TO_PATCH)
+ self.config.side_effect = self.test_config.get
+ self.relation_get.side_effect = self.test_relation.get
+
+ def tearDown(self):
+ super(CeilometerContextsTest, self).tearDown()
+
+ def test_logging_context(self):
+ self.test_config.set('debug', False)
+ self.test_config.set('verbose', False)
+ self.assertEquals(contexts.LoggingConfigContext()(),
+ {'debug': False, 'verbose': False})
+ self.test_config.set('debug', True)
+ self.test_config.set('verbose', False)
+ self.assertEquals(contexts.LoggingConfigContext()(),
+ {'debug': True, 'verbose': False})
+ self.test_config.set('debug', True)
+ self.test_config.set('verbose', True)
+ self.assertEquals(contexts.LoggingConfigContext()(),
+ {'debug': True, 'verbose': True})
+
+ def test_mongodb_context_not_related(self):
+ self.relation_ids.return_value = []
+ self.os_release.return_value = 'icehouse'
+ self.assertEquals(contexts.MongoDBContext()(), {})
+
+ def test_mongodb_context_related(self):
+ self.relation_ids.return_value = ['shared-db:0']
+ self.related_units.return_value = ['mongodb/0']
+ data = {
+ 'hostname': 'mongodb',
+ 'port': 8090
+ }
+ self.test_relation.set(data)
+ self.assertEquals(contexts.MongoDBContext()(),
+ {'db_host': 'mongodb', 'db_port': 8090,
+ 'db_name': 'ceilometer'})
+
+ def test_mongodb_context_related_replset_single_mongo(self):
+ self.relation_ids.return_value = ['shared-db:0']
+ self.related_units.return_value = ['mongodb/0']
+ data = {
+ 'hostname': 'mongodb-0',
+ 'port': 8090,
+ 'replset': 'replset-1'
+ }
+ self.test_relation.set(data)
+ self.os_release.return_value = 'icehouse'
+ self.assertEquals(contexts.MongoDBContext()(),
+ {'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 = {
+ 'mongodb/0': {'hostname': 'mongodb-0',
+ 'port': 8090,
+ 'replset': 'replset-1'},
+ 'mongodb/1': {'hostname': 'mongodb-1',
+ 'port': 8090,
+ 'replset': 'replset-1'}
+ }
+ self.related_units.return_value = [k for k in related_units.keys()]
+
+ def relation_get(attr, unit, relid):
+ values = related_units.get(unit)
+ if attr is None:
+ return values
+ else:
+ return values.get(attr, None)
+ self.relation_get.side_effect = relation_get
+
+ self.os_release.return_value = 'icehouse'
+ self.assertEquals(contexts.MongoDBContext()(),
+ {'db_mongo_servers': 'mongodb-0:8090,mongodb-1:8090',
+ 'db_name': 'ceilometer', 'db_replset': 'replset-1'})
+
+ @patch.object(utils, 'get_shared_secret')
+ def test_ceilometer_context(self, secret):
+ secret.return_value = 'mysecret'
+ self.assertEquals(contexts.CeilometerContext()(), {
+ 'port': 8777,
+ 'metering_secret': 'mysecret',
+ 'api_workers': 1,
+ })
+
+ def test_ceilometer_service_context(self):
+ self.relation_ids.return_value = ['ceilometer-service:0']
+ self.related_units.return_value = ['ceilometer/0']
+ data = {
+ 'metering_secret': 'mysecret',
+ 'keystone_host': 'test'
+ }
+ self.test_relation.set(data)
+ self.assertEquals(contexts.CeilometerServiceContext()(), data)
+
+ def test_ceilometer_service_context_not_related(self):
+ self.relation_ids.return_value = []
+ self.assertEquals(contexts.CeilometerServiceContext()(), {})
+
+ @patch('os.path.exists')
+ def test_get_shared_secret_existing(self, exists):
+ exists.return_value = True
+ with mock_open(utils.SHARED_SECRET, u'mysecret'):
+ self.assertEquals(utils.get_shared_secret(),
+ 'mysecret')
+
+ @patch('uuid.uuid4')
+ @patch('os.path.exists')
+ def test_get_shared_secret_new(self, exists, uuid4):
+ exists.return_value = False
+ uuid4.return_value = 'newsecret'
+ with patch('__builtin__.open'):
+ self.assertEquals(utils.get_shared_secret(),
+ 'newsecret')
+
+ @patch.object(contexts, 'determine_apache_port')
+ @patch.object(contexts, 'determine_api_port')
+ def test_ha_proxy_context(self, determine_api_port, determine_apache_port):
+ determine_api_port.return_value = contexts.CEILOMETER_PORT - 10
+ determine_apache_port.return_value = contexts.CEILOMETER_PORT - 20
+
+ haproxy_port = contexts.CEILOMETER_PORT
+ api_port = haproxy_port - 10
+ apache_port = api_port - 10
+
+ expected = {
+ 'service_ports': {'ceilometer_api': [haproxy_port, apache_port]},
+ 'port': api_port
+ }
+ self.assertEquals(contexts.HAProxyContext()(), expected)