diff --git a/zaza/openstack/charm_tests/hacluster/tests.py b/zaza/openstack/charm_tests/hacluster/tests.py index 3ae13d1..7715a4a 100644 --- a/zaza/openstack/charm_tests/hacluster/tests.py +++ b/zaza/openstack/charm_tests/hacluster/tests.py @@ -24,15 +24,19 @@ import zaza.openstack.configure.hacluster import zaza.utilities.juju as juju_utils -class HaclusterTest(test_utils.OpenStackBaseTest): - """hacluster tests.""" +class HaclusterBaseTest(test_utils.OpenStackBaseTest): + """Base class for hacluster tests.""" @classmethod def setUpClass(cls): """Run class setup for running hacluster tests.""" - super(HaclusterTest, cls).setUpClass() + super(HaclusterBaseTest, cls).setUpClass() cls.vip = os.environ.get("TEST_VIP00") + +class HaclusterTest(HaclusterBaseTest): + """hacluster tests.""" + def test_900_action_cleanup(self): """The services can be cleaned up.""" zaza.model.run_action_on_leader( @@ -71,22 +75,20 @@ class HaclusterTest(test_utils.OpenStackBaseTest): self._toggle_maintenance_and_wait('true') self._toggle_maintenance_and_wait('false') - def test_930_scaleback_bionic(self): + +class HaclusterScalebackTest(HaclusterBaseTest): + """hacluster scaleback tests.""" + + _PRINCIPLE_APP = 'keystone' + + def test_930_scaleback(self): """Remove a unit, recalculate quorum and add a new one.""" - principle_app = 'keystone' principle_units = zaza.model.get_status().applications[ - principle_app]['units'] + self._PRINCIPLE_APP]['units'] self.assertEqual(len(principle_units), 3) doomed_principle = sorted(principle_units.keys())[0] - series = juju_utils.get_machine_series( - principle_units[doomed_principle].machine) - if series != 'bionic': - logging.debug("noop - only run test in bionic") - logging.info('SKIP') - return - doomed_unit = juju_utils.get_subordinate_units( - [doomed_principle], charm_name='hac')[0] + [doomed_principle], charm_name=self.application_name)[0] logging.info('Pausing unit {}'.format(doomed_unit)) zaza.model.run_action( @@ -104,7 +106,7 @@ class HaclusterTest(test_utils.OpenStackBaseTest): logging.info('Removing {}'.format(doomed_principle)) zaza.model.destroy_unit( - principle_app, + self._PRINCIPLE_APP, doomed_principle, wait_disappear=True) logging.info('OK') @@ -116,25 +118,25 @@ class HaclusterTest(test_utils.OpenStackBaseTest): action_params={'i-really-mean-it': True}, raise_on_failure=True) - _states = { + expected_states = { self.application_name: { "workload-status": "blocked", "workload-status-message": "Insufficient peer units for ha cluster (require 3)" }, - 'keystone': { + self._PRINCIPLE_APP: { "workload-status": "blocked", "workload-status-message": "Database not initialised", }, } - zaza.model.wait_for_application_states(states=_states) + zaza.model.wait_for_application_states(states=expected_states) zaza.model.block_until_all_units_idle() logging.info('OK') logging.info('Adding a hacluster unit') - zaza.model.add_unit(principle_app, wait_appear=True) - _states = {self.application_name: { + zaza.model.add_unit(self._PRINCIPLE_APP, wait_appear=True) + expected_states = {self.application_name: { "workload-status": "active", "workload-status-message": "Unit is ready and clustered"}} - zaza.model.wait_for_application_states(states=_states) + zaza.model.wait_for_application_states(states=expected_states) logging.debug('OK')