1414import os
1515import uuid
1616
17+ # from glanceclient import exc as image_exceptions
18+
1719from openstackclient .tests .functional import base
1820
1921
@@ -26,78 +28,218 @@ class ImageTests(base.TestCase):
2628 @classmethod
2729 def setUpClass (cls ):
2830 os .environ ['OS_IMAGE_API_VERSION' ] = '2'
29- cmd_output = json .loads (cls .openstack (
30- 'image create -f json ' + cls .NAME ))
31- cls .assertOutput (cls .NAME , cmd_output ['name' ])
31+ json_output = json .loads (cls .openstack (
32+ 'image create -f json ' +
33+ cls .NAME
34+ ))
35+ cls .image_id = json_output ["id" ]
36+ cls .assertOutput (cls .NAME , json_output ['name' ])
3237
3338 @classmethod
3439 def tearDownClass (cls ):
35- # Rename test
36- raw_output = cls .openstack ('image set --name ' + cls .OTHER_NAME + ' '
37- + cls .NAME )
38- cls .assertOutput ('' , raw_output )
39- # Delete test
40- raw_output = cls .openstack ('image delete ' + cls .OTHER_NAME )
41- cls .assertOutput ('' , raw_output )
40+ cls .openstack (
41+ 'image delete ' +
42+ cls .image_id
43+ )
4244
4345 def test_image_list (self ):
44- cmd_output = json .loads (self .openstack ('image list -f json' ))
45- col_names = [x ['Name' ] for x in cmd_output ]
46- self .assertIn (self .NAME , col_names )
47-
48- def test_image_show (self ):
49- cmd_output = json .loads (self .openstack (
50- 'image show -f json ' + self .NAME ))
51- self .assertEqual (self .NAME , cmd_output ['name' ])
52-
53- def test_image_set (self ):
54- self .openstack ('image set --min-disk 4 --min-ram 5 --public '
55- + self .NAME )
56- cmd_output = json .loads (self .openstack (
57- 'image show -f json ' + self .NAME ))
58- self .assertEqual (self .NAME , cmd_output ['name' ])
59- self .assertEqual (4 , cmd_output ['min_disk' ])
60- self .assertEqual (5 , cmd_output ['min_ram' ])
61- self .assertEqual ('raw' , cmd_output ['disk_format' ])
62- self .assertEqual ('public' , cmd_output ['visibility' ])
63-
64- def test_image_metadata (self ):
65- self .openstack ('image set --property a=b --property c=d ' + self .NAME )
66- cmd_output = json .loads (self .openstack (
67- 'image show -f json ' + self .NAME ))
68- self .assertEqual (self .NAME , cmd_output ['name' ])
69- self .assertEqual ("a='b', c='d'" , cmd_output ['properties' ])
70-
71- def test_image_unset (self ):
72- self .openstack ('image set --tag 01 ' + self .NAME )
73- cmd_output = json .loads (self .openstack (
74- 'image show -f json ' + self .NAME ))
75- self .assertEqual ('01' , cmd_output ['tags' ])
76- self .openstack ('image unset --tag 01 ' + self .NAME )
77- # test_image_metadata has set image properties "a" and "c"
78- self .openstack ('image unset --property a --property c ' + self .NAME )
79- cmd_output = json .loads (self .openstack (
80- 'image show -f json ' + self .NAME ))
81- self .assertEqual (self .NAME , cmd_output ['name' ])
82- self .assertEqual ('' , cmd_output ['tags' ])
83- self .assertNotIn ('properties' , cmd_output )
84-
85- def test_image_members (self ):
86- cmd_output = json .loads (self .openstack ('token issue -f json' ))
87- my_project_id = cmd_output ['project_id' ]
46+ json_output = json .loads (self .openstack (
47+ 'image list -f json '
48+ ))
49+ self .assertIn (
50+ self .NAME ,
51+ [img ['Name' ] for img in json_output ]
52+ )
53+
54+ def test_image_attributes (self ):
55+ """Test set, unset, show on attributes, tags and properties"""
56+
57+ # Test explicit attributes
8858 self .openstack (
89- 'image add project {} {}' .format (self .NAME , my_project_id ))
90-
59+ 'image set ' +
60+ '--min-disk 4 ' +
61+ '--min-ram 5 ' +
62+ '--public ' +
63+ self .NAME
64+ )
65+ json_output = json .loads (self .openstack (
66+ 'image show -f json ' +
67+ self .NAME
68+ ))
69+ self .assertEqual (
70+ 4 ,
71+ json_output ["min_disk" ],
72+ )
73+ self .assertEqual (
74+ 5 ,
75+ json_output ["min_ram" ],
76+ )
77+ self .assertEqual (
78+ 'public' ,
79+ json_output ["visibility" ],
80+ )
81+
82+ # Test properties
9183 self .openstack (
92- 'image set --accept ' + self .NAME )
93- shared_img_list = json .loads (self .openstack (
94- 'image list --shared -f json' ))
95- self .assertIn (self .NAME , [img ['Name' ] for img in shared_img_list ])
84+ 'image set ' +
85+ '--property a=b ' +
86+ '--property c=d ' +
87+ '--public ' +
88+ self .NAME
89+ )
90+ json_output = json .loads (self .openstack (
91+ 'image show -f json ' +
92+ self .NAME
93+ ))
94+ self .assertEqual (
95+ "a='b', c='d'" ,
96+ json_output ["properties" ],
97+ )
9698
9799 self .openstack (
98- 'image set --reject ' + self .NAME )
99- shared_img_list = json .loads (self .openstack (
100- 'image list --shared -f json' ))
100+ 'image unset ' +
101+ '--property a ' +
102+ '--property c ' +
103+ self .NAME
104+ )
105+ json_output = json .loads (self .openstack (
106+ 'image show -f json ' +
107+ self .NAME
108+ ))
109+ self .assertNotIn (
110+ 'properties' ,
111+ json_output ,
112+ )
113+
114+ # Test tags
115+ self .openstack (
116+ 'image set ' +
117+ '--tag 01 ' +
118+ self .NAME
119+ )
120+ json_output = json .loads (self .openstack (
121+ 'image show -f json ' +
122+ self .NAME
123+ ))
124+ self .assertEqual (
125+ '01' ,
126+ json_output ["tags" ],
127+ )
101128
102129 self .openstack (
103- 'image remove project {} {}' .format (self .NAME , my_project_id ))
130+ 'image unset ' +
131+ '--tag 01 ' +
132+ self .NAME
133+ )
134+ json_output = json .loads (self .openstack (
135+ 'image show -f json ' +
136+ self .NAME
137+ ))
138+ self .assertEqual (
139+ '' ,
140+ json_output ["tags" ],
141+ )
142+
143+ def test_image_set_rename (self ):
144+ name = uuid .uuid4 ().hex
145+ json_output = json .loads (self .openstack (
146+ 'image create -f json ' +
147+ name
148+ ))
149+ image_id = json_output ["id" ]
150+ self .assertEqual (
151+ name ,
152+ json_output ["name" ],
153+ )
154+ self .openstack (
155+ 'image set ' +
156+ '--name ' + name + 'xx ' +
157+ image_id
158+ )
159+ json_output = json .loads (self .openstack (
160+ 'image show -f json ' +
161+ name + 'xx'
162+ ))
163+ self .assertEqual (
164+ name + 'xx' ,
165+ json_output ["name" ],
166+ )
167+
168+ # TODO(dtroyer): This test is incomplete and doesn't properly test
169+ # sharing images. Fix after the --shared option is
170+ # properly added.
171+ def test_image_members (self ):
172+ """Test member add, remove, accept"""
173+ json_output = json .loads (self .openstack (
174+ 'token issue -f json'
175+ ))
176+ my_project_id = json_output ['project_id' ]
177+
178+ json_output = json .loads (self .openstack (
179+ 'image show -f json ' +
180+ self .NAME
181+ ))
182+ # NOTE(dtroyer): Until OSC supports --shared flags in create and set
183+ # we can not properly test membership. Sometimes the
184+ # images are shared and sometimes they are not.
185+ if json_output ["visibility" ] == 'shared' :
186+ self .openstack (
187+ 'image add project ' +
188+ self .NAME + ' ' +
189+ my_project_id
190+ )
191+ # self.addCleanup(
192+ # self.openstack,
193+ # 'image remove project ' +
194+ # self.NAME + ' ' +
195+ # my_project_id
196+ # )
197+
198+ self .openstack (
199+ 'image set ' +
200+ '--accept ' +
201+ self .NAME
202+ )
203+ json_output = json .loads (self .openstack (
204+ 'image list -f json ' +
205+ '--shared'
206+ ))
207+ self .assertIn (
208+ self .NAME ,
209+ [img ['Name' ] for img in json_output ]
210+ )
211+
212+ self .openstack (
213+ 'image set ' +
214+ '--reject ' +
215+ self .NAME
216+ )
217+ json_output = json .loads (self .openstack (
218+ 'image list -f json ' +
219+ '--shared'
220+ ))
221+ # self.assertNotIn(
222+ # self.NAME,
223+ # [img['Name'] for img in json_output]
224+ # )
225+
226+ self .openstack (
227+ 'image remove project ' +
228+ self .NAME + ' ' +
229+ my_project_id
230+ )
231+
232+ # else:
233+ # # Test not shared
234+ # self.assertRaises(
235+ # image_exceptions.HTTPForbidden,
236+ # self.openstack,
237+ # 'image add project ' +
238+ # self.NAME + ' ' +
239+ # my_project_id
240+ # )
241+ # self.openstack(
242+ # 'image set ' +
243+ # '--share ' +
244+ # self.NAME
245+ # )
0 commit comments