From 1ca0ede168c4aa5d44bca17c9e6b8264544a79fd Mon Sep 17 00:00:00 2001 From: likangkang01 Date: Tue, 14 Jan 2020 09:58:06 +0800 Subject: [PATCH] add image schemas for image add image schemas for image V2 Change-Id: Ica35b854dc2f2f36b62c71025dd3f0440d93c85a --- .../services/image/v2/test_schemas_client.py | 315 ++++++++++++++++++ 1 file changed, 315 insertions(+) diff --git a/tempest/tests/lib/services/image/v2/test_schemas_client.py b/tempest/tests/lib/services/image/v2/test_schemas_client.py index eef5b41fab..9fb249b00a 100644 --- a/tempest/tests/lib/services/image/v2/test_schemas_client.py +++ b/tempest/tests/lib/services/image/v2/test_schemas_client.py @@ -75,6 +75,293 @@ class TestSchemasClient(base.BaseServiceTest): } } + FAKE_SHOW_SCHEMA_IMAGE = { + "additionalProperties": { + "type": "string" + }, + "links": [ + { + "href": "{self}", + "rel": "self" + }, + { + "href": "{file}", + "rel": "enclosure" + }, + { + "href": "{schema}", + "rel": "describedby" + } + ], + "name": "image", + "properties": { + "architecture": { + "description": "Operating system architecture as " + "specified in https://docs.openstack.org/" + "python-glanceclient/latest/cli" + "/property-keys.html", + "is_base": False, + "type": "string" + }, + "checksum": { + "description": "md5 hash of image contents.", + "maxLength": 32, + "readOnly": True, + "type": [ + "null", + "string" + ] + }, + "container_format": { + "description": "Format of the container", + "enum": [ + None, + "ami", + "ari", + "aki", + "bare", + "ovf", + "ova", + "docker" + ], + "type": [ + "null", + "string" + ] + }, + "created_at": { + "description": "Date and time of image registration", + "readOnly": True, + "type": "string" + }, + "direct_url": { + "description": "URL to access the image file " + "kept in external store", + "readOnly": True, + "type": "string" + }, + "disk_format": { + "description": "Format of the disk", + "enum": [ + None, + "ami", + "ari", + "aki", + "vhd", + "vhdx", + "vmdk", + "raw", + "qcow2", + "vdi", + "iso", + "ploop" + ], + "type": [ + "null", + "string" + ] + }, + "file": { + "description": "An image file url", + "readOnly": True, + "type": "string" + }, + "id": { + "description": "An identifier for the image", + "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}$", + "type": "string" + }, + "instance_uuid": { + "description": "Metadata which can be used to record which" + " instance this image is associated with. " + "(Informational only, does not create " + "an instance snapshot.)", + "is_base": False, + "type": "string" + }, + "kernel_id": { + "description": "ID of image stored in Glance that should " + "be used as the kernel when booting an " + "AMI-style image.", + "is_base": False, + "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}$", + "type": [ + "null", + "string" + ] + }, + "locations": { + "description": "A set of URLs to access the image file " + "kept in external store", + "items": { + "properties": { + "metadata": { + "type": "object" + }, + "url": { + "maxLength": 255, + "type": "string" + } + }, + "required": [ + "url", + "metadata" + ], + "type": "object" + }, + "type": "array" + }, + "min_disk": { + "description": "Amount of disk space (in GB) " + "required to boot image.", + "type": "integer" + }, + "min_ram": { + "description": "Amount of ram (in MB) required " + "to boot image.", + "type": "integer" + }, + "name": { + "description": "Descriptive name for the image", + "maxLength": 255, + "type": [ + "null", + "string" + ] + }, + "os_distro": { + "description": "Common name of operating system distribution " + "as specified in https://docs.openstack.org/" + "python-glanceclient/latest/cli/" + "property-keys.html", + "is_base": False, + "type": "string" + }, + "os_hash_algo": { + "description": "Algorithm to calculate the os_hash_value", + "maxLength": 64, + "readOnly": True, + "type": [ + "null", + "string" + ] + }, + "os_hash_value": { + "description": "Hexdigest of the image contents " + "using the algorithm specified by " + "the os_hash_algo", + "maxLength": 128, + "readOnly": True, + "type": [ + "null", + "string" + ] + }, + "os_hidden": { + "description": "If true, image will not appear in default" + " image list response.", + "type": "boolean" + }, + "os_version": { + "description": "Operating system version as specified by " + "the distributor", + "is_base": False, + "type": "string" + }, + "owner": { + "description": "Owner of the image", + "maxLength": 255, + "type": [ + "null", + "string" + ] + }, + "protected": { + "description": "If true, image will not be deletable.", + "type": "boolean" + }, + "ramdisk_id": { + "description": "ID of image stored in Glance that should" + " be used as the ramdisk when booting an " + "AMI-style image.", + "is_base": False, + "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}$", + "type": [ + "null", + "string" + ] + }, + "schema": { + "description": "An image schema url", + "readOnly": True, + "type": "string" + }, + "self": { + "description": "An image self url", + "readOnly": True, + "type": "string" + }, + "size": { + "description": "Size of image file in bytes", + "readOnly": True, + "type": [ + "null", + "integer" + ] + }, + "status": { + "description": "Status of the image", + "enum": [ + "queued", + "saving", + "active", + "killed", + "deleted", + "pending_delete", + "deactivated", + "uploading", + "importing" + ], + "readOnly": True, + "type": "string" + }, + "tags": { + "description": "List of strings related to the image", + "items": { + "maxLength": 255, + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "Date and time of the last image modification", + "readOnly": True, + "type": "string" + }, + "virtual_size": { + "description": "Virtual size of image in bytes", + "readOnly": True, + "type": [ + "null", + "integer" + ] + }, + "visibility": { + "description": "Scope of image accessibility", + "enum": [ + "public", + "private" + ], + "type": "string" + } + } + } + def setUp(self): super(TestSchemasClient, self).setUp() fake_auth = fake_auth_provider.FakeAuthProvider() @@ -89,6 +376,22 @@ class TestSchemasClient(base.BaseServiceTest): bytes_body, schema="members") + def _test_show_schema_image(self, bytes_body=False): + self.check_service_client_function( + self.client.show_schema, + 'tempest.lib.common.rest_client.RestClient.get', + self.FAKE_SHOW_SCHEMA_IMAGE, + bytes_body, + schema="image") + + def _test_show_schema_images(self, bytes_body=False): + self.check_service_client_function( + self.client.show_schema, + 'tempest.lib.common.rest_client.RestClient.get', + self.FAKE_SHOW_SCHEMA_IMAGE, + bytes_body, + schema="images") + def _test_show_schema(self, bytes_body=False): self.check_service_client_function( self.client.show_schema, @@ -103,6 +406,18 @@ class TestSchemasClient(base.BaseServiceTest): def test_show_schema_members_with_bytes_body(self): self._test_show_schema_members(bytes_body=True) + def test_show_schema_image_with_str_body(self): + self._test_show_schema_image() + + def test_show_schema_image_with_bytes_body(self): + self._test_show_schema_image(bytes_body=True) + + def test_show_schema_images_with_str_body(self): + self._test_show_schema_images() + + def test_show_schema_images_with_bytes_body(self): + self._test_show_schema_images(bytes_body=True) + def test_show_schema_with_str_body(self): self._test_show_schema()