From 545a8875d01a73c2e08a1ed528cd7fc080ebba5a Mon Sep 17 00:00:00 2001 From: Luigi Toscano Date: Fri, 20 Sep 2024 15:24:47 +0200 Subject: [PATCH] Port to the tempest stable plugin interface (clients) This is one of the last tempest plugins which was still not using the proper interface to define its clients. (Hopefully) no behavioral changes, just refactoring. Change-Id: Ia57c771186cd1bf283f30b58007395d33aefa4a9 --- .../volume/admin/test_consistencygroups.py | 59 +++++++++---------- cinder_tempest_plugin/api/volume/base.py | 6 ++ .../api/volume/test_volume_revert.py | 8 --- cinder_tempest_plugin/cinder_clients.py | 30 ++++------ cinder_tempest_plugin/plugin.py | 23 ++++++++ cinder_tempest_plugin/services/__init__.py | 22 +++++++ 6 files changed, 90 insertions(+), 58 deletions(-) diff --git a/cinder_tempest_plugin/api/volume/admin/test_consistencygroups.py b/cinder_tempest_plugin/api/volume/admin/test_consistencygroups.py index 42c78f13..191ecb2b 100644 --- a/cinder_tempest_plugin/api/volume/admin/test_consistencygroups.py +++ b/cinder_tempest_plugin/api/volume/admin/test_consistencygroups.py @@ -20,18 +20,11 @@ from tempest.lib.common.utils import data_utils from tempest.lib import decorators from cinder_tempest_plugin.api.volume import base -from cinder_tempest_plugin import cinder_clients CONF = config.CONF class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): - @classmethod - def setup_clients(cls): - super(ConsistencyGroupsV2Test, cls).setup_clients() - - manager = cinder_clients.Manager(cls.os_admin) - cls.consistencygroups_adm_client = manager.consistencygroups_adm_client @classmethod def skip_checks(cls): @@ -41,16 +34,16 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): "feature disabled") def _delete_consistencygroup(self, cg_id): - self.consistencygroups_adm_client.delete_consistencygroup(cg_id) + self.admin_consistencygroups_client.delete_consistencygroup(cg_id) vols = self.admin_volume_client.list_volumes(detail=True)['volumes'] for vol in vols: if vol['consistencygroup_id'] == cg_id: self.admin_volume_client.wait_for_resource_deletion(vol['id']) - self.consistencygroups_adm_client.wait_for_consistencygroup_deletion( + self.admin_consistencygroups_client.wait_for_consistencygroup_deletion( cg_id) def _delete_cgsnapshot(self, cgsnapshot_id, cg_id): - self.consistencygroups_adm_client.delete_cgsnapshot(cgsnapshot_id) + self.admin_consistencygroups_client.delete_cgsnapshot(cgsnapshot_id) vols = self.admin_volume_client.list_volumes(detail=True)['volumes'] snapshots = self.os_admin.snapshots_v2_client.list_snapshots( detail=True)['snapshots'] @@ -60,7 +53,7 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): vol['id'] == snap['volume_id']): (self.snapshots_client. wait_for_resource_deletion(snap['id'])) - self.consistencygroups_adm_client.wait_for_cgsnapshot_deletion( + self.admin_consistencygroups_client.wait_for_cgsnapshot_deletion( cgsnapshot_id) @decorators.idempotent_id('3fe776ba-ec1f-4e6c-8d78-4b14c3a7fc44') @@ -73,10 +66,10 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create CG cg_name = data_utils.rand_name('CG') create_consistencygroup = ( - self.consistencygroups_adm_client.create_consistencygroup) + self.admin_consistencygroups_client.create_consistencygroup) cg = create_consistencygroup(volume_type['id'], name=cg_name)['consistencygroup'] - self.consistencygroups_adm_client.wait_for_consistencygroup_status( + self.admin_consistencygroups_client.wait_for_consistencygroup_status( cg['id'], 'available') self.assertEqual(cg_name, cg['name']) @@ -92,12 +85,12 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): volume['id'], 'available') # Get a given CG - cg = self.consistencygroups_adm_client.show_consistencygroup( + cg = self.admin_consistencygroups_client.show_consistencygroup( cg['id'])['consistencygroup'] self.assertEqual(cg_name, cg['name']) # Get all CGs with detail - cgs = self.consistencygroups_adm_client.list_consistencygroups( + cgs = self.admin_consistencygroups_client.list_consistencygroups( detail=True)['consistencygroups'] self.assertIn((cg['name'], cg['id']), [(m['name'], m['id']) for m in cgs]) @@ -117,10 +110,10 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create CG cg_name = data_utils.rand_name('CG') create_consistencygroup = ( - self.consistencygroups_adm_client.create_consistencygroup) + self.admin_consistencygroups_client.create_consistencygroup) cg = create_consistencygroup(volume_type['id'], name=cg_name)['consistencygroup'] - self.consistencygroups_adm_client.wait_for_consistencygroup_status( + self.admin_consistencygroups_client.wait_for_consistencygroup_status( cg['id'], 'available') self.assertEqual(cg_name, cg['name']) @@ -137,10 +130,10 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create cgsnapshot cgsnapshot_name = data_utils.rand_name('cgsnapshot') create_cgsnapshot = ( - self.consistencygroups_adm_client.create_cgsnapshot) + self.admin_consistencygroups_client.create_cgsnapshot) cgsnapshot = create_cgsnapshot(cg['id'], name=cgsnapshot_name)['cgsnapshot'] - self.consistencygroups_adm_client.wait_for_cgsnapshot_status( + self.admin_consistencygroups_client.wait_for_cgsnapshot_status( cgsnapshot['id'], 'available') self.assertEqual(cgsnapshot_name, cgsnapshot['name']) snapshots = self.os_admin.snapshots_v2_client.list_snapshots( @@ -152,12 +145,12 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): snap['id'], 'available') # Get a given CG snapshot - cgsnapshot = self.consistencygroups_adm_client.show_cgsnapshot( + cgsnapshot = self.admin_consistencygroups_client.show_cgsnapshot( cgsnapshot['id'])['cgsnapshot'] self.assertEqual(cgsnapshot_name, cgsnapshot['name']) # Get all CG snapshots with detail - cgsnapshots = self.consistencygroups_adm_client.list_cgsnapshots( + cgsnapshots = self.admin_consistencygroups_client.list_cgsnapshots( detail=True)['cgsnapshots'] self.assertIn((cgsnapshot['name'], cgsnapshot['id']), [(m['name'], m['id']) for m in cgsnapshots]) @@ -177,10 +170,10 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create CG cg_name = data_utils.rand_name('CG') create_consistencygroup = ( - self.consistencygroups_adm_client.create_consistencygroup) + self.admin_consistencygroups_client.create_consistencygroup) cg = create_consistencygroup(volume_type['id'], name=cg_name)['consistencygroup'] - self.consistencygroups_adm_client.wait_for_consistencygroup_status( + self.admin_consistencygroups_client.wait_for_consistencygroup_status( cg['id'], 'available') self.assertEqual(cg_name, cg['name']) @@ -197,10 +190,10 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create cgsnapshot cgsnapshot_name = data_utils.rand_name('cgsnapshot') create_cgsnapshot = ( - self.consistencygroups_adm_client.create_cgsnapshot) + self.admin_consistencygroups_client.create_cgsnapshot) cgsnapshot = create_cgsnapshot(cg['id'], name=cgsnapshot_name)['cgsnapshot'] - self.consistencygroups_adm_client.wait_for_cgsnapshot_status( + self.admin_consistencygroups_client.wait_for_cgsnapshot_status( cgsnapshot['id'], 'available') self.assertEqual(cgsnapshot_name, cgsnapshot['name']) snapshots = self.snapshots_client.list_snapshots( @@ -213,10 +206,12 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create CG from CG snapshot cg_name2 = data_utils.rand_name('CG_from_snap') create_consistencygroup2 = ( - self.consistencygroups_adm_client.create_consistencygroup_from_src) + self.admin_consistencygroups_client. + create_consistencygroup_from_src + ) cg2 = create_consistencygroup2(cgsnapshot_id=cgsnapshot['id'], name=cg_name2)['consistencygroup'] - self.consistencygroups_adm_client.wait_for_consistencygroup_status( + self.admin_consistencygroups_client.wait_for_consistencygroup_status( cg2['id'], 'available') self.assertEqual(cg_name2, cg2['name']) vols = self.admin_volume_client.list_volumes( @@ -242,10 +237,10 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create CG cg_name = data_utils.rand_name('CG') create_consistencygroup = ( - self.consistencygroups_adm_client.create_consistencygroup) + self.admin_consistencygroups_client.create_consistencygroup) cg = create_consistencygroup(volume_type['id'], name=cg_name)['consistencygroup'] - self.consistencygroups_adm_client.wait_for_consistencygroup_status( + self.admin_consistencygroups_client.wait_for_consistencygroup_status( cg['id'], 'available') self.assertEqual(cg_name, cg['name']) @@ -262,10 +257,12 @@ class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest): # Create CG from CG cg_name2 = data_utils.rand_name('CG_from_cg') create_consistencygroup2 = ( - self.consistencygroups_adm_client.create_consistencygroup_from_src) + self.admin_consistencygroups_client. + create_consistencygroup_from_src + ) cg2 = create_consistencygroup2(source_cgid=cg['id'], name=cg_name2)['consistencygroup'] - self.consistencygroups_adm_client.wait_for_consistencygroup_status( + self.admin_consistencygroups_client.wait_for_consistencygroup_status( cg2['id'], 'available') self.assertEqual(cg_name2, cg2['name']) vols = self.admin_volume_client.list_volumes( diff --git a/cinder_tempest_plugin/api/volume/base.py b/cinder_tempest_plugin/api/volume/base.py index c0f53bd3..1c64973d 100644 --- a/cinder_tempest_plugin/api/volume/base.py +++ b/cinder_tempest_plugin/api/volume/base.py @@ -50,6 +50,9 @@ class BaseVolumeTest(api_version_utils.BaseMicroversionTest, cls.backups_client = cls.os_primary.backups_client_latest cls.volumes_client = cls.os_primary.volumes_client_latest cls.snapshots_client = cls.os_primary.snapshots_client_latest + cls.volume_revert_client = ( + cls.os_primary.volume_revert_v3.VolumeRevertClient() + ) @classmethod def setup_credentials(cls): @@ -196,6 +199,9 @@ class BaseVolumeAdminTest(BaseVolumeTest): cls.admin_volume_types_client = cls.os_admin.volume_types_client_latest cls.admin_backups_client = cls.os_admin.backups_client_latest cls.admin_volume_client = cls.os_admin.volumes_client_latest + cls.admin_consistencygroups_client = ( + cls.os_admin.consistencygroups_v3.ConsistencyGroupsClient() + ) @classmethod def create_volume_type(cls, name=None, **kwargs): diff --git a/cinder_tempest_plugin/api/volume/test_volume_revert.py b/cinder_tempest_plugin/api/volume/test_volume_revert.py index 2c4d6bdc..c585c3c8 100644 --- a/cinder_tempest_plugin/api/volume/test_volume_revert.py +++ b/cinder_tempest_plugin/api/volume/test_volume_revert.py @@ -19,7 +19,6 @@ from tempest.lib import decorators from tempest.lib import exceptions from cinder_tempest_plugin.api.volume import base -from cinder_tempest_plugin import cinder_clients CONF = config.CONF @@ -33,13 +32,6 @@ class VolumeRevertTests(base.BaseVolumeTest): if not CONF.volume_feature_enabled.volume_revert: raise cls.skipException("Cinder volume revert feature disabled") - @classmethod - def setup_clients(cls): - super(VolumeRevertTests, cls).setup_clients() - - manager = cinder_clients.Manager(cls.os_primary) - cls.volume_revert_client = manager.volume_revert_client - def setUp(self): super(VolumeRevertTests, self).setUp() # Create volume diff --git a/cinder_tempest_plugin/cinder_clients.py b/cinder_tempest_plugin/cinder_clients.py index f4c7c0ea..b27d22c1 100644 --- a/cinder_tempest_plugin/cinder_clients.py +++ b/cinder_tempest_plugin/cinder_clients.py @@ -14,27 +14,19 @@ # under the License. from tempest import config - -from cinder_tempest_plugin.services import consistencygroups_client -from cinder_tempest_plugin.services import volume_revert_client +from tempest.lib.services import clients CONF = config.CONF -class Manager(object): - def __init__(self, base_manager): - params = { - 'service': CONF.volume.catalog_type, - 'region': CONF.volume.region or CONF.identity.region, - 'endpoint_type': CONF.volume.endpoint_type, - 'build_interval': CONF.volume.build_interval, - 'build_timeout': CONF.volume.build_timeout - } - params.update(base_manager.default_params) - auth_provider = base_manager.auth_provider +class Clients(clients.ServiceClients): + """Tempest stable service clients and loaded plugins service clients""" - self.consistencygroups_adm_client = ( - consistencygroups_client.ConsistencyGroupsClient(auth_provider, - **params)) - self.volume_revert_client = ( - volume_revert_client.VolumeRevertClient(auth_provider, **params)) + def __init__(self, credentials, service=None): + """Emulate the interface of Tempest's clients.Manager""" + # Identity settings + if CONF.identity.auth_version == 'v2': + identity_uri = CONF.identity.uri + else: + identity_uri = CONF.identity.uri_v3 + super(Clients, self).__init__(credentials, identity_uri) diff --git a/cinder_tempest_plugin/plugin.py b/cinder_tempest_plugin/plugin.py index 5d170e55..79c835cb 100644 --- a/cinder_tempest_plugin/plugin.py +++ b/cinder_tempest_plugin/plugin.py @@ -69,3 +69,26 @@ class CinderTempestPlugin(plugins.TempestPlugin): project_config.barbican_service_option)) return opt_lists + + def get_service_clients(self): + volumes_config = config.service_client_config('volume') + + consistencygroups_params = { + 'name': 'consistencygroups_v3', + 'service_version': 'consistencygroups.v3', + 'module_path': 'cinder_tempest_plugin.services.' + 'consistencygroups_client', + 'client_names': ['ConsistencyGroupsClient'], + } + consistencygroups_params.update(volumes_config) + + volumerevert_params = { + 'name': 'volume_revert_v3', + 'service_version': 'volume_revert.v3', + 'module_path': 'cinder_tempest_plugin.services.' + 'volume_revert_client', + 'client_names': ['VolumeRevertClient'], + } + volumerevert_params.update(volumes_config) + + return [consistencygroups_params, volumerevert_params] diff --git a/cinder_tempest_plugin/services/__init__.py b/cinder_tempest_plugin/services/__init__.py index e69de29b..8be06b78 100644 --- a/cinder_tempest_plugin/services/__init__.py +++ b/cinder_tempest_plugin/services/__init__.py @@ -0,0 +1,22 @@ +# +# 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. + +from cinder_tempest_plugin.services.consistencygroups_client import \ + ConsistencyGroupsClient +from cinder_tempest_plugin.services.volume_revert_client import \ + VolumeRevertClient + +__all__ = [ + 'ConsistencyGroupsClient', + 'VolumeRevertClient' +]