Codebase list cinder-tempest-plugin / fa8791e
Fix consistency groups test credentials This patch fixes the test for consistency groups, changing it to an admin test in order to perform required operations. Change-Id: I5f7fd8d62ace7d880a27697cf2b15fbb13cde706 Depends-On: I8bdfc31bb2baeabe1d599ea6e9be3c473531f8b6 Closes-Bug: #1789944 Miriam Yumi 7 years ago
4 changed file(s) with 295 addition(s) and 283 deletion(s). Raw diff Collapse all Expand all
0 # Copyright (C) 2015 EMC Corporation.
1 # Copyright (C) 2016 Pure Storage, Inc.
2 # All Rights Reserved.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License"); you may
5 # not use this file except in compliance with the License. You may obtain
6 # a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 # License for the specific language governing permissions and limitations
14 # under the License.
15
16 from tempest.common import waiters
17 from tempest import config
18 from tempest.lib.common.utils import data_utils
19 from tempest.lib import decorators
20
21 from cinder_tempest_plugin.api.volume import base
22 from cinder_tempest_plugin import cinder_clients
23
24 CONF = config.CONF
25
26
27 class ConsistencyGroupsV2Test(base.BaseVolumeAdminTest):
28 @classmethod
29 def setup_clients(cls):
30 cls._api_version = 2
31 super(ConsistencyGroupsV2Test, cls).setup_clients()
32 cls.admin_volume_client = cls.os_admin.volumes_v2_client
33
34 manager = cinder_clients.Manager(cls.os_admin)
35 cls.consistencygroups_adm_client = manager.consistencygroups_adm_client
36
37 @classmethod
38 def skip_checks(cls):
39 super(ConsistencyGroupsV2Test, cls).skip_checks()
40 if not CONF.volume_feature_enabled.consistency_group:
41 raise cls.skipException("Cinder consistency group "
42 "feature disabled")
43
44 def _delete_consistencygroup(self, cg_id):
45 self.consistencygroups_adm_client.delete_consistencygroup(cg_id)
46 vols = self.admin_volume_client.list_volumes(detail=True)['volumes']
47 for vol in vols:
48 if vol['consistencygroup_id'] == cg_id:
49 self.admin_volume_client.wait_for_resource_deletion(vol['id'])
50 self.consistencygroups_adm_client.wait_for_consistencygroup_deletion(
51 cg_id)
52
53 def _delete_cgsnapshot(self, cgsnapshot_id, cg_id):
54 self.consistencygroups_adm_client.delete_cgsnapshot(cgsnapshot_id)
55 vols = self.admin_volume_client.list_volumes(detail=True)['volumes']
56 snapshots = self.os_admin.snapshots_v2_client.list_snapshots(
57 detail=True)['snapshots']
58 for vol in vols:
59 for snap in snapshots:
60 if (vol['consistencygroup_id'] == cg_id and
61 vol['id'] == snap['volume_id']):
62 (self.snapshots_client.
63 wait_for_resource_deletion(snap['id']))
64 self.consistencygroups_adm_client.wait_for_cgsnapshot_deletion(
65 cgsnapshot_id)
66
67 @decorators.idempotent_id('3fe776ba-ec1f-4e6c-8d78-4b14c3a7fc44')
68 def test_consistencygroup_create_delete(self):
69 # Create volume type
70 name = data_utils.rand_name("volume-type")
71 volume_type = self.os_admin.volume_types_v2_client.create_volume_type(
72 name=name)['volume_type']
73
74 # Create CG
75 cg_name = data_utils.rand_name('CG')
76 create_consistencygroup = (
77 self.consistencygroups_adm_client.create_consistencygroup)
78 cg = create_consistencygroup(volume_type['id'],
79 name=cg_name)['consistencygroup']
80 vol_name = data_utils.rand_name("volume")
81 params = {'name': vol_name,
82 'volume_type': volume_type['id'],
83 'consistencygroup_id': cg['id'],
84 'size': CONF.volume.volume_size}
85
86 # Create volume
87 volume = self.admin_volume_client.create_volume(**params)['volume']
88
89 waiters.wait_for_volume_resource_status(self.admin_volume_client,
90 volume['id'], 'available')
91 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
92 cg['id'], 'available')
93 self.assertEqual(cg_name, cg['name'])
94
95 # Get a given CG
96 cg = self.consistencygroups_adm_client.show_consistencygroup(
97 cg['id'])['consistencygroup']
98 self.assertEqual(cg_name, cg['name'])
99
100 # Get all CGs with detail
101 cgs = self.consistencygroups_adm_client.list_consistencygroups(
102 detail=True)['consistencygroups']
103 self.assertIn((cg['name'], cg['id']),
104 [(m['name'], m['id']) for m in cgs])
105
106 # Clean up
107 self._delete_consistencygroup(cg['id'])
108 self.os_admin.volume_types_v2_client.delete_volume_type(
109 volume_type['id'])
110
111 @decorators.idempotent_id('2134dd52-f333-4456-bb05-6cb0f009a44f')
112 def test_consistencygroup_cgsnapshot_create_delete(self):
113 # Create volume type
114 name = data_utils.rand_name("volume-type")
115 volume_type = self.admin_volume_types_client.create_volume_type(
116 name=name)['volume_type']
117
118 # Create CG
119 cg_name = data_utils.rand_name('CG')
120 create_consistencygroup = (
121 self.consistencygroups_adm_client.create_consistencygroup)
122 cg = create_consistencygroup(volume_type['id'],
123 name=cg_name)['consistencygroup']
124 vol_name = data_utils.rand_name("volume")
125 params = {'name': vol_name,
126 'volume_type': volume_type['id'],
127 'consistencygroup_id': cg['id'],
128 'size': CONF.volume.volume_size}
129
130 # Create volume
131 volume = self.admin_volume_client.create_volume(**params)['volume']
132 waiters.wait_for_volume_resource_status(self.admin_volume_client,
133 volume['id'], 'available')
134 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
135 cg['id'], 'available')
136 self.assertEqual(cg_name, cg['name'])
137
138 # Create cgsnapshot
139 cgsnapshot_name = data_utils.rand_name('cgsnapshot')
140 create_cgsnapshot = (
141 self.consistencygroups_adm_client.create_cgsnapshot)
142 cgsnapshot = create_cgsnapshot(cg['id'],
143 name=cgsnapshot_name)['cgsnapshot']
144 snapshots = self.os_admin.snapshots_v2_client.list_snapshots(
145 detail=True)['snapshots']
146 for snap in snapshots:
147 if volume['id'] == snap['volume_id']:
148 waiters.wait_for_volume_resource_status(
149 self.os_admin.snapshots_v2_client,
150 snap['id'], 'available')
151 self.consistencygroups_adm_client.wait_for_cgsnapshot_status(
152 cgsnapshot['id'], 'available')
153 self.assertEqual(cgsnapshot_name, cgsnapshot['name'])
154
155 # Get a given CG snapshot
156 cgsnapshot = self.consistencygroups_adm_client.show_cgsnapshot(
157 cgsnapshot['id'])['cgsnapshot']
158 self.assertEqual(cgsnapshot_name, cgsnapshot['name'])
159
160 # Get all CG snapshots with detail
161 cgsnapshots = self.consistencygroups_adm_client.list_cgsnapshots(
162 detail=True)['cgsnapshots']
163 self.assertIn((cgsnapshot['name'], cgsnapshot['id']),
164 [(m['name'], m['id']) for m in cgsnapshots])
165
166 # Clean up
167 self._delete_cgsnapshot(cgsnapshot['id'], cg['id'])
168 self._delete_consistencygroup(cg['id'])
169 self.admin_volume_types_client.delete_volume_type(volume_type['id'])
170
171 @decorators.idempotent_id('3a6a5525-25ca-4a6c-aac4-cac6fa8f5b43')
172 def test_create_consistencygroup_from_cgsnapshot(self):
173 # Create volume type
174 name = data_utils.rand_name("volume-type")
175 volume_type = self.admin_volume_types_client.create_volume_type(
176 name=name)['volume_type']
177
178 # Create CG
179 cg_name = data_utils.rand_name('CG')
180 create_consistencygroup = (
181 self.consistencygroups_adm_client.create_consistencygroup)
182 cg = create_consistencygroup(volume_type['id'],
183 name=cg_name)['consistencygroup']
184 vol_name = data_utils.rand_name("volume")
185 params = {'name': vol_name,
186 'volume_type': volume_type['id'],
187 'consistencygroup_id': cg['id'],
188 'size': CONF.volume.volume_size}
189
190 # Create volume
191 volume = self.admin_volume_client.create_volume(**params)['volume']
192 waiters.wait_for_volume_resource_status(self.admin_volume_client,
193 volume['id'], 'available')
194 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
195 cg['id'], 'available')
196 self.assertEqual(cg_name, cg['name'])
197
198 # Create cgsnapshot
199 cgsnapshot_name = data_utils.rand_name('cgsnapshot')
200 create_cgsnapshot = (
201 self.consistencygroups_adm_client.create_cgsnapshot)
202 cgsnapshot = create_cgsnapshot(cg['id'],
203 name=cgsnapshot_name)['cgsnapshot']
204 snapshots = self.snapshots_client.list_snapshots(
205 detail=True)['snapshots']
206 for snap in snapshots:
207 if volume['id'] == snap['volume_id']:
208 waiters.wait_for_volume_resource_status(
209 self.os_admin.snapshots_v2_client, snap['id'], 'available')
210 self.consistencygroups_adm_client.wait_for_cgsnapshot_status(
211 cgsnapshot['id'], 'available')
212 self.assertEqual(cgsnapshot_name, cgsnapshot['name'])
213
214 # Create CG from CG snapshot
215 cg_name2 = data_utils.rand_name('CG_from_snap')
216 create_consistencygroup2 = (
217 self.consistencygroups_adm_client.create_consistencygroup_from_src)
218 cg2 = create_consistencygroup2(cgsnapshot_id=cgsnapshot['id'],
219 name=cg_name2)['consistencygroup']
220 vols = self.admin_volume_client.list_volumes(
221 detail=True)['volumes']
222 for vol in vols:
223 if vol['consistencygroup_id'] == cg2['id']:
224 waiters.wait_for_volume_resource_status(
225 self.admin_volume_client, vol['id'], 'available')
226 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
227 cg2['id'], 'available')
228 self.assertEqual(cg_name2, cg2['name'])
229
230 # Clean up
231 self._delete_consistencygroup(cg2['id'])
232 self._delete_cgsnapshot(cgsnapshot['id'], cg['id'])
233 self._delete_consistencygroup(cg['id'])
234 self.admin_volume_types_client.delete_volume_type(volume_type['id'])
235
236 @decorators.idempotent_id('556121ae-de9c-4342-9897-e54260447a19')
237 def test_create_consistencygroup_from_consistencygroup(self):
238 # Create volume type
239 name = data_utils.rand_name("volume-type")
240 volume_type = self.admin_volume_types_client.create_volume_type(
241 name=name)['volume_type']
242
243 # Create CG
244 cg_name = data_utils.rand_name('CG')
245 create_consistencygroup = (
246 self.consistencygroups_adm_client.create_consistencygroup)
247 cg = create_consistencygroup(volume_type['id'],
248 name=cg_name)['consistencygroup']
249 vol_name = data_utils.rand_name("volume")
250 params = {'name': vol_name,
251 'volume_type': volume_type['id'],
252 'consistencygroup_id': cg['id'],
253 'size': CONF.volume.volume_size}
254
255 # Create volume
256 volume = self.admin_volume_client.create_volume(**params)['volume']
257 waiters.wait_for_volume_resource_status(self.admin_volume_client,
258 volume['id'], 'available')
259 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
260 cg['id'], 'available')
261 self.assertEqual(cg_name, cg['name'])
262
263 # Create CG from CG
264 cg_name2 = data_utils.rand_name('CG_from_cg')
265 create_consistencygroup2 = (
266 self.consistencygroups_adm_client.create_consistencygroup_from_src)
267 cg2 = create_consistencygroup2(source_cgid=cg['id'],
268 name=cg_name2)['consistencygroup']
269 vols = self.admin_volume_client.list_volumes(
270 detail=True)['volumes']
271 for vol in vols:
272 if vol['consistencygroup_id'] == cg2['id']:
273 waiters.wait_for_volume_resource_status(
274 self.admin_volume_client, vol['id'], 'available')
275 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
276 cg2['id'], 'available')
277 self.assertEqual(cg_name2, cg2['name'])
278
279 # Clean up
280 self._delete_consistencygroup(cg2['id'])
281 self._delete_consistencygroup(cg['id'])
282 self.admin_volume_types_client.delete_volume_type(volume_type['id'])
167167 self.os_primary.servers_client.delete_server,
168168 body['id'])
169169 return body
170
171
172 class BaseVolumeAdminTest(BaseVolumeTest):
173 """Base test case class for all Volume Admin API tests."""
174
175 credentials = ['primary', 'admin']
176
177 @classmethod
178 def setup_clients(cls):
179 super(BaseVolumeAdminTest, cls).setup_clients()
180
181 cls.admin_volume_types_client = cls.os_admin.volume_types_client_latest
+0
-283
cinder_tempest_plugin/api/volume/test_consistencygroups.py less more
0 # Copyright (C) 2015 EMC Corporation.
1 # Copyright (C) 2016 Pure Storage, Inc.
2 # All Rights Reserved.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License"); you may
5 # not use this file except in compliance with the License. You may obtain
6 # a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 # License for the specific language governing permissions and limitations
14 # under the License.
15
16 from tempest.common import waiters
17 from tempest import config
18 from tempest.lib.common.utils import data_utils
19 from tempest.lib import decorators
20
21 from cinder_tempest_plugin.api.volume import base
22 from cinder_tempest_plugin import cinder_clients
23
24 CONF = config.CONF
25
26
27 class ConsistencyGroupsV2Test(base.BaseVolumeTest):
28 @classmethod
29 def setup_clients(cls):
30 cls._api_version = 2
31 super(ConsistencyGroupsV2Test, cls).setup_clients()
32 cls.admin_volume_client = cls.os_admin.volumes_v2_client
33
34 manager = cinder_clients.Manager(cls.os_admin)
35 cls.consistencygroups_adm_client = manager.consistencygroups_adm_client
36
37 @classmethod
38 def skip_checks(cls):
39 super(ConsistencyGroupsV2Test, cls).skip_checks()
40 if not CONF.volume_feature_enabled.consistency_group:
41 raise cls.skipException("Cinder consistency group "
42 "feature disabled")
43
44 def _delete_consistencygroup(self, cg_id):
45 self.consistencygroups_adm_client.delete_consistencygroup(cg_id)
46 vols = self.admin_volume_client.list_volumes(detail=True)['volumes']
47 for vol in vols:
48 if vol['consistencygroup_id'] == cg_id:
49 self.admin_volume_client.wait_for_resource_deletion(vol['id'])
50 self.consistencygroups_adm_client.wait_for_consistencygroup_deletion(
51 cg_id)
52
53 def _delete_cgsnapshot(self, cgsnapshot_id, cg_id):
54 self.consistencygroups_adm_client.delete_cgsnapshot(cgsnapshot_id)
55 vols = self.admin_volume_client.list_volumes(detail=True)['volumes']
56 snapshots = self.os_admin.snapshots_v2_client.list_snapshots(
57 detail=True)['snapshots']
58 for vol in vols:
59 for snap in snapshots:
60 if (vol['consistencygroup_id'] == cg_id and
61 vol['id'] == snap['volume_id']):
62 (self.snapshots_client.
63 wait_for_resource_deletion(snap['id']))
64 self.consistencygroups_adm_client.wait_for_cgsnapshot_deletion(
65 cgsnapshot_id)
66
67 @decorators.idempotent_id('3fe776ba-ec1f-4e6c-8d78-4b14c3a7fc44')
68 def test_consistencygroup_create_delete(self):
69 # Create volume type
70 name = data_utils.rand_name("volume-type")
71 volume_type = self.os_admin.volume_types_v2_client.create_volume_type(
72 name=name)['volume_type']
73
74 # Create CG
75 cg_name = data_utils.rand_name('CG')
76 create_consistencygroup = (
77 self.consistencygroups_adm_client.create_consistencygroup)
78 cg = create_consistencygroup(volume_type['id'],
79 name=cg_name)['consistencygroup']
80 vol_name = data_utils.rand_name("volume")
81 params = {'name': vol_name,
82 'volume_type': volume_type['id'],
83 'consistencygroup_id': cg['id'],
84 'size': CONF.volume.volume_size}
85
86 # Create volume
87 volume = self.admin_volume_client.create_volume(**params)['volume']
88
89 waiters.wait_for_volume_resource_status(self.admin_volume_client,
90 volume['id'], 'available')
91 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
92 cg['id'], 'available')
93 self.assertEqual(cg_name, cg['name'])
94
95 # Get a given CG
96 cg = self.consistencygroups_adm_client.show_consistencygroup(
97 cg['id'])['consistencygroup']
98 self.assertEqual(cg_name, cg['name'])
99
100 # Get all CGs with detail
101 cgs = self.consistencygroups_adm_client.list_consistencygroups(
102 detail=True)['consistencygroups']
103 self.assertIn((cg['name'], cg['id']),
104 [(m['name'], m['id']) for m in cgs])
105
106 # Clean up
107 self._delete_consistencygroup(cg['id'])
108 self.os_admin.volume_types_v2_client.delete_volume_type(
109 volume_type['id'])
110
111 @decorators.idempotent_id('2134dd52-f333-4456-bb05-6cb0f009a44f')
112 def test_consistencygroup_cgsnapshot_create_delete(self):
113 # Create volume type
114 name = data_utils.rand_name("volume-type")
115 volume_type = self.admin_volume_types_client.create_volume_type(
116 name=name)['volume_type']
117
118 # Create CG
119 cg_name = data_utils.rand_name('CG')
120 create_consistencygroup = (
121 self.consistencygroups_adm_client.create_consistencygroup)
122 cg = create_consistencygroup(volume_type['id'],
123 name=cg_name)['consistencygroup']
124 vol_name = data_utils.rand_name("volume")
125 params = {'name': vol_name,
126 'volume_type': volume_type['id'],
127 'consistencygroup_id': cg['id'],
128 'size': CONF.volume.volume_size}
129
130 # Create volume
131 volume = self.admin_volume_client.create_volume(**params)['volume']
132 waiters.wait_for_volume_resource_status(self.admin_volume_client,
133 volume['id'], 'available')
134 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
135 cg['id'], 'available')
136 self.assertEqual(cg_name, cg['name'])
137
138 # Create cgsnapshot
139 cgsnapshot_name = data_utils.rand_name('cgsnapshot')
140 create_cgsnapshot = (
141 self.consistencygroups_adm_client.create_cgsnapshot)
142 cgsnapshot = create_cgsnapshot(cg['id'],
143 name=cgsnapshot_name)['cgsnapshot']
144 snapshots = self.os_admin.snapshots_v2_client.list_snapshots(
145 detail=True)['snapshots']
146 for snap in snapshots:
147 if volume['id'] == snap['volume_id']:
148 waiters.wait_for_volume_resource_status(
149 self.os_admin.snapshots_v2_client,
150 snap['id'], 'available')
151 self.consistencygroups_adm_client.wait_for_cgsnapshot_status(
152 cgsnapshot['id'], 'available')
153 self.assertEqual(cgsnapshot_name, cgsnapshot['name'])
154
155 # Get a given CG snapshot
156 cgsnapshot = self.consistencygroups_adm_client.show_cgsnapshot(
157 cgsnapshot['id'])['cgsnapshot']
158 self.assertEqual(cgsnapshot_name, cgsnapshot['name'])
159
160 # Get all CG snapshots with detail
161 cgsnapshots = self.consistencygroups_adm_client.list_cgsnapshots(
162 detail=True)['cgsnapshots']
163 self.assertIn((cgsnapshot['name'], cgsnapshot['id']),
164 [(m['name'], m['id']) for m in cgsnapshots])
165
166 # Clean up
167 self._delete_cgsnapshot(cgsnapshot['id'], cg['id'])
168 self._delete_consistencygroup(cg['id'])
169 self.admin_volume_types_client.delete_volume_type(volume_type['id'])
170
171 @decorators.idempotent_id('3a6a5525-25ca-4a6c-aac4-cac6fa8f5b43')
172 def test_create_consistencygroup_from_cgsnapshot(self):
173 # Create volume type
174 name = data_utils.rand_name("volume-type")
175 volume_type = self.admin_volume_types_client.create_volume_type(
176 name=name)['volume_type']
177
178 # Create CG
179 cg_name = data_utils.rand_name('CG')
180 create_consistencygroup = (
181 self.consistencygroups_adm_client.create_consistencygroup)
182 cg = create_consistencygroup(volume_type['id'],
183 name=cg_name)['consistencygroup']
184 vol_name = data_utils.rand_name("volume")
185 params = {'name': vol_name,
186 'volume_type': volume_type['id'],
187 'consistencygroup_id': cg['id'],
188 'size': CONF.volume.volume_size}
189
190 # Create volume
191 volume = self.admin_volume_client.create_volume(**params)['volume']
192 waiters.wait_for_volume_resource_status(self.admin_volume_client,
193 volume['id'], 'available')
194 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
195 cg['id'], 'available')
196 self.assertEqual(cg_name, cg['name'])
197
198 # Create cgsnapshot
199 cgsnapshot_name = data_utils.rand_name('cgsnapshot')
200 create_cgsnapshot = (
201 self.consistencygroups_adm_client.create_cgsnapshot)
202 cgsnapshot = create_cgsnapshot(cg['id'],
203 name=cgsnapshot_name)['cgsnapshot']
204 snapshots = self.snapshots_client.list_snapshots(
205 detail=True)['snapshots']
206 for snap in snapshots:
207 if volume['id'] == snap['volume_id']:
208 waiters.wait_for_volume_resource_status(
209 self.os_admin.snapshots_v2_client, snap['id'], 'available')
210 self.consistencygroups_adm_client.wait_for_cgsnapshot_status(
211 cgsnapshot['id'], 'available')
212 self.assertEqual(cgsnapshot_name, cgsnapshot['name'])
213
214 # Create CG from CG snapshot
215 cg_name2 = data_utils.rand_name('CG_from_snap')
216 create_consistencygroup2 = (
217 self.consistencygroups_adm_client.create_consistencygroup_from_src)
218 cg2 = create_consistencygroup2(cgsnapshot_id=cgsnapshot['id'],
219 name=cg_name2)['consistencygroup']
220 vols = self.admin_volume_client.list_volumes(
221 detail=True)['volumes']
222 for vol in vols:
223 if vol['consistencygroup_id'] == cg2['id']:
224 waiters.wait_for_volume_resource_status(
225 self.admin_volume_client, vol['id'], 'available')
226 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
227 cg2['id'], 'available')
228 self.assertEqual(cg_name2, cg2['name'])
229
230 # Clean up
231 self._delete_consistencygroup(cg2['id'])
232 self._delete_cgsnapshot(cgsnapshot['id'], cg['id'])
233 self._delete_consistencygroup(cg['id'])
234 self.admin_volume_types_client.delete_volume_type(volume_type['id'])
235
236 @decorators.idempotent_id('556121ae-de9c-4342-9897-e54260447a19')
237 def test_create_consistencygroup_from_consistencygroup(self):
238 # Create volume type
239 name = data_utils.rand_name("volume-type")
240 volume_type = self.admin_volume_types_client.create_volume_type(
241 name=name)['volume_type']
242
243 # Create CG
244 cg_name = data_utils.rand_name('CG')
245 create_consistencygroup = (
246 self.consistencygroups_adm_client.create_consistencygroup)
247 cg = create_consistencygroup(volume_type['id'],
248 name=cg_name)['consistencygroup']
249 vol_name = data_utils.rand_name("volume")
250 params = {'name': vol_name,
251 'volume_type': volume_type['id'],
252 'consistencygroup_id': cg['id'],
253 'size': CONF.volume.volume_size}
254
255 # Create volume
256 volume = self.admin_volume_client.create_volume(**params)['volume']
257 waiters.wait_for_volume_resource_status(self.admin_volume_client,
258 volume['id'], 'available')
259 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
260 cg['id'], 'available')
261 self.assertEqual(cg_name, cg['name'])
262
263 # Create CG from CG
264 cg_name2 = data_utils.rand_name('CG_from_cg')
265 create_consistencygroup2 = (
266 self.consistencygroups_adm_client.create_consistencygroup_from_src)
267 cg2 = create_consistencygroup2(source_cgid=cg['id'],
268 name=cg_name2)['consistencygroup']
269 vols = self.admin_volume_client.list_volumes(
270 detail=True)['volumes']
271 for vol in vols:
272 if vol['consistencygroup_id'] == cg2['id']:
273 waiters.wait_for_volume_resource_status(
274 self.admin_volume_client, vol['id'], 'available')
275 self.consistencygroups_adm_client.wait_for_consistencygroup_status(
276 cg2['id'], 'available')
277 self.assertEqual(cg_name2, cg2['name'])
278
279 # Clean up
280 self._delete_consistencygroup(cg2['id'])
281 self._delete_consistencygroup(cg['id'])
282 self.admin_volume_types_client.delete_volume_type(volume_type['id'])