Files
zaza-openstack-tests/zaza/openstack/charm_tests/aodh/tests.py
Liam Young ea84bf9ed8 Check aodh api after a change.
The first query against the aodh api after a restart seems to
fail. So, check the api after a restart with a tenacity wrapper.
2019-09-30 12:31:50 +00:00

145 lines
5.3 KiB
Python

#!/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 Aodh testing."""
import logging
import tenacity
import zaza.model
import zaza.openstack.charm_tests.test_utils as test_utils
import zaza.openstack.utilities.openstack as openstack_utils
import zaza.openstack.configure.telemetry as telemetry_utils
class AodhTest(test_utils.OpenStackBaseTest):
"""Encapsulate Aodh tests."""
RESOURCE_PREFIX = 'zaza-aodhtests'
@classmethod
def setUpClass(cls):
"""Run class setup for running tests."""
super(AodhTest, cls).setUpClass()
cls.xenial_ocata = openstack_utils.get_os_release('xenial_ocata')
cls.xenial_newton = openstack_utils.get_os_release('xenial_newton')
cls.bionic_stein = openstack_utils.get_os_release('bionic_stein')
cls.release = openstack_utils.get_os_release()
cls.keystone_session = openstack_utils.get_overcloud_keystone_session()
cls.model_name = zaza.model.get_juju_model()
cls.aodh_client = openstack_utils.get_aodh_session_client(
cls.keystone_session)
@classmethod
def tearDown(cls):
"""Remove test resources."""
logging.info('Running teardown')
cache_wait = False
for alarm in cls.aodh_client.alarm.list():
if alarm['name'].startswith(cls.RESOURCE_PREFIX):
cache_wait = True
logging.info('Removing Alarm {}'.format(alarm['name']))
telemetry_utils.delete_alarm(
cls.aodh_client,
alarm['name'],
cache_wait=False)
if cache_wait:
logging.info('Waiting for alarm cache to clear')
telemetry_utils.alarm_cache_wait()
@tenacity.retry(wait=tenacity.wait_exponential(multiplier=1, max=60),
reraise=True, stop=tenacity.stop_after_attempt(8))
def query_aodh_api(self):
"""Check that aodh api is responding."""
self.aodh_client.alarm.list()
@property
def services(self):
"""Return a list of the service that should be running."""
if self.release >= self.xenial_ocata:
services = [
'apache2',
'aodh-evaluator: AlarmEvaluationService worker(0)',
'aodh-notifier: AlarmNotifierService worker(0)',
('aodh-listener: EventAlarmEvaluationService'
' worker(0)')]
elif self.release >= self.xenial_newton:
services = [
('/usr/bin/python /usr/bin/aodh-api --port 8032 -- '
'--config-file=/etc/aodh/aodh.conf '
'--log-file=/var/log/aodh/aodh-api.log'),
'aodh-evaluator - AlarmEvaluationService(0)',
'aodh-notifier - AlarmNotifierService(0)',
'aodh-listener - EventAlarmEvaluationService(0)']
else:
services = [
'aodh-api',
'aodh-evaluator',
'aodh-notifier',
'aodh-listener']
return services
def test_100_test_api(self):
"""Check api by creating an alarm."""
alarm_name = '{}_test_api_alarm'.format(self.RESOURCE_PREFIX)
logging.info('Creating alarm {}'.format(alarm_name))
alarm = telemetry_utils.create_server_power_off_alarm(
self.aodh_client,
alarm_name,
'some-uuid')
alarm_state = telemetry_utils.get_alarm_state(
self.aodh_client,
alarm['alarm_id'])
logging.info('alarm_state: {}'.format(alarm_state))
# Until data is collected alarm come up in an 'insufficient data'
# state.
self.assertEqual(alarm_state, 'insufficient data')
def test_900_restart_on_config_change(self):
"""Checking restart happens on config change.
Change disk format and assert then change propagates to the correct
file and that services are restarted as a result
"""
# Expected default and alternate values
set_default = {'debug': 'False'}
set_alternate = {'debug': 'True'}
# Config file affected by juju set config change
conf_file = '/etc/aodh/aodh.conf'
# Make config change, check for service restarts
self.restart_on_changed(
conf_file,
set_default,
set_alternate,
{'DEFAULT': {'debug': ['False']}},
{'DEFAULT': {'debug': ['True']}},
self.services)
self.query_aodh_api()
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
"""
with self.pause_resume(
self.services,
pgrep_full=False):
logging.info("Testing pause resume")
self.query_aodh_api()