blob: 3b569f6b8a110be33fa64db6085101030419b922 [file] [log] [blame]
Daryl Walleck73a9e7a2011-11-15 17:43:31 -06001from nose.plugins.attrib import attr
2from storm import openstack
3from storm.common.utils.data_utils import rand_name
4import unittest2 as unittest
5import storm.config
6
7
8class ServerMetadataTest(unittest.TestCase):
9
10 @classmethod
11 def setUpClass(cls):
12 cls.os = openstack.Manager()
13 cls.client = cls.os.servers_client
14 cls.config = storm.config.StormConfig()
15 cls.image_ref = cls.config.env.image_ref
16 cls.flavor_ref = cls.config.env.flavor_ref
17
18 #Create a server to be used for all read only tests
19 cls.meta = {'test1': 'value1', 'test2': 'value2'}
20 name = rand_name('server')
21 resp, cls.server = cls.client.create_server(name, cls.image_ref,
22 cls.flavor_ref, meta=cls.meta)
23
24 #Wait for the server to become active
25 cls.client.wait_for_server_status(cls.server['id'], 'ACTIVE')
26
27 @classmethod
28 def tearDownClass(cls):
29 cls.client.delete_server(cls.server['id'])
30
31 def test_list_server_metadata(self):
32 """All metadata key/value pairs for a server should be returned"""
33 resp, metadata = self.client.list_server_metadata(self.server['id'])
34
35 #Verify the expected metadata items are in the list
36 self.assertEqual(200, resp.status)
37 self.assertEqual('value1', metadata['test1'])
38 self.assertEqual('value2', metadata['test2'])
39
40 def test_set_server_metadata(self):
41 """The server's metadata should be replaced with the provided values"""
42 meta = {'meta1': 'data1'}
43 name = rand_name('server')
44 resp, server = self.client.create_server(name, self.image_ref,
45 self.flavor_ref, meta=meta)
46 self.client.wait_for_server_status(server['id'], 'ACTIVE')
47
48 #Create a new set of metadata for the server
49 meta = {'meta2': 'data2', 'meta3': 'data3'}
50 resp, metadata = self.client.set_server_metadata(server['id'], meta)
51 self.assertEqual(200, resp.status)
52
53 #Verify the expected values are correct, and that the
54 #previous values have been removed
55 resp, body = self.client.list_server_metadata(server['id'])
56 self.assertEqual('data2', metadata['meta2'])
57 self.assertEqual('data3', metadata['meta3'])
58 self.assertTrue('meta1' not in metadata)
59
60 #Teardown
61 self.client.delete_server(server['id'])
62
63 def test_update_server_metadata(self):
64 """
65 The server's metadata values should be updated to the
66 provided values
67 """
68 meta = {'key1': 'value1', 'key2': 'value2'}
69 name = rand_name('server')
70 resp, server = self.client.create_server(name, self.image_ref,
71 self.flavor_ref, meta=meta)
72 self.client.wait_for_server_status(server['id'], 'ACTIVE')
73
74 #Update all metadata items for the server
75 meta = {'key1': 'alt1', 'key2': 'alt2'}
76 resp, metadata = self.client.update_server_metadata(server['id'], meta)
77 self.assertEqual(200, resp.status)
78
79 #Verify the values have been updated to the proper values
80 resp, body = self.client.list_server_metadata(server['id'])
81 self.assertEqual('alt1', metadata['key1'])
82 self.assertEqual('alt2', metadata['key2'])
83
84 #Teardown
85 self.client.delete_server(server['id'])
86
87 def test_get_server_metadata_item(self):
88 """ The value for a specic metadata key should be returned """
89 resp, meta = self.client.get_server_metadata_item(self.server['id'],
90 'test2')
91 self.assertTrue('value2', meta['test2'])
92
93 def test_set_server_metadata_item(self):
94 """The item's value should be updated to the provided value"""
95 meta = {'nova': 'server'}
96 name = rand_name('server')
97 resp, server = self.client.create_server(name, self.image_ref,
98 self.flavor_ref, meta=meta)
99 self.client.wait_for_server_status(server['id'], 'ACTIVE')
100
101 #Update the metadata value
102 meta = {'nova': 'alt'}
103 resp, body = self.client.set_server_metadata_item(server['id'],
104 'nova', meta)
105 self.assertEqual(200, resp.status)
106
107 #Verify the meta item's value has been updated
108 resp, body = self.client.list_server_metadata(server['id'])
109 self.assertEqual('alt', metadata['nova'])
110
111 #Teardown
112 self.client.delete_server(server.id)
113
114 def test_delete_server_metadata_item(self):
115 """The metadata value/key pair should be deleted from the server"""
116 meta = {'delkey': 'delvalue'}
117 name = rand_name('server')
118 resp, server = self.client.create_server(name, self.image_ref,
119 self.flavor_ref, meta=meta)
120 self.client.wait_for_server_status(server['id'], 'ACTIVE')
121
122 #Delete the metadata item
123 resp, metadata = self.client.delete_server_metadata_item(server['id'],
124 'delkey')
125 self.assertEqual(204, resp.status)
126
127 #Verify the metadata item has been removed
128 resp, metadata = self.client.list_server_metadata(server['id'])
129 self.assertTrue('delkey' not in metadata)
130
131 #Teardown
132 self.client.delete_server(server['id'])