From 895dbee21d52139dd7d0f04e1ffdd2fb0b0a0f32 Mon Sep 17 00:00:00 2001 From: Liam Young Date: Tue, 26 May 2020 14:48:12 +0000 Subject: [PATCH] Set the b64 encoded cert as a string Sending a byte string to relation-set can result in the data being sent being prefixed with a "b'". In this case it corrupts the b64encoding and the receiving charm (ceilometer-agent) cannot b64decode the data. * Backported test fixes too to fix the gate. Change-Id: I004bff0706362f893f2f69b07568be1034dbf574 (cherry picked from commit 7ad2d31417fa1836ca66195e57ade417d9de9cd3) --- hooks/ceilometer_hooks.py | 2 +- tests/bundles/trusty-mitaka.yaml | 4 +- tests/bundles/xenial-ocata.yaml | 109 +++++++++++++++++++++------- unit_tests/test_ceilometer_hooks.py | 17 +++-- 4 files changed, 97 insertions(+), 35 deletions(-) diff --git a/hooks/ceilometer_hooks.py b/hooks/ceilometer_hooks.py index 40bf970..62ee121 100755 --- a/hooks/ceilometer_hooks.py +++ b/hooks/ceilometer_hooks.py @@ -440,7 +440,7 @@ def ceilometer_joined(): # pass the data to agents. if 'rabbit_ssl_ca' in context: with open(context['rabbit_ssl_ca'], 'rb') as fh: - context['rabbit_ssl_ca'] = base64.b64encode(fh.read()) + context['rabbit_ssl_ca'] = base64.b64encode(fh.read()).decode() for relid in relation_ids('ceilometer-service'): relation_set(relid, context) diff --git a/tests/bundles/trusty-mitaka.yaml b/tests/bundles/trusty-mitaka.yaml index 6069c72..95b44dd 100644 --- a/tests/bundles/trusty-mitaka.yaml +++ b/tests/bundles/trusty-mitaka.yaml @@ -22,7 +22,7 @@ applications: to: - '1' mongodb: - charm: cs:trusty/mongodb + charm: cs:trusty/mongodb-53 num_units: 1 to: - '2' @@ -98,4 +98,4 @@ relations: - - 'nova-cloud-controller:cloud-compute' - 'nova-compute:cloud-compute' - - 'nova-cloud-controller:image-service' - - 'glance:image-service' \ No newline at end of file + - 'glance:image-service' diff --git a/tests/bundles/xenial-ocata.yaml b/tests/bundles/xenial-ocata.yaml index 54b064f..ca58e15 100644 --- a/tests/bundles/xenial-ocata.yaml +++ b/tests/bundles/xenial-ocata.yaml @@ -10,58 +10,101 @@ machines: 5: {} 6: {} 7: {} + 8: {} + 9: {} + 10: {} + 11: {} + 12: {} + 13: {} + 14: {} + 15: {} applications: percona-cluster: - charm: cs:~openstack-charmers/percona-cluster + charm: cs:~openstack-charmers-next/percona-cluster num_units: 1 + options: + max-connections: 1000 + innodb-buffer-pool-size: 256M to: - '0' rabbitmq-server: - charm: cs:~openstack-charmers/rabbitmq-server + charm: cs:~openstack-charmers-next/rabbitmq-server num_units: 1 to: - '1' - mongodb: - charm: cs:xenial/mongodb + memcached: + charm: cs:~memcached-team/memcached num_units: 1 to: - '2' - keystone: - charm: cs:~openstack-charmers/keystone - num_units: 1 + ceph-osd: + charm: cs:~openstack-charmers-next/ceph-osd + num_units: 3 + storage: + osd-devices: 'cinder,10G' options: - openstack-origin: *source + source: *source to: - '3' - glance: - charm: cs:~openstack-charmers/glance - num_units: 1 - options: - openstack-origin: *source - to: - '4' - nova-cloud-controller: - charm: cs:~openstack-charmers/nova-cloud-controller - num_units: 1 - options: - openstack-origin: *source - to: - '5' - nova-compute: - charm: cs:~openstack-charmers/nova-compute - num_units: 1 + ceph-mon: + charm: cs:~openstack-charmers-next/ceph-mon + num_units: 3 options: - openstack-origin: *source + source: *source to: - '6' + - '7' + - '8' + keystone: + charm: cs:~openstack-charmers-next/keystone + num_units: 1 + options: + openstack-origin: *source + to: + - '9' + glance: + charm: cs:~openstack-charmers-next/glance + num_units: 1 + options: + openstack-origin: *source + to: + - '10' + nova-cloud-controller: + charm: cs:~openstack-charmers-next/nova-cloud-controller + num_units: 1 + options: + openstack-origin: *source + to: + - '11' + nova-compute: + charm: cs:~openstack-charmers-next/nova-compute + num_units: 1 + options: + openstack-origin: *source + to: + - '12' ceilometer: num_units: 1 options: openstack-origin: *source to: - - '7' + - '13' + gnocchi: + charm: cs:~openstack-charmers-next/gnocchi + num_units: 1 + options: + openstack-origin: *source + to: + - '14' ceilometer-agent: - charm: cs:~openstack-charmers/ceilometer-agent + charm: cs:~openstack-charmers-next/ceilometer-agent + mongodb: + num_units: 1 + charm: cs:xenial/mongodb + to: + - '15' relations: - - 'ceilometer:amqp' - 'rabbitmq-server:amqp' @@ -69,6 +112,8 @@ relations: - 'keystone:identity-notifications' - - 'ceilometer:ceilometer-service' - 'ceilometer-agent:ceilometer-service' +- - 'ceilometer:metric-service' + - 'gnocchi:metric-service' - - 'ceilometer:identity-service' - 'keystone:identity-service' - - 'ceilometer:shared-db' @@ -98,4 +143,14 @@ relations: - - 'nova-cloud-controller:cloud-compute' - 'nova-compute:cloud-compute' - - 'nova-cloud-controller:image-service' - - 'glance:image-service' \ No newline at end of file + - 'glance:image-service' +- - 'ceph-mon:osd' + - 'ceph-osd:mon' +- - 'gnocchi:shared-db' + - 'percona-cluster:shared-db' +- - 'gnocchi:storage-ceph' + - 'ceph-mon:client' +- - 'gnocchi:coordinator-memcached' + - 'memcached:cache' +- - 'gnocchi:identity-service' + - 'keystone:identity-service' diff --git a/unit_tests/test_ceilometer_hooks.py b/unit_tests/test_ceilometer_hooks.py index b2fb19b..d4b0372 100644 --- a/unit_tests/test_ceilometer_hooks.py +++ b/unit_tests/test_ceilometer_hooks.py @@ -16,7 +16,7 @@ import copy import os import sys -from mock import patch, MagicMock, call +from mock import patch, MagicMock, call, mock_open # python-apt is not installed as part of test-requirements but is imported by # some charmhelpers modules so create a fake import. @@ -317,10 +317,17 @@ class CeilometerHooksTest(CharmTestCase): @patch('charmhelpers.core.hookenv.config') def test_ceilometer_joined(self, mock_config): self.relation_ids.return_value = ['ceilometer:0'] - self.get_ceilometer_context.return_value = {'test': 'data'} - hooks.hooks.execute(['hooks/ceilometer-service-relation-joined']) - self.relation_set.assert_called_with('ceilometer:0', - {'test': 'data'}) + self.get_ceilometer_context.return_value = { + 'test': 'data', + 'rabbit_ssl_ca': '/etc/certs/rabbit.pem'} + with patch.object( + hooks, + 'open', + mock_open(read_data=b'dGVzdCBjZXJ0Cg==')): + hooks.hooks.execute(['hooks/ceilometer-service-relation-joined']) + self.relation_set.assert_called_with( + 'ceilometer:0', + {'test': 'data', 'rabbit_ssl_ca': 'ZEdWemRDQmpaWEowQ2c9PQ=='}) @patch('charmhelpers.core.hookenv.config') def test_identity_notifications_changed(self, mock_config):