1010# License for the specific language governing permissions and limitations
1111# under the License.
1212
13- from cinderclient import api_versions
13+ from unittest import mock
14+
15+ from keystoneauth1 import discover
16+ from openstack .block_storage .v3 import group as _group
17+ from openstack .block_storage .v3 import group_snapshot as _group_snapshot
18+ from openstack .test import fakes as sdk_fakes
19+ from openstack import utils as sdk_utils
1420from osc_lib import exceptions
1521
1622from openstackclient .tests .unit .volume .v3 import fakes as volume_fakes
1723from openstackclient .volume .v3 import volume_group_snapshot
1824
1925
20- class TestVolumeGroupSnapshot (volume_fakes .TestVolume ):
21- def setUp (self ):
22- super ().setUp ()
23-
24- self .volume_groups_mock = self .volume_client .groups
25- self .volume_groups_mock .reset_mock ()
26+ def fake_supports_microversion (mocked_version ):
27+ def supports_microversion (adapter , microversion , raise_exception = False ):
28+ required = discover .normalize_version_number (microversion )
29+ candidate = discover .normalize_version_number (mocked_version )
30+ return discover .version_match (required , candidate )
2631
27- self .volume_group_snapshots_mock = self .volume_client .group_snapshots
28- self .volume_group_snapshots_mock .reset_mock ()
32+ return supports_microversion
2933
3034
31- class TestVolumeGroupSnapshotCreate (TestVolumeGroupSnapshot ):
32- fake_volume_group = volume_fakes . create_one_volume_group ( )
33- fake_volume_group_snapshot = (
34- volume_fakes . create_one_volume_group_snapshot ()
35+ class TestVolumeGroupSnapshotCreate (volume_fakes . TestVolume ):
36+ fake_volume_group = sdk_fakes . generate_fake_resource ( _group . Group )
37+ fake_volume_group_snapshot = sdk_fakes . generate_fake_resource (
38+ _group_snapshot . GroupSnapshot ,
3539 )
3640
3741 columns = (
@@ -54,20 +58,21 @@ class TestVolumeGroupSnapshotCreate(TestVolumeGroupSnapshot):
5458 def setUp (self ):
5559 super ().setUp ()
5660
57- self .volume_groups_mock . get .return_value = self .fake_volume_group
58- self .volume_group_snapshots_mock . create .return_value = (
61+ self .volume_sdk_client . find_group .return_value = self .fake_volume_group
62+ self .volume_sdk_client . create_group_snapshot .return_value = (
5963 self .fake_volume_group_snapshot
6064 )
61- self .volume_group_snapshots_mock . get .return_value = (
65+ self .volume_sdk_client . find_group_snapshot .return_value = (
6266 self .fake_volume_group_snapshot
6367 )
6468
6569 self .cmd = volume_group_snapshot .CreateVolumeGroupSnapshot (
6670 self .app , None
6771 )
6872
69- def test_volume_group_snapshot_create (self ):
70- self .volume_client .api_version = api_versions .APIVersion ('3.14' )
73+ @mock .patch .object (sdk_utils , 'supports_microversion' )
74+ def test_volume_group_snapshot_create (self , mock_mv ):
75+ mock_mv .side_effect = fake_supports_microversion ('3.14' )
7176
7277 arglist = [
7378 self .fake_volume_group .id ,
@@ -81,19 +86,22 @@ def test_volume_group_snapshot_create(self):
8186
8287 columns , data = self .cmd .take_action (parsed_args )
8388
84- self .volume_groups_mock .get .assert_called_once_with (
85- self .fake_volume_group .id
86- )
87- self .volume_group_snapshots_mock .create .assert_called_once_with (
89+ self .volume_sdk_client .find_group .assert_called_once_with (
8890 self .fake_volume_group .id ,
89- None ,
90- None ,
91+ ignore_missing = False ,
92+ details = False ,
93+ )
94+ self .volume_sdk_client .create_group_snapshot .assert_called_once_with (
95+ group_id = self .fake_volume_group .id ,
96+ name = None ,
97+ description = None ,
9198 )
9299 self .assertEqual (self .columns , columns )
93100 self .assertCountEqual (self .data , data )
94101
95- def test_volume_group_snapshot_create_with_options (self ):
96- self .volume_client .api_version = api_versions .APIVersion ('3.14' )
102+ @mock .patch .object (sdk_utils , 'supports_microversion' )
103+ def test_volume_group_snapshot_create_with_options (self , mock_mv ):
104+ mock_mv .side_effect = fake_supports_microversion ('3.14' )
97105
98106 arglist = [
99107 self .fake_volume_group .id ,
@@ -111,19 +119,22 @@ def test_volume_group_snapshot_create_with_options(self):
111119
112120 columns , data = self .cmd .take_action (parsed_args )
113121
114- self .volume_groups_mock .get .assert_called_once_with (
115- self .fake_volume_group .id
116- )
117- self .volume_group_snapshots_mock .create .assert_called_once_with (
122+ self .volume_sdk_client .find_group .assert_called_once_with (
118123 self .fake_volume_group .id ,
119- 'foo' ,
120- 'hello, world' ,
124+ ignore_missing = False ,
125+ details = False ,
126+ )
127+ self .volume_sdk_client .create_group_snapshot .assert_called_once_with (
128+ group_id = self .fake_volume_group .id ,
129+ name = 'foo' ,
130+ description = 'hello, world' ,
121131 )
122132 self .assertEqual (self .columns , columns )
123133 self .assertCountEqual (self .data , data )
124134
125- def test_volume_group_snapshot_create_pre_v314 (self ):
126- self .volume_client .api_version = api_versions .APIVersion ('3.13' )
135+ @mock .patch .object (sdk_utils , 'supports_microversion' )
136+ def test_volume_group_snapshot_create_pre_v314 (self , mock_mv ):
137+ mock_mv .side_effect = fake_supports_microversion ('3.13' )
127138
128139 arglist = [
129140 self .fake_volume_group .id ,
@@ -136,32 +147,36 @@ def test_volume_group_snapshot_create_pre_v314(self):
136147 parsed_args = self .check_parser (self .cmd , arglist , verifylist )
137148
138149 exc = self .assertRaises (
139- exceptions .CommandError , self .cmd .take_action , parsed_args
150+ exceptions .CommandError ,
151+ self .cmd .take_action ,
152+ parsed_args ,
140153 )
141154 self .assertIn (
142- '--os-volume-api-version 3.14 or greater is required' , str (exc )
155+ '--os-volume-api-version 3.14 or greater is required' ,
156+ str (exc ),
143157 )
144158
145159
146- class TestVolumeGroupSnapshotDelete (TestVolumeGroupSnapshot ):
147- fake_volume_group_snapshot = (
148- volume_fakes . create_one_volume_group_snapshot ()
160+ class TestVolumeGroupSnapshotDelete (volume_fakes . TestVolume ):
161+ fake_volume_group_snapshot = sdk_fakes . generate_fake_resource (
162+ _group_snapshot . GroupSnapshot ,
149163 )
150164
151165 def setUp (self ):
152166 super ().setUp ()
153167
154- self .volume_group_snapshots_mock . get .return_value = (
168+ self .volume_sdk_client . find_group_snapshot .return_value = (
155169 self .fake_volume_group_snapshot
156170 )
157- self .volume_group_snapshots_mock . delete .return_value = None
171+ self .volume_sdk_client . delete_group_snapshot .return_value = None
158172
159173 self .cmd = volume_group_snapshot .DeleteVolumeGroupSnapshot (
160174 self .app , None
161175 )
162176
163- def test_volume_group_snapshot_delete (self ):
164- self .volume_client .api_version = api_versions .APIVersion ('3.14' )
177+ @mock .patch .object (sdk_utils , 'supports_microversion' )
178+ def test_volume_group_snapshot_delete (self , mock_mv ):
179+ mock_mv .side_effect = fake_supports_microversion ('3.14' )
165180
166181 arglist = [
167182 self .fake_volume_group_snapshot .id ,
@@ -173,13 +188,14 @@ def test_volume_group_snapshot_delete(self):
173188
174189 result = self .cmd .take_action (parsed_args )
175190
176- self .volume_group_snapshots_mock . delete .assert_called_once_with (
191+ self .volume_sdk_client . delete_group_snapshot .assert_called_once_with (
177192 self .fake_volume_group_snapshot .id ,
178193 )
179194 self .assertIsNone (result )
180195
181- def test_volume_group_snapshot_delete_pre_v314 (self ):
182- self .volume_client .api_version = api_versions .APIVersion ('3.13' )
196+ @mock .patch .object (sdk_utils , 'supports_microversion' )
197+ def test_volume_group_snapshot_delete_pre_v314 (self , mock_mv ):
198+ mock_mv .side_effect = fake_supports_microversion ('3.13' )
183199
184200 arglist = [
185201 self .fake_volume_group_snapshot .id ,
@@ -190,15 +206,23 @@ def test_volume_group_snapshot_delete_pre_v314(self):
190206 parsed_args = self .check_parser (self .cmd , arglist , verifylist )
191207
192208 exc = self .assertRaises (
193- exceptions .CommandError , self .cmd .take_action , parsed_args
209+ exceptions .CommandError ,
210+ self .cmd .take_action ,
211+ parsed_args ,
194212 )
195213 self .assertIn (
196- '--os-volume-api-version 3.14 or greater is required' , str (exc )
214+ '--os-volume-api-version 3.14 or greater is required' ,
215+ str (exc ),
197216 )
198217
199218
200- class TestVolumeGroupSnapshotList (TestVolumeGroupSnapshot ):
201- fake_volume_group_snapshots = volume_fakes .create_volume_group_snapshots ()
219+ class TestVolumeGroupSnapshotList (volume_fakes .TestVolume ):
220+ fake_volume_group_snapshots = list (
221+ sdk_fakes .generate_fake_resources (
222+ _group_snapshot .GroupSnapshot ,
223+ count = 3 ,
224+ )
225+ )
202226
203227 columns = (
204228 'ID' ,
@@ -217,16 +241,17 @@ class TestVolumeGroupSnapshotList(TestVolumeGroupSnapshot):
217241 def setUp (self ):
218242 super ().setUp ()
219243
220- self .volume_group_snapshots_mock . list .return_value = (
244+ self .volume_sdk_client . group_snapshots .return_value = (
221245 self .fake_volume_group_snapshots
222246 )
223247
224248 self .cmd = volume_group_snapshot .ListVolumeGroupSnapshot (
225249 self .app , None
226250 )
227251
228- def test_volume_group_snapshot_list (self ):
229- self .volume_client .api_version = api_versions .APIVersion ('3.14' )
252+ @mock .patch .object (sdk_utils , 'supports_microversion' )
253+ def test_volume_group_snapshot_list (self , mock_mv ):
254+ mock_mv .side_effect = fake_supports_microversion ('3.14' )
230255
231256 arglist = [
232257 '--all-projects' ,
@@ -238,16 +263,15 @@ def test_volume_group_snapshot_list(self):
238263
239264 columns , data = self .cmd .take_action (parsed_args )
240265
241- self .volume_group_snapshots_mock .list .assert_called_once_with (
242- search_opts = {
243- 'all_tenants' : True ,
244- },
266+ self .volume_sdk_client .group_snapshots .assert_called_once_with (
267+ all_projects = True ,
245268 )
246269 self .assertEqual (self .columns , columns )
247270 self .assertCountEqual (tuple (self .data ), data )
248271
249- def test_volume_group_snapshot_list_pre_v314 (self ):
250- self .volume_client .api_version = api_versions .APIVersion ('3.13' )
272+ @mock .patch .object (sdk_utils , 'supports_microversion' )
273+ def test_volume_group_snapshot_list_pre_v314 (self , mock_mv ):
274+ mock_mv .side_effect = fake_supports_microversion ('3.13' )
251275
252276 arglist = []
253277 verifylist = [
@@ -256,8 +280,11 @@ def test_volume_group_snapshot_list_pre_v314(self):
256280 parsed_args = self .check_parser (self .cmd , arglist , verifylist )
257281
258282 exc = self .assertRaises (
259- exceptions .CommandError , self .cmd .take_action , parsed_args
283+ exceptions .CommandError ,
284+ self .cmd .take_action ,
285+ parsed_args ,
260286 )
261287 self .assertIn (
262- '--os-volume-api-version 3.14 or greater is required' , str (exc )
288+ '--os-volume-api-version 3.14 or greater is required' ,
289+ str (exc ),
263290 )
0 commit comments