Skip to content

Commit 564e4f7

Browse files
committed
volume: Migrate 'volume group snapshot' commands to SDK
Change-Id: Ie49e1f4b63de8b3bc699f7a9ef6eaa72801b9d05 Signed-off-by: Stephen Finucane <stephenfin@redhat.com> Depends-On: https://review.opendev.org/c/openstack/openstacksdk/+/892974
1 parent dfcb8b0 commit 564e4f7

3 files changed

Lines changed: 120 additions & 89 deletions

File tree

openstackclient/tests/unit/volume/v3/fakes.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
from openstack.block_storage.v3 import resource_filter as _filters
2222
from openstack.block_storage.v3 import volume as _volume
2323

24-
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
2524
from openstackclient.tests.unit import fakes
2625
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
2726
from openstackclient.tests.unit import utils
@@ -91,6 +90,11 @@ def setUp(self):
9190
endpoint=fakes.AUTH_URL, token=fakes.AUTH_TOKEN
9291
)
9392

93+
# avoid circular imports
94+
from openstackclient.tests.unit.compute.v2 import (
95+
fakes as compute_fakes,
96+
)
97+
9498
self.app.client_manager.compute = compute_fakes.FakeComputev2Client(
9599
endpoint=fakes.AUTH_URL,
96100
token=fakes.AUTH_TOKEN,

openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py

Lines changed: 88 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,32 @@
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
1420
from osc_lib import exceptions
1521

1622
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
1723
from 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

Comments
 (0)