@@ -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
3178class 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