blob: 9f93e768ef94f0081ea6aeb1db45b61850d3995c [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
Sean Dague1937d092013-05-17 16:36:38 -040016from tempest.api.compute import base
Stephen Finucane39fa9c12020-09-03 17:47:19 +010017from tempest import config
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080018from tempest.lib import decorators
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060019
Stephen Finucane39fa9c12020-09-03 17:47:19 +010020CONF = config.CONF
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060021
Stephen Finucane39fa9c12020-09-03 17:47:19 +010022
23# TODO(stephenfin): Remove these tests once the nova Ussuri branch goes EOL
ivan-zhuf2b00502013-10-18 10:06:52 +080024class ServerMetadataTestJSON(base.BaseV2ComputeTest):
zhuflef323632020-08-13 10:38:40 +080025 """Test server metadata"""
26
Eric Friedbfaa50f2020-01-09 12:04:54 -060027 create_default_network = True
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060028
29 @classmethod
Stephen Finucane39fa9c12020-09-03 17:47:19 +010030 def skip_checks(cls):
31 super(ServerMetadataTestJSON, cls).skip_checks()
32 if not CONF.compute_feature_enabled.xenapi_apis:
33 raise cls.skipException(
34 'Metadata is read-only on non-Xen-based deployments.')
35
36 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053037 def setup_clients(cls):
38 super(ServerMetadataTestJSON, cls).setup_clients()
Daryl Walleckc7251962012-03-12 17:26:54 -050039 cls.client = cls.servers_client
Rohan Kanade60b73092015-02-04 17:58:19 +053040
41 @classmethod
42 def resource_setup(cls):
43 super(ServerMetadataTestJSON, cls).resource_setup()
guo yunxian74ef7c72016-09-27 19:25:44 +080044 cls.server = cls.create_test_server(metadata={}, wait_until='ACTIVE')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060045
Brian Waldon738cd632011-12-12 18:45:09 -050046 def setUp(self):
meera-belurfd279d62013-02-15 15:35:46 -080047 super(ServerMetadataTestJSON, self).setUp()
Brian Waldon738cd632011-12-12 18:45:09 -050048 meta = {'key1': 'value1', 'key2': 'value2'}
jeremy.zhang15ee1ff2017-08-21 11:47:34 +080049 self.client.set_server_metadata(self.server['id'], meta)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060050
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080051 @decorators.idempotent_id('479da087-92b3-4dcf-aeb3-fd293b2d14ce')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060052 def test_list_server_metadata(self):
zhuflef323632020-08-13 10:38:40 +080053 """Test listing server metadata
54
55 All metadata key/value pairs for a server should be returned.
56 """
guo yunxian74ef7c72016-09-27 19:25:44 +080057 resp_metadata = (self.client.list_server_metadata(self.server['id'])
ghanshyam0f825252015-08-25 16:02:50 +090058 ['metadata'])
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060059
Attila Fazekasf7f34f92013-08-01 17:01:44 +020060 # Verify the expected metadata items are in the list
Brian Waldon738cd632011-12-12 18:45:09 -050061 expected = {'key1': 'value1', 'key2': 'value2'}
62 self.assertEqual(expected, resp_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060063
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080064 @decorators.idempotent_id('211021f6-21de-4657-a68f-908878cfe251')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060065 def test_set_server_metadata(self):
zhuflef323632020-08-13 10:38:40 +080066 """Test setting server metadata
67
68 The server's metadata should be replaced with the provided values
69 """
Attila Fazekasf7f34f92013-08-01 17:01:44 +020070 # Create a new set of metadata for the server
Brian Waldon738cd632011-12-12 18:45:09 -050071 req_metadata = {'meta2': 'data2', 'meta3': 'data3'}
jeremy.zhang15ee1ff2017-08-21 11:47:34 +080072 self.client.set_server_metadata(self.server['id'], req_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060073
Attila Fazekasf7f34f92013-08-01 17:01:44 +020074 # Verify the expected values are correct, and that the
75 # previous values have been removed
guo yunxian74ef7c72016-09-27 19:25:44 +080076 resp_metadata = (self.client.list_server_metadata(self.server['id'])
ghanshyam0f825252015-08-25 16:02:50 +090077 ['metadata'])
Brian Waldon738cd632011-12-12 18:45:09 -050078 self.assertEqual(resp_metadata, req_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060079
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080080 @decorators.idempotent_id('344d981e-0c33-4997-8a5d-6c1d803e4134')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060081 def test_update_server_metadata(self):
zhuflef323632020-08-13 10:38:40 +080082 """Test updating server metadata
83
84 The server's metadata values should be updated to the provided values.
85 """
Brian Waldon738cd632011-12-12 18:45:09 -050086 meta = {'key1': 'alt1', 'key3': 'value3'}
guo yunxian74ef7c72016-09-27 19:25:44 +080087 self.client.update_server_metadata(self.server['id'], meta)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060088
Attila Fazekasf7f34f92013-08-01 17:01:44 +020089 # Verify the values have been updated to the proper values
guo yunxian74ef7c72016-09-27 19:25:44 +080090 resp_metadata = (self.client.list_server_metadata(self.server['id'])
ghanshyam0f825252015-08-25 16:02:50 +090091 ['metadata'])
Brian Waldon738cd632011-12-12 18:45:09 -050092 expected = {'key1': 'alt1', 'key2': 'value2', 'key3': 'value3'}
93 self.assertEqual(expected, resp_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060094
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080095 @decorators.idempotent_id('0f58d402-e34a-481d-8af8-b392b17426d9')
Ashish Chandrac1beab02013-02-12 02:54:06 -080096 def test_update_metadata_empty_body(self):
zhuflef323632020-08-13 10:38:40 +080097 """Test updating server metadata to empty values
98
99 The original server metadata should not be lost if empty metadata
100 body is passed.
101 """
Ashish Chandrac1beab02013-02-12 02:54:06 -0800102 meta = {}
guo yunxian74ef7c72016-09-27 19:25:44 +0800103 self.client.update_server_metadata(self.server['id'], meta)
104 resp_metadata = (self.client.list_server_metadata(self.server['id'])
ghanshyam0f825252015-08-25 16:02:50 +0900105 ['metadata'])
Ashish Chandrac1beab02013-02-12 02:54:06 -0800106 expected = {'key1': 'value1', 'key2': 'value2'}
107 self.assertEqual(expected, resp_metadata)
108
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800109 @decorators.idempotent_id('3043c57d-7e0e-49a6-9a96-ad569c265e6a')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600110 def test_get_server_metadata_item(self):
zhuflef323632020-08-13 10:38:40 +0800111 """Test getting specific server metadata item"""
guo yunxian74ef7c72016-09-27 19:25:44 +0800112 meta = self.client.show_server_metadata_item(self.server['id'],
Ken'ichi Ohmichi277d1882015-11-20 00:44:06 +0000113 'key2')['meta']
Chang Bo Guo4ae51d42013-09-16 18:01:39 -0700114 self.assertEqual('value2', meta['key2'])
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600115
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800116 @decorators.idempotent_id('58c02d4f-5c67-40be-8744-d3fa5982eb1c')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600117 def test_set_server_metadata_item(self):
zhuflef323632020-08-13 10:38:40 +0800118 """Test updating specific server metadata item
119
120 The metadata item's value should be updated to the provided value.
121 """
122
123 # Update the metadata value.
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600124 meta = {'nova': 'alt'}
guo yunxian74ef7c72016-09-27 19:25:44 +0800125 self.client.set_server_metadata_item(self.server['id'], 'nova', meta)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600126
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200127 # Verify the meta item's value has been updated
guo yunxian74ef7c72016-09-27 19:25:44 +0800128 resp_metadata = (self.client.list_server_metadata(self.server['id'])
ghanshyam0f825252015-08-25 16:02:50 +0900129 ['metadata'])
Brian Waldon738cd632011-12-12 18:45:09 -0500130 expected = {'key1': 'value1', 'key2': 'value2', 'nova': 'alt'}
131 self.assertEqual(expected, resp_metadata)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600132
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800133 @decorators.idempotent_id('127642d6-4c7b-4486-b7cd-07265a378658')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600134 def test_delete_server_metadata_item(self):
zhuflef323632020-08-13 10:38:40 +0800135 """Test deleting server metadata item
136
137 The metadata value/key pair should be deleted from the server.
138 """
guo yunxian74ef7c72016-09-27 19:25:44 +0800139 self.client.delete_server_metadata_item(self.server['id'], 'key1')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -0600140
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200141 # Verify the metadata item has been removed
guo yunxian74ef7c72016-09-27 19:25:44 +0800142 resp_metadata = (self.client.list_server_metadata(self.server['id'])
ghanshyam0f825252015-08-25 16:02:50 +0900143 ['metadata'])
Brian Waldon738cd632011-12-12 18:45:09 -0500144 expected = {'key2': 'value2'}
145 self.assertEqual(expected, resp_metadata)