blob: 9664c6135bc0020081360ef14d18af272f803822 [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04002# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Matthew Treinishb0c65f22015-04-23 09:09:41 -040016import six
Adam Gandelman7c741dc2014-07-14 18:21:35 -070017
Matthew Treinish01472ff2015-02-20 17:26:52 -050018from tempest_lib.common.utils import data_utils
19
Sean Dague1937d092013-05-17 16:36:38 -040020from tempest.api.compute import base
Matthew Treinishbc0e03e2014-01-30 16:51:06 +000021from tempest import config
Zhi Kun Liu22fb4702014-02-27 16:15:24 +080022from tempest import test
Daryl Wallecked8bef32011-12-05 23:02:08 -060023
Matthew Treinishbc0e03e2014-01-30 16:51:06 +000024CONF = config.CONF
25
Daryl Wallecked8bef32011-12-05 23:02:08 -060026
ivan-zhuf2b00502013-10-18 10:06:52 +080027class ImagesMetadataTestJSON(base.BaseV2ComputeTest):
Daryl Wallecked8bef32011-12-05 23:02:08 -060028
29 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053030 def skip_checks(cls):
31 super(ImagesMetadataTestJSON, cls).skip_checks()
Matthew Treinishbc0e03e2014-01-30 16:51:06 +000032 if not CONF.service_available.glance:
Matthew Treinish853ae442013-07-19 16:36:07 -040033 skip_msg = ("%s skipped as glance is not available" % cls.__name__)
34 raise cls.skipException(skip_msg)
35
Rohan Kanade60b73092015-02-04 17:58:19 +053036 @classmethod
37 def setup_clients(cls):
38 super(ImagesMetadataTestJSON, cls).setup_clients()
Adam Gandelman7c741dc2014-07-14 18:21:35 -070039 cls.glance_client = cls.os.image_client
Daryl Walleckc7251962012-03-12 17:26:54 -050040 cls.client = cls.images_client
Rohan Kanade60b73092015-02-04 17:58:19 +053041
42 @classmethod
43 def resource_setup(cls):
44 super(ImagesMetadataTestJSON, cls).resource_setup()
Zhi Kun Liu22fb4702014-02-27 16:15:24 +080045 cls.image_id = None
Daryl Wallecked8bef32011-12-05 23:02:08 -060046
Masayuki Igawa259c1132013-10-31 17:48:44 +090047 name = data_utils.rand_name('image')
David Kranz34f18782015-01-06 13:43:55 -050048 body = cls.glance_client.create_image(name=name,
49 container_format='bare',
50 disk_format='raw',
51 is_public=False)
Adam Gandelman7c741dc2014-07-14 18:21:35 -070052 cls.image_id = body['id']
53 cls.images.append(cls.image_id)
Matthew Treinishb0c65f22015-04-23 09:09:41 -040054 image_file = six.StringIO(('*' * 1024))
Adam Gandelman7c741dc2014-07-14 18:21:35 -070055 cls.glance_client.update_image(cls.image_id, data=image_file)
Brian Waldon738cd632011-12-12 18:45:09 -050056 cls.client.wait_for_image_status(cls.image_id, 'ACTIVE')
Daryl Wallecked8bef32011-12-05 23:02:08 -060057
Daryl Wallecked8bef32011-12-05 23:02:08 -060058 def setUp(self):
nayna-pateleda1d122013-03-20 14:44:31 +000059 super(ImagesMetadataTestJSON, self).setUp()
Flavio Percococ4801a32015-01-16 17:32:19 +010060 meta = {'os_version': 'value1', 'os_distro': 'value2'}
David Kranza5299eb2015-01-15 17:24:05 -050061 self.client.set_image_metadata(self.image_id, meta)
Daryl Wallecked8bef32011-12-05 23:02:08 -060062
Chris Hoge7579c1a2015-02-26 14:12:15 -080063 @test.idempotent_id('37ec6edd-cf30-4c53-bd45-ae74db6b0531')
Daryl Wallecked8bef32011-12-05 23:02:08 -060064 def test_list_image_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050065 # All metadata key/value pairs for an image should be returned
David Kranza5299eb2015-01-15 17:24:05 -050066 resp_metadata = self.client.list_image_metadata(self.image_id)
Flavio Percococ4801a32015-01-16 17:32:19 +010067 expected = {'os_version': 'value1', 'os_distro': 'value2'}
Brian Waldon738cd632011-12-12 18:45:09 -050068 self.assertEqual(expected, resp_metadata)
Daryl Wallecked8bef32011-12-05 23:02:08 -060069
Chris Hoge7579c1a2015-02-26 14:12:15 -080070 @test.idempotent_id('ece7befc-d3ce-42a4-b4be-c3067a418c29')
Daryl Wallecked8bef32011-12-05 23:02:08 -060071 def test_set_image_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050072 # The metadata for the image should match the new values
Flavio Percococ4801a32015-01-16 17:32:19 +010073 req_metadata = {'os_version': 'value2', 'architecture': 'value3'}
David Kranza5299eb2015-01-15 17:24:05 -050074 self.client.set_image_metadata(self.image_id,
75 req_metadata)
Daryl Wallecked8bef32011-12-05 23:02:08 -060076
David Kranza5299eb2015-01-15 17:24:05 -050077 resp_metadata = self.client.list_image_metadata(self.image_id)
Brian Waldon738cd632011-12-12 18:45:09 -050078 self.assertEqual(req_metadata, resp_metadata)
Daryl Wallecked8bef32011-12-05 23:02:08 -060079
Chris Hoge7579c1a2015-02-26 14:12:15 -080080 @test.idempotent_id('7b491c11-a9d5-40fe-a696-7f7e03d3fea2')
Daryl Wallecked8bef32011-12-05 23:02:08 -060081 def test_update_image_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050082 # The metadata for the image should match the updated values
Flavio Percococ4801a32015-01-16 17:32:19 +010083 req_metadata = {'os_version': 'alt1', 'architecture': 'value3'}
David Kranza5299eb2015-01-15 17:24:05 -050084 self.client.update_image_metadata(self.image_id,
85 req_metadata)
Daryl Wallecked8bef32011-12-05 23:02:08 -060086
David Kranza5299eb2015-01-15 17:24:05 -050087 resp_metadata = self.client.list_image_metadata(self.image_id)
Flavio Percococ4801a32015-01-16 17:32:19 +010088 expected = {'os_version': 'alt1',
89 'os_distro': 'value2',
90 'architecture': 'value3'}
Brian Waldon738cd632011-12-12 18:45:09 -050091 self.assertEqual(expected, resp_metadata)
Daryl Wallecked8bef32011-12-05 23:02:08 -060092
Chris Hoge7579c1a2015-02-26 14:12:15 -080093 @test.idempotent_id('4f5db52f-6685-4c75-b848-f4bb363f9aa6')
Daryl Wallecked8bef32011-12-05 23:02:08 -060094 def test_get_image_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050095 # The value for a specific metadata key should be returned
David Kranza5299eb2015-01-15 17:24:05 -050096 meta = self.client.get_image_metadata_item(self.image_id,
Flavio Percococ4801a32015-01-16 17:32:19 +010097 'os_distro')
98 self.assertEqual('value2', meta['os_distro'])
Daryl Wallecked8bef32011-12-05 23:02:08 -060099
Chris Hoge7579c1a2015-02-26 14:12:15 -0800100 @test.idempotent_id('f2de776a-4778-4d90-a5da-aae63aee64ae')
Daryl Wallecked8bef32011-12-05 23:02:08 -0600101 def test_set_image_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500102 # The value provided for the given meta item should be set for
103 # the image
Flavio Percococ4801a32015-01-16 17:32:19 +0100104 meta = {'os_version': 'alt'}
David Kranza5299eb2015-01-15 17:24:05 -0500105 self.client.set_image_metadata_item(self.image_id,
Flavio Percococ4801a32015-01-16 17:32:19 +0100106 'os_version', meta)
David Kranza5299eb2015-01-15 17:24:05 -0500107 resp_metadata = self.client.list_image_metadata(self.image_id)
Flavio Percococ4801a32015-01-16 17:32:19 +0100108 expected = {'os_version': 'alt', 'os_distro': 'value2'}
Brian Waldon738cd632011-12-12 18:45:09 -0500109 self.assertEqual(expected, resp_metadata)
Daryl Wallecked8bef32011-12-05 23:02:08 -0600110
Chris Hoge7579c1a2015-02-26 14:12:15 -0800111 @test.idempotent_id('a013796c-ba37-4bb5-8602-d944511def14')
Daryl Wallecked8bef32011-12-05 23:02:08 -0600112 def test_delete_image_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500113 # The metadata value/key pair should be deleted from the image
David Kranza5299eb2015-01-15 17:24:05 -0500114 self.client.delete_image_metadata_item(self.image_id,
Flavio Percococ4801a32015-01-16 17:32:19 +0100115 'os_version')
David Kranza5299eb2015-01-15 17:24:05 -0500116 resp_metadata = self.client.list_image_metadata(self.image_id)
Flavio Percococ4801a32015-01-16 17:32:19 +0100117 expected = {'os_distro': 'value2'}
Brian Waldon738cd632011-12-12 18:45:09 -0500118 self.assertEqual(expected, resp_metadata)