blob: 7db963eb587a7aa89145c2f102e09a46b8206043 [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
sapan-kona17d7f062011-12-22 17:35:00 +053018from nose.plugins.attrib import attr
Jay Pipes13b479b2012-06-11 14:52:27 -040019
Daryl Wallecked8bef32011-12-05 23:02:08 -060020from tempest.common.utils.data_utils import rand_name
Sean Daguec38bdd12012-11-16 07:08:56 -050021from tempest import exceptions
James E. Blaire6d8ee12013-01-18 21:33:45 +000022from tempest.tests.compute.base import BaseComputeTest
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060023
24
James E. Blaire6d8ee12013-01-18 21:33:45 +000025class ServerMetadataTest(BaseComputeTest):
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060026
27 @classmethod
28 def setUpClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040029 super(ServerMetadataTest, cls).setUpClass()
Daryl Walleckc7251962012-03-12 17:26:54 -050030 cls.client = cls.servers_client
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060031
32 #Create a server to be used for all read only tests
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060033 name = rand_name('server')
Brian Waldon738cd632011-12-12 18:45:09 -050034 resp, server = cls.client.create_server(name, cls.image_ref,
35 cls.flavor_ref, meta={})
36 cls.server_id = server['id']
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060037
38 #Wait for the server to become active
Brian Waldon738cd632011-12-12 18:45:09 -050039 cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060040
41 @classmethod
42 def tearDownClass(cls):
Brian Waldon738cd632011-12-12 18:45:09 -050043 cls.client.delete_server(cls.server_id)
Jay Pipesf38eaac2012-06-21 13:37:35 -040044 super(ServerMetadataTest, cls).tearDownClass()
Brian Waldon738cd632011-12-12 18:45:09 -050045
46 def setUp(self):
ivan-zhu1feeb382013-01-24 10:14:39 +080047 super(ServerMetadataTest, self).setUp()
Brian Waldon738cd632011-12-12 18:45:09 -050048 meta = {'key1': 'value1', 'key2': 'value2'}
49 resp, _ = self.client.set_server_metadata(self.server_id, meta)
50 self.assertEqual(resp.status, 200)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060051
52 def test_list_server_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050053 # All metadata key/value pairs for a server should be returned
Brian Waldon738cd632011-12-12 18:45:09 -050054 resp, resp_metadata = self.client.list_server_metadata(self.server_id)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060055
56 #Verify the expected metadata items are in the list
57 self.assertEqual(200, resp.status)
Brian Waldon738cd632011-12-12 18:45:09 -050058 expected = {'key1': 'value1', 'key2': 'value2'}
59 self.assertEqual(expected, resp_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060060
61 def test_set_server_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050062 # The server's metadata should be replaced with the provided values
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060063 #Create a new set of metadata for the server
Brian Waldon738cd632011-12-12 18:45:09 -050064 req_metadata = {'meta2': 'data2', 'meta3': 'data3'}
65 resp, metadata = self.client.set_server_metadata(self.server_id,
66 req_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060067 self.assertEqual(200, resp.status)
68
69 #Verify the expected values are correct, and that the
70 #previous values have been removed
Brian Waldon738cd632011-12-12 18:45:09 -050071 resp, resp_metadata = self.client.list_server_metadata(self.server_id)
72 self.assertEqual(resp_metadata, req_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060073
gavin-brebner-orange9cc23342011-12-02 12:49:58 +010074 def test_server_create_metadata_key_too_long(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050075 # Attempt to start a server with a meta-data key that is > 255
76 # characters
77
78 # Try a few values
gavin-brebner-orange9cc23342011-12-02 12:49:58 +010079 for sz in [256, 257, 511, 1023]:
80 key = "k" * sz
81 meta = {key: 'data1'}
82 name = rand_name('server')
Sean Daguec38bdd12012-11-16 07:08:56 -050083 self.assertRaises(exceptions.OverLimit,
Sean Dague9b669e32012-12-13 18:40:08 -050084 self.create_server_with_extras,
85 name, self.image_ref,
Sean Daguec38bdd12012-11-16 07:08:56 -050086 self.flavor_ref, meta=meta)
87
gavin-brebner-orange9cc23342011-12-02 12:49:58 +010088 # no teardown - all creates should fail
89
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060090 def test_update_server_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050091 # The server's metadata values should be updated to the
92 # provided values
Brian Waldon738cd632011-12-12 18:45:09 -050093 meta = {'key1': 'alt1', 'key3': 'value3'}
94 resp, metadata = self.client.update_server_metadata(self.server_id,
95 meta)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060096 self.assertEqual(200, resp.status)
97
98 #Verify the values have been updated to the proper values
Brian Waldon738cd632011-12-12 18:45:09 -050099 resp, resp_metadata = self.client.list_server_metadata(self.server_id)
100 expected = {'key1': 'alt1', 'key2': 'value2', 'key3': 'value3'}
101 self.assertEqual(expected, resp_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600102
103 def test_get_server_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500104 # The value for a specic metadata key should be returned
Brian Waldon738cd632011-12-12 18:45:09 -0500105 resp, meta = self.client.get_server_metadata_item(self.server_id,
106 'key2')
107 self.assertTrue('value2', meta['key2'])
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600108
109 def test_set_server_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500110 # The item's value should be updated to the provided value
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600111 #Update the metadata value
112 meta = {'nova': 'alt'}
Brian Waldon738cd632011-12-12 18:45:09 -0500113 resp, body = self.client.set_server_metadata_item(self.server_id,
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600114 'nova', meta)
115 self.assertEqual(200, resp.status)
116
117 #Verify the meta item's value has been updated
Brian Waldon738cd632011-12-12 18:45:09 -0500118 resp, resp_metadata = self.client.list_server_metadata(self.server_id)
119 expected = {'key1': 'value1', 'key2': 'value2', 'nova': 'alt'}
120 self.assertEqual(expected, resp_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600121
122 def test_delete_server_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500123 # The metadata value/key pair should be deleted from the server
Brian Waldon738cd632011-12-12 18:45:09 -0500124 resp, meta = self.client.delete_server_metadata_item(self.server_id,
125 'key1')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600126 self.assertEqual(204, resp.status)
127
128 #Verify the metadata item has been removed
Brian Waldon738cd632011-12-12 18:45:09 -0500129 resp, resp_metadata = self.client.list_server_metadata(self.server_id)
130 expected = {'key2': 'value2'}
131 self.assertEqual(expected, resp_metadata)
sapan-kona17d7f062011-12-22 17:35:00 +0530132
133 @attr(type='negative')
134 def test_get_nonexistant_server_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500135 # Negative test: GET on nonexistant server should not succeed
sapan-kona17d7f062011-12-22 17:35:00 +0530136 try:
137 resp, meta = self.client.get_server_metadata_item(999, 'test2')
Matthew Treinish05d9fb92012-12-07 16:14:05 -0500138 except Exception:
sapan-kona17d7f062011-12-22 17:35:00 +0530139 pass
140 else:
141 self.fail('GET on nonexistant server should not succeed')
142
143 @attr(type='negative')
144 def test_list_nonexistant_server_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500145 # Negative test:List metadata on a non existant server should
146 # not succeed
sapan-kona17d7f062011-12-22 17:35:00 +0530147 try:
148 resp, metadata = self.client.list_server_metadata(999)
Matthew Treinish05d9fb92012-12-07 16:14:05 -0500149 except Exception:
sapan-kona17d7f062011-12-22 17:35:00 +0530150 pass
151 else:
152 self.fail('List metadata on a non existant server should'
153 'not succeed')
154
155 @attr(type='negative')
156 def test_set_nonexistant_server_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500157 # Negative test: Set metadata on a non existant server should not
158 # succeed
sapan-kona17d7f062011-12-22 17:35:00 +0530159 meta = {'meta1': 'data1'}
160 try:
161 resp, metadata = self.client.set_server_metadata(999, meta)
Matthew Treinish05d9fb92012-12-07 16:14:05 -0500162 except Exception:
sapan-kona17d7f062011-12-22 17:35:00 +0530163 pass
164 else:
165 self.fail('Set metadata on a non existant server should'
166 'not succeed')
167
168 @attr(type='negative')
169 def test_update_nonexistant_server_metadata(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500170 # Negative test: An update should not happen for a nonexistant image
sapan-kona17d7f062011-12-22 17:35:00 +0530171 meta = {'key1': 'value1', 'key2': 'value2'}
172 try:
173 resp, metadata = self.client.update_server_metadata(999, meta)
Matthew Treinish05d9fb92012-12-07 16:14:05 -0500174 except Exception:
sapan-kona17d7f062011-12-22 17:35:00 +0530175 pass
176 else:
177 self.fail('An update should not happen for a nonexistant image')
178
179 @attr(type='negative')
180 def test_delete_nonexistant_server_metadata_item(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500181 # Negative test: Should not be able to delete metadata item from a
182 # nonexistant server
David Kranz6e977a72012-02-13 09:34:05 -0500183 meta = {'d': 'delvalue'}
sapan-kona17d7f062011-12-22 17:35:00 +0530184
185 #Delete the metadata item
David Kranz6e977a72012-02-13 09:34:05 -0500186 try:
187 resp, metadata = self.client.delete_server_metadata_item(999, 'd')
Matthew Treinish05d9fb92012-12-07 16:14:05 -0500188 except Exception:
David Kranz6e977a72012-02-13 09:34:05 -0500189 pass
190 else:
191 self.fail('A delete should not happen for a nonexistant image')