Add extra chack to galera restore test
* add restore params to openstack/database/init.yml
* add the upgrade pipeline to DriveTrain
Related: PROD-33920
Change-Id: I00c037bf0d4b17a60e5697dc7bf5b02596769d54
Change-Id: I4ecd684ad4a5e89884d12f760a12278e7ec5bd60
diff --git a/tcp_tests/tests/system/test_backup_restore_galera.py b/tcp_tests/tests/system/test_backup_restore_galera.py
index ee4043b..fd250a5 100644
--- a/tcp_tests/tests/system/test_backup_restore_galera.py
+++ b/tcp_tests/tests/system/test_backup_restore_galera.py
@@ -1,5 +1,6 @@
import pytest
+from devops.helpers.proc_enums import ExitCodes
from tcp_tests import logger
from tcp_tests import settings
@@ -10,26 +11,89 @@
"""
Created by https://mirantis.jira.com/browse/PROD-32674
"""
+ @pytest.fixture()
+ def handle_restore_params(self, reclass_actions):
+ reclass_actions.add_key(
+ 'parameters.xtrabackup.client.restore_full_latest',
+ '1',
+ 'cluster/*/openstack/database/init.yml')
+ reclass_actions.add_bool_key(
+ 'parameters.xtrabackup.client.enabled',
+ 'True',
+ 'cluster/*/openstack/database/init.yml')
+ reclass_actions.add_key(
+ 'parameters.xtrabackup.client.restore_from',
+ 'remote',
+ 'cluster/*/openstack/database/init.yml')
+ yield
+ reclass_actions.delete_key(
+ 'parameters.xtrabackup.client.restore_full_latest',
+ 'cluster/*/openstack/database/init.yml')
+ reclass_actions.delete_key(
+ 'parameters.xtrabackup.client.enabled',
+ 'cluster/*/openstack/database/init.yml')
+ reclass_actions.delete_key(
+ 'parameters.xtrabackup.client.restore_from',
+ 'cluster/*/openstack/database/init.yml')
+
+ def _get_cfg_fqn(self, salt):
+ salt_master = salt.local("I@salt:master", "network.get_fqdn")
+ return salt_master['return'][0].keys()[0]
+
+ def _perform_action_on_flavor(self, underlay_actions,
+ name, action, cfg_node):
+ xxx = underlay_actions.check_call(
+ 'source /root/keystonercv3 && '
+ 'openstack flavor {} {}'.format(action, name),
+ node_name=cfg_node)
+ LOG.info(xxx)
+
+ def create_flavor(self, underlay_actions, name, cfg_node):
+ self._perform_action_on_flavor(underlay_actions, name,
+ 'create', cfg_node)
+
+ def delete_flavor(self, underlay_actions, name, cfg_node):
+ self._perform_action_on_flavor(underlay_actions, name,
+ 'delete', cfg_node)
+
+ def is_flavor_restored(self, underlay_actions, name, cfg_node):
+ get_by_name = underlay_actions.check_call(
+ 'source /root/keystonercv3 && ' +
+ 'openstack flavor show {}'.format(name),
+ node_name=cfg_node,
+ raise_on_err=False,
+ expected=[ExitCodes.EX_OK, ExitCodes.EX_ERROR]
+ )
+ return len(get_by_name['stderr']) == 0
@pytest.mark.grab_versions
@pytest.mark.parametrize("_", [settings.ENV_NAME])
@pytest.mark.run_galera_backup_restore
- def test_backup_restore_galera(self, drivetrain_actions,
- show_step, _):
+ def test_backup_restore_galera(self, salt_actions, drivetrain_actions,
+ show_step, underlay_actions,
+ handle_restore_params, _):
"""Execute backup/restore for galera
Scenario:
- 1. Run job galera_backup_database
- 2. Run tests with cvp-sanity job
- 3. Run tests with cvp-tempest job
- 4. Run job galera_verify_restore
- 5. If jobs are passed then start tests with cvp-sanity job
- 6. Run tests with cvp-tempest job
+ 1. Create flavor to be backuped
+ 2. Run job galera_backup_database
+ 3. Run tests with cvp-sanity job
+ 4. Run tests with cvp-tempest job
+ 5. Create flavor not to be restored
+ 6. Run job galera_verify_restore
+ 7. If jobs are passed then start tests with cvp-sanity job
+ 8. Run tests with cvp-tempest job
"""
dt = drivetrain_actions
+ salt = salt_actions
- # ################## Run backup job #########################
show_step(1)
+ cfg_node = self._get_cfg_fqn(salt)
+ fixture_flavor1 = 'test1'
+ fixture_flavor2 = 'test2'
+ self.create_flavor(underlay_actions, fixture_flavor1, cfg_node)
+ # ################## Run backup job #########################
+ show_step(2)
job_name = 'galera_backup_database'
job_parameters = {
'ASK_CONFIRMATION': False
@@ -41,7 +105,7 @@
assert backup_galera_pipeline == 'SUCCESS'
# ######################## Run CPV ###########################
- show_step(2)
+ show_step(3)
job_name = 'cvp-sanity'
job_cvp_sanity_parameters = {
'EXTRA_PARAMS': '''
@@ -65,7 +129,7 @@
assert run_cvp_sanity == 'SUCCESS'
# ######################## Run Tempest ###########################
- show_step(3)
+ show_step(4)
job_name = 'cvp-tempest'
job_parameters = {
'TEMPEST_ENDPOINT_TYPE': 'internalURL'
@@ -75,8 +139,10 @@
job_parameters=job_parameters)
assert run_cvp_tempest == 'SUCCESS'
+ show_step(5)
+ self.create_flavor(underlay_actions, fixture_flavor2, cfg_node)
# ######################## Run Restore ###########################
- show_step(4)
+ show_step(6)
job_name = 'galera_verify_restore'
job_parameters = {
'RESTORE_TYPE': 'ONLY_RESTORE',
@@ -87,8 +153,16 @@
job_parameters=job_parameters)
assert run_galera_verify_restore == 'SUCCESS'
+
+ assert self.is_flavor_restored(underlay_actions,
+ fixture_flavor1,
+ cfg_node)
+ assert self.is_flavor_restored(underlay_actions,
+ fixture_flavor2,
+ cfg_node) is False
# ######################## Run CPV ###########################
- show_step(5)
+ show_step(7)
+
job_name = 'cvp-sanity'
run_cvp_sanity = dt.start_job_on_cid_jenkins(
job_name=job_name,
@@ -96,7 +170,7 @@
assert run_cvp_sanity == 'SUCCESS'
# ######################## Run Tempest ###########################
- show_step(6)
+ show_step(8)
job_name = 'cvp-tempest'
job_parameters = {
'TEMPEST_ENDPOINT_TYPE': 'internalURL'
@@ -106,3 +180,4 @@
job_parameters=job_parameters)
assert run_cvp_tempest == 'SUCCESS'
+ self.delete_flavor(underlay_actions, fixture_flavor1, cfg_node)