From 6cab1f8b85cfd0784b7b07feaafec48480ab4fc3 Mon Sep 17 00:00:00 2001 From: Eduardo Sousa Date: Wed, 18 Sep 2019 16:09:08 +0100 Subject: [PATCH 1/3] Porting Ceilometer tests to Zaza Porting the Amulet tests from Ceilometer to the Zaza framework. The Amulet tests can be found here: https://opendev.org/openstack/charm-ceilometer/src/branch/master/tests/basic_deployment.py --- .../charm_tests/ceilometer/__init__.py | 17 +++ .../openstack/charm_tests/ceilometer/setup.py | 43 +++++++ .../openstack/charm_tests/ceilometer/tests.py | 118 ++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 zaza/openstack/charm_tests/ceilometer/__init__.py create mode 100644 zaza/openstack/charm_tests/ceilometer/setup.py create mode 100644 zaza/openstack/charm_tests/ceilometer/tests.py diff --git a/zaza/openstack/charm_tests/ceilometer/__init__.py b/zaza/openstack/charm_tests/ceilometer/__init__.py new file mode 100644 index 0000000..106535e --- /dev/null +++ b/zaza/openstack/charm_tests/ceilometer/__init__.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +# Copyright 2019 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Collection of code for setting up and testing ceilometer.""" diff --git a/zaza/openstack/charm_tests/ceilometer/setup.py b/zaza/openstack/charm_tests/ceilometer/setup.py new file mode 100644 index 0000000..0051624 --- /dev/null +++ b/zaza/openstack/charm_tests/ceilometer/setup.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +# Copyright 2019 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Code for configuring Ceilometer.""" + +import logging +import zaza.model as zaza_model +import zaza.openstack.utilities.openstack as openstack_utils + + +def basic_setup(unit='ceilometer/0'): + """Run setup for testing Ceilometer. + + Setup for testing Ceilometer is currently part of functional + tests. + """ + current_release = openstack_utils.get_os_release() + xenial_pike = openstack_utils.get_os_release('xenial_pike') + + if current_release < xenial_pike: + logging.debug('Not checking ceilometer-upgrade') + return + logging.debug('Checking ceilometer-upgrade') + + action = zaza_model.run_action( + unit, + 'ceilometer-upgrade', + raise_on_failure=True) + + return action diff --git a/zaza/openstack/charm_tests/ceilometer/tests.py b/zaza/openstack/charm_tests/ceilometer/tests.py new file mode 100644 index 0000000..f57d4af --- /dev/null +++ b/zaza/openstack/charm_tests/ceilometer/tests.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 + +# Copyright 2019 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Encapsulate Ceilometer testing.""" + +import logging + +import zaza.openstack.utilities.openstack as openstack_utils +import zaza.openstack.charm_tests.test_utils as test_utils + + +class CeilometerTest(test_utils.OpenStackBaseTest): + """Encapsulate Ceilometer tests.""" + + @classmethod + def setUpClass(cls): + """Run class setup for running Ceilometer tests.""" + super(CeilometerTest, cls).setUpClass() + + # NOTE(beisner): need to add more functional tests + + def test_900_restart_on_config_change(self): + """Checking restart happens on config change.""" + # Expected default and alternate values + current_value = openstack_utils.get_application_config_option( + 'ceilometer', 'debug' + ) + assert type(current_value) == bool + new_value = not current_value + + # Convert bool to str + current_value = str(current_value) + new_value = str(new_value) + + set_default = {'debug': current_value} + set_alternate = {'debug': new_value} + default_entry = {'DEFAULT': {'debug': [current_value]}} + alternate_entry = {'DEFAULT': {'debug': [new_value]}} + + # Config file affected by juju set config change + conf_file = '/etc/ceilometer/ceilometer.conf' + services = {} + current_release = openstack_utils.get_os_release() + xenial_pike = openstack_utils.get_os_release('xenial_pike') + xenial_ocata = openstack_utils.get_os_release('xenial_ocata') + xenial_newton = openstack_utils.get_os_release('xenial_newton') + trusty_mitaka = openstack_utils.get_os_release('trusty_mitaka') + trusty_liberty = openstack_utils.get_os_release('trusty_liberty') + + if current_release >= xenial_pike: + services = { + 'ceilometer-polling: AgentManager worker(0)': conf_file, + 'ceilometer-agent-notification: NotificationService worker(0)': + conf_file, + } + elif current_release >= xenial_ocata: + services = { + 'ceilometer-collector: CollectorService worker(0)': conf_file, + 'ceilometer-polling: AgentManager worker(0)': conf_file, + 'ceilometer-agent-notification: NotificationService worker(0)': + conf_file, + 'apache2': conf_file, + } + elif current_release >= xenial_newton: + services = { + 'ceilometer-collector - CollectorService(0)': conf_file, + 'ceilometer-polling - AgentManager(0)': conf_file, + 'ceilometer-agent-notification - NotificationService(0)': + conf_file, + 'ceilometer-api': conf_file, + } + else: + services = { + 'ceilometer-collector': conf_file, + 'ceilometer-api': conf_file, + 'ceilometer-agent-notification': conf_file, + } + + if current_release < trusty_mitaka: + services['ceilometer-alarm-notifier'] = conf_file + services['ceilometer-alarm-evaluator'] = conf_file + + if current_release >= trusty_liberty: + # Liberty and later + services['ceilometer-polling'] = conf_file + else: + # Juno and earlier + services['ceilometer-agent-central'] = conf_file + + logging.info('changing config: {}'.format(set_alternate)) + self.restart_on_changed( + conf_file, + set_default, + set_alternate, + default_entry, + alternate_entry, + services) + + def test_901_pause_resume(self): + """Run pause and resume tests. + + Pause service and check services are stopped then resume and check + they are started. + """ + self.pause_resume(['ceilometer']) From c94fbceac1c4c60dedc4307997e53384834b09ca Mon Sep 17 00:00:00 2001 From: Eduardo Sousa Date: Tue, 24 Sep 2019 15:44:49 +0100 Subject: [PATCH 2/3] Refactoring variables and properties --- .../openstack/charm_tests/ceilometer/setup.py | 11 +- .../openstack/charm_tests/ceilometer/tests.py | 105 +++++++++--------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/zaza/openstack/charm_tests/ceilometer/setup.py b/zaza/openstack/charm_tests/ceilometer/setup.py index 0051624..4d716a3 100644 --- a/zaza/openstack/charm_tests/ceilometer/setup.py +++ b/zaza/openstack/charm_tests/ceilometer/setup.py @@ -17,11 +17,12 @@ """Code for configuring Ceilometer.""" import logging +import unittest import zaza.model as zaza_model import zaza.openstack.utilities.openstack as openstack_utils -def basic_setup(unit='ceilometer/0'): +def basic_setup(): """Run setup for testing Ceilometer. Setup for testing Ceilometer is currently part of functional @@ -31,12 +32,12 @@ def basic_setup(unit='ceilometer/0'): xenial_pike = openstack_utils.get_os_release('xenial_pike') if current_release < xenial_pike: - logging.debug('Not checking ceilometer-upgrade') - return + raise unittest.SkipTest('Not checking ceilometer-upgrade') + logging.debug('Checking ceilometer-upgrade') - action = zaza_model.run_action( - unit, + action = zaza_model.run_action_on_leader( + 'ceilometer', 'ceilometer-upgrade', raise_on_failure=True) diff --git a/zaza/openstack/charm_tests/ceilometer/tests.py b/zaza/openstack/charm_tests/ceilometer/tests.py index f57d4af..1e2e316 100644 --- a/zaza/openstack/charm_tests/ceilometer/tests.py +++ b/zaza/openstack/charm_tests/ceilometer/tests.py @@ -25,11 +25,59 @@ import zaza.openstack.charm_tests.test_utils as test_utils class CeilometerTest(test_utils.OpenStackBaseTest): """Encapsulate Ceilometer tests.""" + CONF_FILE = '/etc/ceilometer/ceilometer.conf' + + XENIAL_PIKE = openstack_utils.get_os_release('xenial_pike') + XENIAL_OCATA = openstack_utils.get_os_release('xenial_ocata') + XENIAL_NEWTON = openstack_utils.get_os_release('xenial_newton') + TRUSTY_MITAKA = openstack_utils.get_os_release('trusty_mitaka') + TRUSTY_LIBERTY = openstack_utils.get_os_release('trusty_liberty') + @classmethod def setUpClass(cls): """Run class setup for running Ceilometer tests.""" super(CeilometerTest, cls).setUpClass() + @property + def services(self): + """Return a list services for Openstack Release.""" + current_release = openstack_utils.get_os_release() + services = [] + + if current_release >= CeilometerTest.XENIAL_PIKE: + services.append('ceilometer-polling: AgentManager worker(0)') + services.append('ceilometer-agent-notification: ' + 'NotificationService worker(0)') + elif current_release >= CeilometerTest.XENIAL_OCATA: + services.append('ceilometer-collector: CollectorService worker(0)') + services.append('ceilometer-polling: AgentManager worker(0)') + services.append('ceilometer-agent-notification: ' + 'NotificationService worker(0)') + services.append('apache2') + elif current_release >= CeilometerTest.XENIAL_NEWTON: + services.append('ceilometer-collector - CollectorService(0)') + services.append('ceilometer-polling - AgentManager(0)') + services.append('ceilometer-agent-notification - ' + 'NotificationService(0)') + services.append('ceilometer-api') + else: + services.append('ceilometer-collector') + services.append('ceilometer-api') + services.append('ceilometer-agent-notification') + + if current_release < CeilometerTest.TRUSTY_MITAKA: + services.append('ceilometer-alarm-notifier') + services.append('ceilometer-alarm-evaluator') + + if current_release >= CeilometerTest.TRUSTY_LIBERTY: + # Liberty and later + services.append('ceilometer-polling') + else: + # Juno and earlier + services.append('ceilometer-agent-central') + + return services + # NOTE(beisner): need to add more functional tests def test_900_restart_on_config_change(self): @@ -50,64 +98,14 @@ class CeilometerTest(test_utils.OpenStackBaseTest): default_entry = {'DEFAULT': {'debug': [current_value]}} alternate_entry = {'DEFAULT': {'debug': [new_value]}} - # Config file affected by juju set config change - conf_file = '/etc/ceilometer/ceilometer.conf' - services = {} - current_release = openstack_utils.get_os_release() - xenial_pike = openstack_utils.get_os_release('xenial_pike') - xenial_ocata = openstack_utils.get_os_release('xenial_ocata') - xenial_newton = openstack_utils.get_os_release('xenial_newton') - trusty_mitaka = openstack_utils.get_os_release('trusty_mitaka') - trusty_liberty = openstack_utils.get_os_release('trusty_liberty') - - if current_release >= xenial_pike: - services = { - 'ceilometer-polling: AgentManager worker(0)': conf_file, - 'ceilometer-agent-notification: NotificationService worker(0)': - conf_file, - } - elif current_release >= xenial_ocata: - services = { - 'ceilometer-collector: CollectorService worker(0)': conf_file, - 'ceilometer-polling: AgentManager worker(0)': conf_file, - 'ceilometer-agent-notification: NotificationService worker(0)': - conf_file, - 'apache2': conf_file, - } - elif current_release >= xenial_newton: - services = { - 'ceilometer-collector - CollectorService(0)': conf_file, - 'ceilometer-polling - AgentManager(0)': conf_file, - 'ceilometer-agent-notification - NotificationService(0)': - conf_file, - 'ceilometer-api': conf_file, - } - else: - services = { - 'ceilometer-collector': conf_file, - 'ceilometer-api': conf_file, - 'ceilometer-agent-notification': conf_file, - } - - if current_release < trusty_mitaka: - services['ceilometer-alarm-notifier'] = conf_file - services['ceilometer-alarm-evaluator'] = conf_file - - if current_release >= trusty_liberty: - # Liberty and later - services['ceilometer-polling'] = conf_file - else: - # Juno and earlier - services['ceilometer-agent-central'] = conf_file - logging.info('changing config: {}'.format(set_alternate)) self.restart_on_changed( - conf_file, + CeilometerTest.CONF_FILE, set_default, set_alternate, default_entry, alternate_entry, - services) + self.services) def test_901_pause_resume(self): """Run pause and resume tests. @@ -115,4 +113,5 @@ class CeilometerTest(test_utils.OpenStackBaseTest): Pause service and check services are stopped then resume and check they are started. """ - self.pause_resume(['ceilometer']) + with self.pause_resume(['ceilometer']): + logging.info("Testing pause and resume") From 730cd788c8cd57245882bd59b29c268e1b4b962b Mon Sep 17 00:00:00 2001 From: Eduardo Sousa Date: Wed, 25 Sep 2019 13:31:40 +0100 Subject: [PATCH 3/3] Fixing skip test message --- zaza/openstack/charm_tests/ceilometer/setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zaza/openstack/charm_tests/ceilometer/setup.py b/zaza/openstack/charm_tests/ceilometer/setup.py index 4d716a3..1cd9b2d 100644 --- a/zaza/openstack/charm_tests/ceilometer/setup.py +++ b/zaza/openstack/charm_tests/ceilometer/setup.py @@ -32,7 +32,8 @@ def basic_setup(): xenial_pike = openstack_utils.get_os_release('xenial_pike') if current_release < xenial_pike: - raise unittest.SkipTest('Not checking ceilometer-upgrade') + raise unittest.SkipTest('Skipping ceilometer-upgrade as it is not ' + 'supported before Pike') logging.debug('Checking ceilometer-upgrade')