From 47791a1639c9ab1da46e750ad11015d9ca868ab0 Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Fri, 1 May 2015 09:38:04 -0500 Subject: [PATCH] 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 --- .../tests/compute/v2/test_server.py | 8 +- openstackclient/tests/image/v1/test_image.py | 33 +++++++ openstackclient/tests/image/v2/fakes.py | 93 ++++++++++++++++++- openstackclient/tests/image/v2/test_image.py | 40 +++++++- 4 files changed, 166 insertions(+), 8 deletions(-) diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py index 079f301eac..baf53742e5 100644 --- a/openstackclient/tests/compute/v2/test_server.py +++ b/openstackclient/tests/compute/v2/test_server.py @@ -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) diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py index 2136f109de..ef7ca9eaa7 100644 --- a/openstackclient/tests/image/v1/test_image.py +++ b/openstackclient/tests/image/v1/test_image.py @@ -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) diff --git a/openstackclient/tests/image/v2/fakes.py b/openstackclient/tests/image/v2/fakes.py index 1b7edf08bf..678291bb86 100644 --- a/openstackclient/tests/image/v2/fakes.py +++ b/openstackclient/tests/image/v2/fakes.py @@ -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" + }, + } } diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py index 7eb23769ec..73b5d39a4a 100644 --- a/openstackclient/tests/image/v2/test_image.py +++ b/openstackclient/tests/image/v2/test_image.py @@ -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)