blob: b533a1b5eacb4c141876aeb1acc320b9228430bb [file] [log] [blame]
Daryl Wallecked8bef32011-12-05 23:02:08 -06001from nose.plugins.attrib import attr
2from tempest import openstack
3from tempest.common.utils.data_utils import rand_name
4import tempest.config
5import unittest2 as unittest
6
7
8class ImagesMetadataTest(unittest.TestCase):
9
10 @classmethod
11 def setUpClass(cls):
12 cls.os = openstack.Manager()
13 cls.servers_client = cls.os.servers_client
14 cls.client = cls.os.images_client
15 cls.config = cls.os.config
16 cls.image_ref = cls.config.env.image_ref
17 cls.flavor_ref = cls.config.env.flavor_ref
18 cls.ssh_timeout = cls.config.nova.ssh_timeout
19
20 name = rand_name('server')
21 resp, cls.server = cls.servers_client.create_server(name,
22 cls.image_ref,
23 cls.flavor_ref)
24 #Wait for the server to become active
25 cls.servers_client.wait_for_server_status(cls.server['id'], 'ACTIVE')
26
27 @classmethod
28 def tearDownClass(cls):
29 cls.servers_client.delete_server(cls.server['id'])
Brian Lamar12d9b292011-12-08 12:41:21 -050030
Daryl Wallecked8bef32011-12-05 23:02:08 -060031 def setUp(self):
32 meta = {'key1': 'value1', 'key2': 'value2'}
33 name = rand_name('image')
34 resp, body = self.client.create_image(self.server['id'], name, meta)
35 image_ref = resp['location']
36 temp = image_ref.rsplit('/')
37 image_id = temp[6]
38
39 self.client.wait_for_image_resp_code(image_id, 200)
40 self.client.wait_for_image_status(image_id, 'ACTIVE')
41 resp, self.image = self.client.get_image(image_id)
42
43 def tearDown(self):
44 self.client.delete_image(self.image['id'])
45
46 def _parse_image_id(self, image_ref):
47 temp = image_ref.rsplit('/')
48 return len(temp) - 1
49
50 def test_list_image_metadata(self):
51 """All metadata key/value pairs for an image should be returned"""
52 resp, metadata = self.client.list_image_metadata(self.image['id'])
53 self.assertEqual('value1', metadata['key1'])
54 self.assertEqual('value2', metadata['key2'])
55
56 def test_set_image_metadata(self):
57 """The metadata for the image should match the new values"""
58 meta = {'meta1': 'data1'}
59 name = rand_name('image')
60 resp, body = self.client.create_image(self.server['id'], name, meta)
61 image_id = self._parse_image_id(resp['location'])
62 self.client.wait_for_image_resp_code(image_id, 200)
63 self.client.wait_for_image_status(image_id, 'ACTIVE')
64 resp, image = self.client.get_image(image_id)
65
66 meta = {'meta2': 'data2', 'meta3': 'data3'}
67 resp, body = self.client.set_image_metadata(image['id'], meta)
68
69 resp, metadata = self.client.list_image_metadata(image['id'])
70 self.assertEqual('data2', metadata['meta2'])
71 self.assertEqual('data3', metadata['meta3'])
72 self.assertTrue('key1' not in metadata)
73
74 self.servers_client.delete_server(server['id'])
75 self.client.delete_image(image['id'])
76
77 def test_update_image_metadata(self):
78 """The metadata for the image should match the updated values"""
79 meta = {'key1': 'alt1', 'key2': 'alt2'}
Brian Lamar12d9b292011-12-08 12:41:21 -050080 resp, metadata = self.client.update_image_metadata(self.image['id'],
81 meta)
Daryl Wallecked8bef32011-12-05 23:02:08 -060082
83 resp, metadata = self.client.list_image_metadata(self.image['id'])
84 self.assertEqual('alt1', metadata['key1'])
85 self.assertEqual('alt2', metadata['key2'])
86
87 def test_get_image_metadata_item(self):
88 """The value for a specic metadata key should be returned"""
89 resp, meta = self.client.get_image_metadata_item(self.image['id'],
90 'key2')
91 self.assertTrue('value2', meta['key2'])
92
93 def test_set_image_metadata_item(self):
94 """
95 The value provided for the given meta item should be set for the image
96 """
97 meta = {'key1': 'alt'}
98 resp, body = self.client.set_image_metadata_item(self.image['id'],
99 'key1', meta)
100 resp, metadata = self.client.list_image_metadata(self.image['id'])
101 self.assertEqual('alt', metadata['key1'])
102
103 def test_delete_image_metadata_item(self):
104 """The metadata value/key pair should be deleted from the image"""
105 resp, body = self.client.delete_image_metadata_item(self.image['id'],
106 'key1')
107 resp, metadata = self.client.list_image_metadata(self.image['id'])
108 self.assertTrue('key1' not in metadata)