Skip to content

Commit d4893ef

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add support for volume snapshot v2 command"
2 parents 8db61ac + c88b433 commit d4893ef

4 files changed

Lines changed: 401 additions & 6 deletions

File tree

openstackclient/tests/volume/v2/fakes.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# under the License.
1313
#
1414

15+
import copy
1516
import mock
1617

1718
from openstackclient.tests import fakes
@@ -62,11 +63,17 @@
6263
"name": snapshot_name,
6364
"description": snapshot_description,
6465
"size": snapshot_size,
65-
"metadata": snapshot_metadata
66+
"status": "available",
67+
"metadata": snapshot_metadata,
68+
"created_at": "2015-06-03T18:49:19.000000",
69+
"volume_id": volume_name
6670
}
67-
68-
SNAPSHOT_columns = tuple(sorted(SNAPSHOT))
69-
SNAPSHOT_data = tuple((SNAPSHOT[x] for x in sorted(SNAPSHOT)))
71+
EXPECTED_SNAPSHOT = copy.deepcopy(SNAPSHOT)
72+
EXPECTED_SNAPSHOT.pop("metadata")
73+
EXPECTED_SNAPSHOT['properties'] = "foo='bar'"
74+
SNAPSHOT_columns = tuple(sorted(EXPECTED_SNAPSHOT))
75+
SNAPSHOT_data = tuple((EXPECTED_SNAPSHOT[x]
76+
for x in sorted(EXPECTED_SNAPSHOT)))
7077

7178

7279
type_id = "5520dc9e-6f9b-4378-a719-729911c0f407"

openstackclient/tests/volume/v2/test_snapshot.py

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,53 @@ def setUp(self):
2626

2727
self.snapshots_mock = self.app.client_manager.volume.volume_snapshots
2828
self.snapshots_mock.reset_mock()
29+
self.volumes_mock = self.app.client_manager.volume.volumes
30+
self.volumes_mock.reset_mock()
31+
32+
33+
class TestSnapshotCreate(TestSnapshot):
34+
def setUp(self):
35+
super(TestSnapshotCreate, self).setUp()
36+
37+
self.volumes_mock.get.return_value = fakes.FakeResource(
38+
None,
39+
copy.deepcopy(volume_fakes.VOLUME),
40+
loaded=True
41+
)
42+
43+
self.snapshots_mock.create.return_value = fakes.FakeResource(
44+
None,
45+
copy.deepcopy(volume_fakes.SNAPSHOT),
46+
loaded=True
47+
)
48+
# Get the command object to test
49+
self.cmd = snapshot.CreateSnapshot(self.app, None)
50+
51+
def test_snapshot_create(self):
52+
arglist = [
53+
volume_fakes.volume_id,
54+
"--name", volume_fakes.snapshot_name,
55+
"--description", volume_fakes.snapshot_description,
56+
"--force"
57+
]
58+
verifylist = [
59+
("volume", volume_fakes.volume_id),
60+
("name", volume_fakes.snapshot_name),
61+
("description", volume_fakes.snapshot_description),
62+
("force", True)
63+
]
64+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
65+
66+
columns, data = self.cmd.take_action(parsed_args)
67+
68+
self.snapshots_mock.create.assert_called_with(
69+
volume_fakes.volume_id,
70+
force=True,
71+
name=volume_fakes.snapshot_name,
72+
description=volume_fakes.snapshot_description
73+
)
74+
self.assertEqual(columns, volume_fakes.SNAPSHOT_columns)
75+
self.assertEqual(data, volume_fakes.SNAPSHOT_data)
2976

3077

3178
class TestSnapshotShow(TestSnapshot):
@@ -80,3 +127,139 @@ def test_snapshot_delete(self):
80127

81128
self.cmd.take_action(parsed_args)
82129
self.snapshots_mock.delete.assert_called_with(volume_fakes.snapshot_id)
130+
131+
132+
class TestSnapshotSet(TestSnapshot):
133+
def setUp(self):
134+
super(TestSnapshotSet, self).setUp()
135+
136+
self.snapshots_mock.get.return_value = fakes.FakeResource(
137+
None,
138+
copy.deepcopy(volume_fakes.SNAPSHOT),
139+
loaded=True
140+
)
141+
self.snapshots_mock.set_metadata.return_value = None
142+
self.snapshots_mock.update.return_value = None
143+
# Get the command object to mock
144+
self.cmd = snapshot.SetSnapshot(self.app, None)
145+
146+
def test_snapshot_set(self):
147+
arglist = [
148+
volume_fakes.snapshot_id,
149+
"--name", "new_snapshot",
150+
"--property", "x=y",
151+
"--property", "foo=foo"
152+
]
153+
new_property = {"x": "y", "foo": "foo"}
154+
verifylist = [
155+
("snapshot", volume_fakes.snapshot_id),
156+
("name", "new_snapshot"),
157+
("property", new_property)
158+
]
159+
160+
kwargs = {
161+
"name": "new_snapshot",
162+
}
163+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
164+
self.cmd.take_action(parsed_args)
165+
166+
self.snapshots_mock.update.assert_called_with(
167+
volume_fakes.snapshot_id, **kwargs)
168+
self.snapshots_mock.set_metadata.assert_called_with(
169+
volume_fakes.snapshot_id, new_property
170+
)
171+
172+
173+
class TestSnapshotUnset(TestSnapshot):
174+
def setUp(self):
175+
super(TestSnapshotUnset, self).setUp()
176+
177+
self.snapshots_mock.get.return_value = fakes.FakeResource(
178+
None,
179+
copy.deepcopy(volume_fakes.SNAPSHOT),
180+
loaded=True
181+
)
182+
self.snapshots_mock.delete_metadata.return_value = None
183+
# Get the command object to mock
184+
self.cmd = snapshot.UnsetSnapshot(self.app, None)
185+
186+
def test_snapshot_unset(self):
187+
arglist = [
188+
volume_fakes.snapshot_id,
189+
"--property", "foo"
190+
]
191+
verifylist = [
192+
("snapshot", volume_fakes.snapshot_id),
193+
("property", ["foo"])
194+
]
195+
196+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
197+
self.cmd.take_action(parsed_args)
198+
199+
self.snapshots_mock.delete_metadata.assert_called_with(
200+
volume_fakes.snapshot_id, ["foo"]
201+
)
202+
203+
204+
class TestSnapshotList(TestSnapshot):
205+
def setUp(self):
206+
super(TestSnapshotList, self).setUp()
207+
208+
self.volumes_mock.list.return_value = [
209+
fakes.FakeResource(
210+
None,
211+
copy.deepcopy(volume_fakes.VOLUME),
212+
loaded=True
213+
)
214+
]
215+
self.snapshots_mock.list.return_value = [
216+
fakes.FakeResource(
217+
None,
218+
copy.deepcopy(volume_fakes.SNAPSHOT),
219+
loaded=True
220+
)
221+
]
222+
# Get the command to test
223+
self.cmd = snapshot.ListSnapshot(self.app, None)
224+
225+
def test_snapshot_list_without_options(self):
226+
arglist = []
227+
verifylist = [
228+
("long", False)
229+
]
230+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
231+
232+
columns, data = self.cmd.take_action(parsed_args)
233+
collist = ["ID", "Name", "Description", "Status", "Size"]
234+
self.assertEqual(collist, columns)
235+
datalist = ((
236+
volume_fakes.snapshot_id,
237+
volume_fakes.snapshot_name,
238+
volume_fakes.snapshot_description,
239+
"available",
240+
volume_fakes.snapshot_size
241+
),)
242+
self.assertEqual(datalist, tuple(data))
243+
244+
def test_snapshot_list_with_options(self):
245+
arglist = ["--long"]
246+
verifylist = [("long", True)]
247+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
248+
249+
columns, data = self.cmd.take_action(parsed_args)
250+
251+
collist = ["ID", "Name", "Description", "Status", "Size", "Created At",
252+
"Volume", "Properties"]
253+
self.assertEqual(collist, columns)
254+
255+
datalist = ((
256+
volume_fakes.snapshot_id,
257+
volume_fakes.snapshot_name,
258+
volume_fakes.snapshot_description,
259+
"available",
260+
volume_fakes.snapshot_size,
261+
"2015-06-03T18:49:19.000000",
262+
volume_fakes.volume_name,
263+
volume_fakes.EXPECTED_SNAPSHOT.get("properties")
264+
),)
265+
self.assertEqual(datalist, tuple(data))

0 commit comments

Comments
 (0)