Skip to content

Commit 47791a1

Browse files
author
Dean Troyer
committed
Add image show tests
Image v2 uses warlock objects rather than the usua Resource objects so we need to test for those. This adds a subset of the Image v2 schema that should be enough to test for proper warlock image handling. Depends-On: Ic95db2f63d9f5f37e29f0d7e048397da311fbf8c Change-Id: Ib89cce87f110a554f40e726718e31d39b500a6ae
1 parent 28f65e6 commit 47791a1

4 files changed

Lines changed: 166 additions & 8 deletions

File tree

‎openstackclient/tests/compute/v2/test_server.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,14 +361,14 @@ def test_server_image_create_no_options(self):
361361
compute_fakes.server_name,
362362
)
363363

364-
collist = ('id', 'is_public', 'name', 'owner', 'protected')
364+
collist = ('id', 'name', 'owner', 'protected', 'visibility')
365365
self.assertEqual(collist, columns)
366366
datalist = (
367367
image_fakes.image_id,
368-
image_fakes.image_public,
369368
image_fakes.image_name,
370369
image_fakes.image_owner,
371370
image_fakes.image_protected,
371+
image_fakes.image_visibility,
372372
)
373373
self.assertEqual(datalist, data)
374374

@@ -392,14 +392,14 @@ def test_server_image_create_name(self):
392392
'img-nam',
393393
)
394394

395-
collist = ('id', 'is_public', 'name', 'owner', 'protected')
395+
collist = ('id', 'name', 'owner', 'protected', 'visibility')
396396
self.assertEqual(collist, columns)
397397
datalist = (
398398
image_fakes.image_id,
399-
image_fakes.image_public,
400399
image_fakes.image_name,
401400
image_fakes.image_owner,
402401
image_fakes.image_protected,
402+
image_fakes.image_visibility,
403403
)
404404
self.assertEqual(datalist, data)
405405

‎openstackclient/tests/image/v1/test_image.py‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,3 +659,36 @@ def test_image_set_properties(self):
659659
image_fakes.image_id,
660660
**kwargs
661661
)
662+
663+
664+
class TestImageShow(TestImage):
665+
666+
def setUp(self):
667+
super(TestImageShow, self).setUp()
668+
669+
self.images_mock.get.return_value = fakes.FakeResource(
670+
None,
671+
copy.deepcopy(image_fakes.IMAGE),
672+
loaded=True,
673+
)
674+
675+
# Get the command object to test
676+
self.cmd = image.ShowImage(self.app, None)
677+
678+
def test_image_show(self):
679+
arglist = [
680+
image_fakes.image_id,
681+
]
682+
verifylist = [
683+
('image', image_fakes.image_id),
684+
]
685+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
686+
687+
# DisplayCommandBase.take_action() returns two tuples
688+
columns, data = self.cmd.take_action(parsed_args)
689+
self.images_mock.get.assert_called_with(
690+
image_fakes.image_id,
691+
)
692+
693+
self.assertEqual(image_fakes.IMAGE_columns, columns)
694+
self.assertEqual(image_fakes.IMAGE_data, data)

‎openstackclient/tests/image/v2/fakes.py‎

Lines changed: 90 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,105 @@
1919
from openstackclient.tests import utils
2020

2121

22-
image_id = 'im1'
22+
image_id = '0f41529e-7c12-4de8-be2d-181abb825b3c'
2323
image_name = 'graven'
2424
image_owner = 'baal'
25-
image_public = False
2625
image_protected = False
26+
image_visibility = 'public'
2727

2828
IMAGE = {
2929
'id': image_id,
3030
'name': image_name,
31-
'is_public': image_public,
3231
'owner': image_owner,
3332
'protected': image_protected,
33+
'visibility': image_visibility,
34+
}
35+
36+
IMAGE_columns = tuple(sorted(IMAGE))
37+
IMAGE_data = tuple((IMAGE[x] for x in sorted(IMAGE)))
38+
39+
# Just enough v2 schema to do some testing
40+
IMAGE_schema = {
41+
"additionalProperties": {
42+
"type": "string"
43+
},
44+
"name": "image",
45+
"links": [
46+
{
47+
"href": "{self}",
48+
"rel": "self"
49+
},
50+
{
51+
"href": "{file}",
52+
"rel": "enclosure"
53+
},
54+
{
55+
"href": "{schema}",
56+
"rel": "describedby"
57+
}
58+
],
59+
"properties": {
60+
"id": {
61+
"pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", # noqa
62+
"type": "string",
63+
"description": "An identifier for the image"
64+
},
65+
"name": {
66+
"type": [
67+
"null",
68+
"string"
69+
],
70+
"description": "Descriptive name for the image",
71+
"maxLength": 255
72+
},
73+
"owner": {
74+
"type": [
75+
"null",
76+
"string"
77+
],
78+
"description": "Owner of the image",
79+
"maxLength": 255
80+
},
81+
"protected": {
82+
"type": "boolean",
83+
"description": "If true, image will not be deletable."
84+
},
85+
"self": {
86+
"type": "string",
87+
"description": "(READ-ONLY)"
88+
},
89+
"schema": {
90+
"type": "string",
91+
"description": "(READ-ONLY)"
92+
},
93+
"size": {
94+
"type": [
95+
"null",
96+
"integer"
97+
],
98+
"description": "Size of image file in bytes (READ-ONLY)"
99+
},
100+
"status": {
101+
"enum": [
102+
"queued",
103+
"saving",
104+
"active",
105+
"killed",
106+
"deleted",
107+
"pending_delete"
108+
],
109+
"type": "string",
110+
"description": "Status of the image (READ-ONLY)"
111+
},
112+
"visibility": {
113+
"enum": [
114+
"public",
115+
"private"
116+
],
117+
"type": "string",
118+
"description": "Scope of image accessibility"
119+
},
120+
}
34121
}
35122

36123

‎openstackclient/tests/image/v2/test_image.py‎

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
import copy
1717
import mock
1818

19+
import warlock
20+
21+
from glanceclient.v2 import schemas
1922
from openstackclient.image.v2 import image
2023
from openstackclient.tests import fakes
2124
from openstackclient.tests.image.v2 import fakes as image_fakes
@@ -223,7 +226,7 @@ def test_image_list_long_option(self):
223226
'',
224227
'',
225228
'',
226-
'',
229+
'public',
227230
False,
228231
image_fakes.image_owner,
229232
'',
@@ -293,3 +296,38 @@ def test_image_list_sort_option(self, si_mock):
293296
image_fakes.image_name
294297
), )
295298
self.assertEqual(datalist, tuple(data))
299+
300+
301+
class TestImageShow(TestImage):
302+
303+
def setUp(self):
304+
super(TestImageShow, self).setUp()
305+
306+
# Set up the schema
307+
self.model = warlock.model_factory(
308+
image_fakes.IMAGE_schema,
309+
schemas.SchemaBasedModel,
310+
)
311+
312+
self.images_mock.get.return_value = self.model(**image_fakes.IMAGE)
313+
314+
# Get the command object to test
315+
self.cmd = image.ShowImage(self.app, None)
316+
317+
def test_image_show(self):
318+
arglist = [
319+
image_fakes.image_id,
320+
]
321+
verifylist = [
322+
('image', image_fakes.image_id),
323+
]
324+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
325+
326+
# DisplayCommandBase.take_action() returns two tuples
327+
columns, data = self.cmd.take_action(parsed_args)
328+
self.images_mock.get.assert_called_with(
329+
image_fakes.image_id,
330+
)
331+
332+
self.assertEqual(image_fakes.IMAGE_columns, columns)
333+
self.assertEqual(image_fakes.IMAGE_data, data)

0 commit comments

Comments
 (0)