1616import mock
1717from mock import call
1818
19+ import novaclient
1920from osc_lib import exceptions
2021from osc_lib import utils
2122
@@ -50,6 +51,7 @@ class TestFlavorCreate(TestFlavor):
5051 columns = (
5152 'OS-FLV-DISABLED:disabled' ,
5253 'OS-FLV-EXT-DATA:ephemeral' ,
54+ 'description' ,
5355 'disk' ,
5456 'id' ,
5557 'name' ,
@@ -63,6 +65,7 @@ class TestFlavorCreate(TestFlavor):
6365 data = (
6466 flavor .disabled ,
6567 flavor .ephemeral ,
68+ flavor .description ,
6669 flavor .disk ,
6770 flavor .id ,
6871 flavor .name ,
@@ -101,7 +104,8 @@ def test_flavor_create_default_options(self):
101104 0 ,
102105 0 ,
103106 1.0 ,
104- True
107+ True ,
108+ None ,
105109 )
106110 columns , data = self .cmd .take_action (parsed_args )
107111 self .flavors_mock .create .assert_called_once_with (* default_args )
@@ -120,6 +124,7 @@ def test_flavor_create_all_options(self):
120124 '--vcpus' , str (self .flavor .vcpus ),
121125 '--rxtx-factor' , str (self .flavor .rxtx_factor ),
122126 '--public' ,
127+ '--description' , str (self .flavor .description ),
123128 '--property' , 'property=value' ,
124129 self .flavor .name ,
125130 ]
@@ -132,6 +137,7 @@ def test_flavor_create_all_options(self):
132137 ('vcpus' , self .flavor .vcpus ),
133138 ('rxtx_factor' , self .flavor .rxtx_factor ),
134139 ('public' , True ),
140+ ('description' , self .flavor .description ),
135141 ('property' , {'property' : 'value' }),
136142 ('name' , self .flavor .name ),
137143 ]
@@ -147,8 +153,13 @@ def test_flavor_create_all_options(self):
147153 self .flavor .swap ,
148154 self .flavor .rxtx_factor ,
149155 self .flavor .is_public ,
156+ self .flavor .description ,
150157 )
151- columns , data = self .cmd .take_action (parsed_args )
158+ self .app .client_manager .compute .api_version = 2.55
159+ with mock .patch .object (novaclient .api_versions ,
160+ 'APIVersion' ,
161+ return_value = 2.55 ):
162+ columns , data = self .cmd .take_action (parsed_args )
152163 self .flavors_mock .create .assert_called_once_with (* args )
153164 self .flavor .set_keys .assert_called_once_with ({'property' : 'value' })
154165 self .flavor .get_keys .assert_called_once_with ()
@@ -168,6 +179,7 @@ def test_flavor_create_other_options(self):
168179 '--vcpus' , str (self .flavor .vcpus ),
169180 '--rxtx-factor' , str (self .flavor .rxtx_factor ),
170181 '--private' ,
182+ '--description' , str (self .flavor .description ),
171183 '--project' , self .project .id ,
172184 '--property' , 'key1=value1' ,
173185 '--property' , 'key2=value2' ,
@@ -181,6 +193,7 @@ def test_flavor_create_other_options(self):
181193 ('vcpus' , self .flavor .vcpus ),
182194 ('rxtx_factor' , self .flavor .rxtx_factor ),
183195 ('public' , False ),
196+ ('description' , 'description' ),
184197 ('project' , self .project .id ),
185198 ('property' , {'key1' : 'value1' , 'key2' : 'value2' }),
186199 ('name' , self .flavor .name ),
@@ -197,8 +210,13 @@ def test_flavor_create_other_options(self):
197210 self .flavor .swap ,
198211 self .flavor .rxtx_factor ,
199212 self .flavor .is_public ,
213+ self .flavor .description ,
200214 )
201- columns , data = self .cmd .take_action (parsed_args )
215+ self .app .client_manager .compute .api_version = 2.55
216+ with mock .patch .object (novaclient .api_versions ,
217+ 'APIVersion' ,
218+ return_value = 2.55 ):
219+ columns , data = self .cmd .take_action (parsed_args )
202220 self .flavors_mock .create .assert_called_once_with (* args )
203221 self .flavor_access_mock .add_tenant_access .assert_called_with (
204222 self .flavor .id ,
@@ -234,6 +252,79 @@ def test_flavor_create_no_options(self):
234252 arglist ,
235253 verifylist )
236254
255+ def test_flavor_create_with_description_api_newer (self ):
256+ arglist = [
257+ '--id' , self .flavor .id ,
258+ '--ram' , str (self .flavor .ram ),
259+ '--disk' , str (self .flavor .disk ),
260+ '--ephemeral' , str (self .flavor .ephemeral ),
261+ '--swap' , str (self .flavor .swap ),
262+ '--vcpus' , str (self .flavor .vcpus ),
263+ '--rxtx-factor' , str (self .flavor .rxtx_factor ),
264+ '--private' ,
265+ '--description' , 'fake description' ,
266+ self .flavor .name ,
267+ ]
268+ verifylist = [
269+ ('id' , self .flavor .id ),
270+ ('ram' , self .flavor .ram ),
271+ ('disk' , self .flavor .disk ),
272+ ('ephemeral' , self .flavor .ephemeral ),
273+ ('swap' , self .flavor .swap ),
274+ ('vcpus' , self .flavor .vcpus ),
275+ ('rxtx_factor' , self .flavor .rxtx_factor ),
276+ ('public' , False ),
277+ ('description' , 'fake description' ),
278+ ('name' , self .flavor .name ),
279+ ]
280+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
281+ self .app .client_manager .compute .api_version = 2.55
282+ with mock .patch .object (novaclient .api_versions ,
283+ 'APIVersion' ,
284+ return_value = 2.55 ):
285+ columns , data = self .cmd .take_action (parsed_args )
286+
287+ args = (
288+ self .flavor .name ,
289+ self .flavor .ram ,
290+ self .flavor .vcpus ,
291+ self .flavor .disk ,
292+ self .flavor .id ,
293+ self .flavor .ephemeral ,
294+ self .flavor .swap ,
295+ self .flavor .rxtx_factor ,
296+ False ,
297+ 'fake description' ,
298+ )
299+
300+ self .flavors_mock .create .assert_called_once_with (* args )
301+
302+ self .assertEqual (self .columns , columns )
303+ self .assertEqual (self .data , data )
304+
305+ def test_flavor_create_with_description_api_older (self ):
306+ arglist = [
307+ '--id' , self .flavor .id ,
308+ '--ram' , str (self .flavor .ram ),
309+ '--vcpus' , str (self .flavor .vcpus ),
310+ '--description' , 'description' ,
311+ self .flavor .name ,
312+ ]
313+ verifylist = [
314+ ('ram' , self .flavor .ram ),
315+ ('vcpus' , self .flavor .vcpus ),
316+ ('description' , 'description' ),
317+ ('name' , self .flavor .name ),
318+ ]
319+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
320+
321+ self .app .client_manager .compute .api_version = 2.54
322+ with mock .patch .object (novaclient .api_versions ,
323+ 'APIVersion' ,
324+ return_value = 2.55 ):
325+ self .assertRaises (exceptions .CommandError , self .cmd .take_action ,
326+ parsed_args )
327+
237328
238329class TestFlavorDelete (TestFlavor ):
239330
@@ -622,6 +713,42 @@ def test_flavor_set_nothing(self):
622713 self .flavor_access_mock .add_tenant_access .assert_not_called ()
623714 self .assertIsNone (result )
624715
716+ def test_flavor_set_description_api_newer (self ):
717+ arglist = [
718+ '--description' , 'description' ,
719+ self .flavor .id ,
720+ ]
721+ verifylist = [
722+ ('description' , 'description' ),
723+ ('flavor' , self .flavor .id ),
724+ ]
725+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
726+ self .app .client_manager .compute .api_version = 2.55
727+ with mock .patch .object (novaclient .api_versions ,
728+ 'APIVersion' ,
729+ return_value = 2.55 ):
730+ result = self .cmd .take_action (parsed_args )
731+ self .flavors_mock .update .assert_called_with (
732+ flavor = self .flavor .id , description = 'description' )
733+ self .assertIsNone (result )
734+
735+ def test_flavor_set_description_api_older (self ):
736+ arglist = [
737+ '--description' , 'description' ,
738+ self .flavor .id ,
739+ ]
740+ verifylist = [
741+ ('description' , 'description' ),
742+ ('flavor' , self .flavor .id ),
743+ ]
744+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
745+ self .app .client_manager .compute .api_version = 2.54
746+ with mock .patch .object (novaclient .api_versions ,
747+ 'APIVersion' ,
748+ return_value = 2.55 ):
749+ self .assertRaises (exceptions .CommandError , self .cmd .take_action ,
750+ parsed_args )
751+
625752
626753class TestFlavorShow (TestFlavor ):
627754
@@ -633,6 +760,7 @@ class TestFlavorShow(TestFlavor):
633760 'OS-FLV-DISABLED:disabled' ,
634761 'OS-FLV-EXT-DATA:ephemeral' ,
635762 'access_project_ids' ,
763+ 'description' ,
636764 'disk' ,
637765 'id' ,
638766 'name' ,
@@ -648,6 +776,7 @@ class TestFlavorShow(TestFlavor):
648776 flavor .disabled ,
649777 flavor .ephemeral ,
650778 None ,
779+ flavor .description ,
651780 flavor .disk ,
652781 flavor .id ,
653782 flavor .name ,
@@ -710,6 +839,7 @@ def test_private_flavor_show(self):
710839 private_flavor .disabled ,
711840 private_flavor .ephemeral ,
712841 self .flavor_access .tenant_id ,
842+ private_flavor .description ,
713843 private_flavor .disk ,
714844 private_flavor .id ,
715845 private_flavor .name ,
0 commit comments