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
This commit is contained in:
		| @@ -361,14 +361,14 @@ class TestServerImageCreate(TestServer): | ||||
|             compute_fakes.server_name, | ||||
|         ) | ||||
|  | ||||
|         collist = ('id', 'is_public', 'name', 'owner', 'protected') | ||||
|         collist = ('id', 'name', 'owner', 'protected', 'visibility') | ||||
|         self.assertEqual(collist, columns) | ||||
|         datalist = ( | ||||
|             image_fakes.image_id, | ||||
|             image_fakes.image_public, | ||||
|             image_fakes.image_name, | ||||
|             image_fakes.image_owner, | ||||
|             image_fakes.image_protected, | ||||
|             image_fakes.image_visibility, | ||||
|         ) | ||||
|         self.assertEqual(datalist, data) | ||||
|  | ||||
| @@ -392,14 +392,14 @@ class TestServerImageCreate(TestServer): | ||||
|             'img-nam', | ||||
|         ) | ||||
|  | ||||
|         collist = ('id', 'is_public', 'name', 'owner', 'protected') | ||||
|         collist = ('id', 'name', 'owner', 'protected', 'visibility') | ||||
|         self.assertEqual(collist, columns) | ||||
|         datalist = ( | ||||
|             image_fakes.image_id, | ||||
|             image_fakes.image_public, | ||||
|             image_fakes.image_name, | ||||
|             image_fakes.image_owner, | ||||
|             image_fakes.image_protected, | ||||
|             image_fakes.image_visibility, | ||||
|         ) | ||||
|         self.assertEqual(datalist, data) | ||||
|  | ||||
|   | ||||
| @@ -659,3 +659,36 @@ class TestImageSet(TestImage): | ||||
|             image_fakes.image_id, | ||||
|             **kwargs | ||||
|         ) | ||||
|  | ||||
|  | ||||
| class TestImageShow(TestImage): | ||||
|  | ||||
|     def setUp(self): | ||||
|         super(TestImageShow, self).setUp() | ||||
|  | ||||
|         self.images_mock.get.return_value = fakes.FakeResource( | ||||
|             None, | ||||
|             copy.deepcopy(image_fakes.IMAGE), | ||||
|             loaded=True, | ||||
|         ) | ||||
|  | ||||
|         # Get the command object to test | ||||
|         self.cmd = image.ShowImage(self.app, None) | ||||
|  | ||||
|     def test_image_show(self): | ||||
|         arglist = [ | ||||
|             image_fakes.image_id, | ||||
|         ] | ||||
|         verifylist = [ | ||||
|             ('image', image_fakes.image_id), | ||||
|         ] | ||||
|         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||
|  | ||||
|         # DisplayCommandBase.take_action() returns two tuples | ||||
|         columns, data = self.cmd.take_action(parsed_args) | ||||
|         self.images_mock.get.assert_called_with( | ||||
|             image_fakes.image_id, | ||||
|         ) | ||||
|  | ||||
|         self.assertEqual(image_fakes.IMAGE_columns, columns) | ||||
|         self.assertEqual(image_fakes.IMAGE_data, data) | ||||
|   | ||||
| @@ -19,18 +19,105 @@ from openstackclient.tests import fakes | ||||
| from openstackclient.tests import utils | ||||
|  | ||||
|  | ||||
| image_id = 'im1' | ||||
| image_id = '0f41529e-7c12-4de8-be2d-181abb825b3c' | ||||
| image_name = 'graven' | ||||
| image_owner = 'baal' | ||||
| image_public = False | ||||
| image_protected = False | ||||
| image_visibility = 'public' | ||||
|  | ||||
| IMAGE = { | ||||
|     'id': image_id, | ||||
|     'name': image_name, | ||||
|     'is_public': image_public, | ||||
|     'owner': image_owner, | ||||
|     'protected': image_protected, | ||||
|     'visibility': image_visibility, | ||||
| } | ||||
|  | ||||
| IMAGE_columns = tuple(sorted(IMAGE)) | ||||
| IMAGE_data = tuple((IMAGE[x] for x in sorted(IMAGE))) | ||||
|  | ||||
| # Just enough v2 schema to do some testing | ||||
| IMAGE_schema = { | ||||
|     "additionalProperties": { | ||||
|         "type": "string" | ||||
|     }, | ||||
|     "name": "image", | ||||
|     "links": [ | ||||
|         { | ||||
|             "href": "{self}", | ||||
|             "rel": "self" | ||||
|         }, | ||||
|         { | ||||
|             "href": "{file}", | ||||
|             "rel": "enclosure" | ||||
|         }, | ||||
|         { | ||||
|             "href": "{schema}", | ||||
|             "rel": "describedby" | ||||
|         } | ||||
|     ], | ||||
|     "properties": { | ||||
|         "id": { | ||||
|             "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 | ||||
|             "type": "string", | ||||
|             "description": "An identifier for the image" | ||||
|         }, | ||||
|         "name": { | ||||
|             "type": [ | ||||
|                 "null", | ||||
|                 "string" | ||||
|             ], | ||||
|             "description": "Descriptive name for the image", | ||||
|             "maxLength": 255 | ||||
|         }, | ||||
|         "owner": { | ||||
|             "type": [ | ||||
|                 "null", | ||||
|                 "string" | ||||
|             ], | ||||
|             "description": "Owner of the image", | ||||
|             "maxLength": 255 | ||||
|         }, | ||||
|         "protected": { | ||||
|             "type": "boolean", | ||||
|             "description": "If true, image will not be deletable." | ||||
|         }, | ||||
|         "self": { | ||||
|             "type": "string", | ||||
|             "description": "(READ-ONLY)" | ||||
|         }, | ||||
|         "schema": { | ||||
|             "type": "string", | ||||
|             "description": "(READ-ONLY)" | ||||
|         }, | ||||
|         "size": { | ||||
|             "type": [ | ||||
|                 "null", | ||||
|                 "integer" | ||||
|             ], | ||||
|             "description": "Size of image file in bytes (READ-ONLY)" | ||||
|         }, | ||||
|         "status": { | ||||
|             "enum": [ | ||||
|                 "queued", | ||||
|                 "saving", | ||||
|                 "active", | ||||
|                 "killed", | ||||
|                 "deleted", | ||||
|                 "pending_delete" | ||||
|             ], | ||||
|             "type": "string", | ||||
|             "description": "Status of the image (READ-ONLY)" | ||||
|         }, | ||||
|         "visibility": { | ||||
|             "enum": [ | ||||
|                 "public", | ||||
|                 "private" | ||||
|             ], | ||||
|             "type": "string", | ||||
|             "description": "Scope of image accessibility" | ||||
|         }, | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -16,6 +16,9 @@ | ||||
| import copy | ||||
| import mock | ||||
|  | ||||
| import warlock | ||||
|  | ||||
| from glanceclient.v2 import schemas | ||||
| from openstackclient.image.v2 import image | ||||
| from openstackclient.tests import fakes | ||||
| from openstackclient.tests.image.v2 import fakes as image_fakes | ||||
| @@ -223,7 +226,7 @@ class TestImageList(TestImage): | ||||
|             '', | ||||
|             '', | ||||
|             '', | ||||
|             '', | ||||
|             'public', | ||||
|             False, | ||||
|             image_fakes.image_owner, | ||||
|             '', | ||||
| @@ -293,3 +296,38 @@ class TestImageList(TestImage): | ||||
|             image_fakes.image_name | ||||
|         ), ) | ||||
|         self.assertEqual(datalist, tuple(data)) | ||||
|  | ||||
|  | ||||
| class TestImageShow(TestImage): | ||||
|  | ||||
|     def setUp(self): | ||||
|         super(TestImageShow, self).setUp() | ||||
|  | ||||
|         # Set up the schema | ||||
|         self.model = warlock.model_factory( | ||||
|             image_fakes.IMAGE_schema, | ||||
|             schemas.SchemaBasedModel, | ||||
|         ) | ||||
|  | ||||
|         self.images_mock.get.return_value = self.model(**image_fakes.IMAGE) | ||||
|  | ||||
|         # Get the command object to test | ||||
|         self.cmd = image.ShowImage(self.app, None) | ||||
|  | ||||
|     def test_image_show(self): | ||||
|         arglist = [ | ||||
|             image_fakes.image_id, | ||||
|         ] | ||||
|         verifylist = [ | ||||
|             ('image', image_fakes.image_id), | ||||
|         ] | ||||
|         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||
|  | ||||
|         # DisplayCommandBase.take_action() returns two tuples | ||||
|         columns, data = self.cmd.take_action(parsed_args) | ||||
|         self.images_mock.get.assert_called_with( | ||||
|             image_fakes.image_id, | ||||
|         ) | ||||
|  | ||||
|         self.assertEqual(image_fakes.IMAGE_columns, columns) | ||||
|         self.assertEqual(image_fakes.IMAGE_data, data) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Dean Troyer
					Dean Troyer