Codebase list cinder-tempest-plugin / c4555be
Merge tag '1.12.0' into debian/caracal cinder-tempest-plugin 1.12.0 release meta:version: 1.12.0 meta:diff-start: - meta:series: caracal meta:branch: master meta:release-type: release meta:pypi: no meta:first: no meta:release:Author: Elod Illes <elod.illes@est.tech> meta:release:Commit: Elod Illes <elod.illes@est.tech> meta:release:Change-Id: Ifa47f802cea2b586dfa738d6bb863b8dc0b720cd meta:release:Code-Review+1: Ghanshyam <gmann@ghanshyammann.com> meta:release:Code-Review+2: Elod Illes <elod.illes@est.tech> meta:release:Workflow+1: Thierry Carrez <thierry@openstack.org> meta:release:Code-Review+2: Thierry Carrez <thierry@openstack.org> meta:release:Code-Review+1: Rajat Dhasmana <rajatdhasmana@gmail.com> Thomas Goirand 2 years ago
7 changed file(s) with 143 addition(s) and 34 deletion(s). Raw diff Collapse all Expand all
2424 # branches. That is what we need to do for all tempest plugins. Only jobs
2525 # for the current releasable ("Maintained") stable branches should be listed
2626 # here.
27 - cinder-tempest-plugin-basic-2023-2
2728 - cinder-tempest-plugin-basic-2023-1
2829 - cinder-tempest-plugin-basic-zed
29 - cinder-tempest-plugin-basic-yoga
3030 - cinder-tempest-plugin-protection-functional
3131 gate:
3232 jobs:
3737 - cinder-tempest-plugin-cbak-ceph
3838 experimental:
3939 jobs:
40 - cinder-tempest-plugin-cbak-ceph-2023-2
4041 - cinder-tempest-plugin-cbak-ceph-2023-1
4142 - cinder-tempest-plugin-cbak-ceph-zed
42 - cinder-tempest-plugin-cbak-ceph-yoga
4343
4444 - job:
4545 name: cinder-tempest-plugin-protection-functional
268268 timeout: 10800
269269
270270 - job:
271 name: cinder-tempest-plugin-cbak-ceph-2023-2
272 parent: cinder-tempest-plugin-cbak-ceph
273 nodeset: openstack-single-node-jammy
274 override-checkout: stable/2023.2
275
276 - job:
271277 name: cinder-tempest-plugin-cbak-ceph-2023-1
272278 parent: cinder-tempest-plugin-cbak-ceph
273279 nodeset: openstack-single-node-jammy
278284 parent: cinder-tempest-plugin-cbak-ceph
279285 nodeset: openstack-single-node-focal
280286 override-checkout: stable/zed
281
282 - job:
283 name: cinder-tempest-plugin-cbak-ceph-yoga
284 parent: cinder-tempest-plugin-cbak-ceph
285 nodeset: openstack-single-node-focal
286 override-checkout: stable/yoga
287287
288288 # variant for pre-Ussuri branches (no volume revert for Ceph),
289289 # should this job be used on those branches
415415 - ^releasenotes/.*$
416416
417417 - job:
418 name: cinder-tempest-plugin-basic-2023-2
419 parent: cinder-tempest-plugin-basic
420 nodeset: openstack-single-node-jammy
421 override-checkout: stable/2023.2
422
423 - job:
418424 name: cinder-tempest-plugin-basic-2023-1
419425 parent: cinder-tempest-plugin-basic
420426 nodeset: openstack-single-node-jammy
425431 parent: cinder-tempest-plugin-basic
426432 nodeset: openstack-single-node-focal
427433 override-checkout: stable/zed
428
429 - job:
430 name: cinder-tempest-plugin-basic-yoga
431 parent: cinder-tempest-plugin-basic
432 nodeset: openstack-single-node-focal
433 override-checkout: stable/yoga
2727 class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest):
2828 @classmethod
2929 def setup_clients(cls):
30 cls._api_version = 2
3130 super(ConsistencyGroupsV2Test, cls).setup_clients()
32 cls.admin_volume_client = cls.os_admin.volumes_v2_client
3331
3432 manager = cinder_clients.Manager(cls.os_admin)
3533 cls.consistencygroups_adm_client = manager.consistencygroups_adm_client
2222
2323
2424 class VolumesBackupsTest(base.BaseVolumeAdminTest):
25 @classmethod
26 def setup_clients(cls):
27 super(VolumesBackupsTest, cls).setup_clients()
28 cls.admin_volume_client = cls.os_admin.volumes_client_latest
29 cls.backups_client = cls.os_primary.backups_client_latest
30 cls.volumes_client = cls.os_primary.volumes_client_latest
31
3225 @classmethod
3326 def skip_checks(cls):
3427 super(VolumesBackupsTest, cls).skip_checks()
1515 from tempest.common import compute
1616 from tempest.common import waiters
1717 from tempest import config
18 from tempest.lib.common import api_microversion_fixture
1918 from tempest.lib.common import api_version_utils
2019 from tempest.lib.common.utils import data_utils
2120 from tempest.lib.common.utils import test_utils
5655
5756 def setUp(self):
5857 super(BaseVolumeTest, self).setUp()
59 self.useFixture(api_microversion_fixture.APIMicroversionFixture(
60 volume_microversion=self.request_microversion))
6158
6259 @classmethod
6360 def resource_setup(cls):
6663 api_version_utils.select_request_microversion(
6764 cls.min_microversion,
6865 CONF.volume.min_microversion))
66 cls.setup_api_microversion_fixture(
67 volume_microversion=cls.request_microversion)
6968
7069 @classmethod
7170 def create_volume(cls, wait_until='available', **kwargs):
170169
171170 cls.admin_volume_types_client = cls.os_admin.volume_types_client_latest
172171 cls.admin_backups_client = cls.os_admin.backups_client_latest
173 cls.admin_volumes_client = cls.os_admin.volumes_client_latest
172 cls.admin_volume_client = cls.os_admin.volumes_client_latest
174173
175174 @classmethod
176175 def create_volume_type(cls, name=None, **kwargs):
193192 type_id = volume_type['id']
194193 type_name = volume_type['name']
195194
196 volumes = cls.admin_volumes_client.list_volumes(
195 volumes = cls.admin_volume_client.list_volumes(
197196 detail=True, params={'all_tenants': 1})['volumes']
198197 for volume in [v for v in volumes if v['volume_type'] == type_name]:
199198 test_utils.call_and_ignore_notfound_exc(
200 cls.admin_volumes_client.delete_volume, volume['id'])
201 cls.admin_volumes_client.wait_for_resource_deletion(volume['id'])
199 cls.admin_volume_client.delete_volume, volume['id'])
200 cls.admin_volume_client.wait_for_resource_deletion(volume['id'])
202201
203202 test_utils.call_and_ignore_notfound_exc(
204203 cls.admin_volume_types_client.delete_volume_type, type_id)
0 # Copyright 2022 Red Hat, Inc.
1 # All Rights Reserved.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License"); you may
4 # not use this file except in compliance with the License. You may obtain
5 # a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 # License for the specific language governing permissions and limitations
13 # under the License.
14
15 from tempest import config
16 from tempest.lib import decorators
17
18 from cinder_tempest_plugin.api.volume import base
19
20 CONF = config.CONF
21
22
23 class VolumeDependencyTests(base.BaseVolumeTest):
24 min_microversion = '3.40'
25
26 @classmethod
27 def setup_clients(cls):
28 super(VolumeDependencyTests, cls).setup_clients()
29
30 @decorators.idempotent_id('42e9df95-854b-4840-9d55-ae62f65e9b8e')
31 def test_delete_source_volume(self):
32 """Test basic dependency deletion
33
34 * Create a volume with source_volid
35 * Delete the source volume
36 """
37 source_volume = self.create_volume()
38 kwargs = {'source_volid': source_volume['id']}
39 cloned_volume = self.create_volume(**kwargs)
40 self.assertEqual(source_volume['id'], cloned_volume['source_volid'])
41 self.volumes_client.delete_volume(source_volume['id'])
42 self.volumes_client.wait_for_resource_deletion(source_volume['id'])
43
44 @decorators.idempotent_id('900d8ea5-2afd-4fe5-a0c3-fab4744f0d40')
45 def test_delete_source_snapshot(self):
46 """Test basic dependency deletion with snapshot
47
48 * Create a snapshot from source volume
49 * Create a volume from that snapshot
50 * Delete the source snapshot
51 * Delete the source volume
52 """
53 source_volume = self.create_volume()
54 snapshot_source_volume = self.create_snapshot(source_volume['id'])
55 kwargs = {'snapshot_id': snapshot_source_volume['id']}
56 volume_from_snapshot = self.create_volume(**kwargs)
57 self.assertEqual(volume_from_snapshot['snapshot_id'],
58 snapshot_source_volume['id'])
59
60 self.snapshots_client.delete_snapshot(snapshot_source_volume['id'])
61 self.snapshots_client.wait_for_resource_deletion(
62 snapshot_source_volume['id'])
63 self.volumes_client.delete_volume(source_volume['id'])
64 self.volumes_client.wait_for_resource_deletion(source_volume['id'])
65
66 def _delete_vol_and_wait(self, vol_id):
67 self.volumes_client.delete_volume(vol_id)
68
69 self.volumes_client.wait_for_resource_deletion(vol_id)
70
71 def _delete_snap_and_wait(self, snap_id):
72 self.snapshots_client.delete_snapshot(snap_id)
73
74 self.snapshots_client.wait_for_resource_deletion(snap_id)
75
76 @decorators.idempotent_id('f8278e5c-50ff-4a1d-8670-3ca0866d411a')
77 def test_delete_dep_chain(self):
78 """Test a complex chain of volume and snapshot dependency deletion."""
79 volume_1 = self.create_volume()['id']
80 snapshot_of_vol_1 = self.create_snapshot(volume_1)['id']
81
82 volume_2_args = {'snapshot_id': snapshot_of_vol_1}
83 volume_2 = self.create_volume(**volume_2_args)['id']
84
85 snapshot_of_vol_2 = self.create_snapshot(volume_2)['id']
86
87 volume_3_args = {'snapshot_id': snapshot_of_vol_2}
88 volume_3 = self.create_volume(**volume_3_args)['id']
89
90 volume_4_args = {'source_volid': volume_3}
91 volume_4 = self.create_volume(**volume_4_args)['id']
92
93 self._delete_snap_and_wait(snapshot_of_vol_1)
94 self._delete_snap_and_wait(snapshot_of_vol_2)
95
96 self._delete_vol_and_wait(volume_3)
97 self._delete_vol_and_wait(volume_1)
98 self._delete_vol_and_wait(volume_2)
99 self._delete_vol_and_wait(volume_4)
100
101 @decorators.idempotent_id('63447ef8-e667-4796-ba66-1b9b883af1f1')
102 def test_delete_dep_chain_2(self):
103 """Test a different chain of volume/snapshot dependency deletion."""
104 volume_1 = self.create_volume()['id']
105 snapshot_of_vol_1 = self.create_snapshot(volume_1)['id']
106
107 volume_2_args = {'snapshot_id': snapshot_of_vol_1}
108 volume_2 = self.create_volume(**volume_2_args)['id']
109
110 snapshot_of_vol_2 = self.create_snapshot(volume_2)['id']
111
112 volume_3_args = {'snapshot_id': snapshot_of_vol_2}
113 volume_3 = self.create_volume(**volume_3_args)['id']
114
115 self._delete_snap_and_wait(snapshot_of_vol_1)
116 self._delete_snap_and_wait(snapshot_of_vol_2)
117
118 self._delete_vol_and_wait(volume_1)
119 self._delete_vol_and_wait(volume_2)
120 self._delete_vol_and_wait(volume_3)
3434
3535 @classmethod
3636 def setup_clients(cls):
37 cls._api_version = 3
3837 super(VolumeRevertTests, cls).setup_clients()
3938
4039 manager = cinder_clients.Manager(cls.os_primary)
1212
1313 from tempest.common import waiters
1414 from tempest import config
15 from tempest.lib.common import api_microversion_fixture
1615 from tempest.lib.common import api_version_utils
1716 from tempest.lib.common.utils import data_utils
1817 from tempest.lib.common.utils import test_utils
5049
5150 def setUp(self):
5251 super(VolumeV3RbacBaseTests, self).setUp()
53 self.useFixture(api_microversion_fixture.APIMicroversionFixture(
54 volume_microversion=self.request_microversion))
5552
5653 @classmethod
5754 def resource_setup(cls):
6057 api_version_utils.select_request_microversion(
6158 cls.min_microversion,
6259 CONF.volume.min_microversion))
60 cls.setup_api_microversion_fixture(
61 volume_microversion=cls.request_microversion)
6362
6463 def do_request(self, method, expected_status=200, client=None, **payload):
6564 """Perform API call