blob: c3c88a5b4857ac6ba533fb67c0326fa0b4a48806 [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
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090016import uuid
17
Sean Dague1937d092013-05-17 16:36:38 -040018from tempest.api.compute import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120019from tempest.common.utils import data_utils
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080020from tempest.lib import decorators
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -050021from tempest.lib import exceptions as lib_exc
Matthew Treinishe3d26142013-11-26 19:14:58 +000022from tempest import test
Rohit Karajgi03530292012-04-24 17:00:50 -070023
24
ivan-zhuf2b00502013-10-18 10:06:52 +080025class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
Ken'ichi Ohmichi88363cb2015-11-19 08:00:54 +000026 """Tests Flavors API Create and Delete that require admin privileges"""
Rohit Karajgi03530292012-04-24 17:00:50 -070027
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +053028 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053029 def skip_checks(cls):
30 super(FlavorsAdminTestJSON, cls).skip_checks()
Ken'ichi Ohmichia7e68712014-05-06 10:47:26 +090031 if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
32 msg = "OS-FLV-EXT-DATA extension not enabled."
ivan-zhu1feeb382013-01-24 10:14:39 +080033 raise cls.skipException(msg)
Rohit Karajgi03530292012-04-24 17:00:50 -070034
Rohan Kanade60b73092015-02-04 17:58:19 +053035 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053036 def resource_setup(cls):
37 super(FlavorsAdminTestJSON, cls).resource_setup()
38
Chris Yeoh8abacf32013-01-21 17:08:32 +103039 cls.flavor_name_prefix = 'test_flavor_'
Jay Pipesf38eaac2012-06-21 13:37:35 -040040 cls.ram = 512
41 cls.vcpus = 1
42 cls.disk = 10
43 cls.ephemeral = 10
Jay Pipesf38eaac2012-06-21 13:37:35 -040044 cls.swap = 1024
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +053045 cls.rxtx = 2
Rohit Karajgi03530292012-04-24 17:00:50 -070046
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080047 @decorators.idempotent_id('8b4330e1-12c4-4554-9390-e6639971f086')
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090048 def test_create_flavor_with_int_id(self):
49 flavor_id = data_utils.rand_int_id(start=1000)
zhufl36eeab02017-01-18 11:49:04 +080050 new_flavor_id = self.create_flavor(ram=self.ram,
51 vcpus=self.vcpus,
52 disk=self.disk,
53 id=flavor_id)['id']
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090054 self.assertEqual(new_flavor_id, str(flavor_id))
55
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080056 @decorators.idempotent_id('94c9bb4e-2c2a-4f3c-bb1f-5f0daf918e6d')
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090057 def test_create_flavor_with_uuid_id(self):
Ken'ichi Ohmichid079c892016-04-19 11:23:36 -070058 flavor_id = data_utils.rand_uuid()
zhufl36eeab02017-01-18 11:49:04 +080059 new_flavor_id = self.create_flavor(ram=self.ram,
60 vcpus=self.vcpus,
61 disk=self.disk,
62 id=flavor_id)['id']
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090063 self.assertEqual(new_flavor_id, flavor_id)
64
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080065 @decorators.idempotent_id('f83fe669-6758-448a-a85e-32d351f36fe0')
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090066 def test_create_flavor_with_none_id(self):
67 # If nova receives a request with None as flavor_id,
68 # nova generates flavor_id of uuid.
69 flavor_id = None
zhufl36eeab02017-01-18 11:49:04 +080070 new_flavor_id = self.create_flavor(ram=self.ram,
71 vcpus=self.vcpus,
72 disk=self.disk,
73 id=flavor_id)['id']
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090074 self.assertEqual(new_flavor_id, str(uuid.UUID(new_flavor_id)))
75
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080076 @decorators.idempotent_id('8261d7b0-be58-43ec-a2e5-300573c3f6c5')
Rohit Karajgi03530292012-04-24 17:00:50 -070077 def test_create_flavor_verify_entry_in_list_details(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050078 # Create a flavor and ensure it's details are listed
79 # This operation requires the user to have 'admin' role
Masayuki Igawa259c1132013-10-31 17:48:44 +090080 flavor_name = data_utils.rand_name(self.flavor_name_prefix)
Chris Yeoh8abacf32013-01-21 17:08:32 +103081
Attila Fazekasf7f34f92013-08-01 17:01:44 +020082 # Create the flavor
Jordan Pittierd5969792017-02-07 14:10:52 +010083 self.create_flavor(name=flavor_name,
84 ram=self.ram, vcpus=self.vcpus,
85 disk=self.disk,
86 ephemeral=self.ephemeral,
87 swap=self.swap,
88 rxtx_factor=self.rxtx)
89
90 # Check if flavor is present in list
91 flavors_list = self.admin_flavors_client.list_flavors(
lkuchlaneb829d42017-02-13 12:57:04 +020092 detail=True)['flavors']
Jordan Pittierd5969792017-02-07 14:10:52 +010093 self.assertIn(flavor_name, [f['name'] for f in flavors_list])
Rohit Karajgi03530292012-04-24 17:00:50 -070094
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080095 @decorators.idempotent_id('63dc64e6-2e79-4fdf-868f-85500d308d66')
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +053096 def test_create_list_flavor_without_extra_data(self):
Attila Fazekasf7f34f92013-08-01 17:01:44 +020097 # Create a flavor and ensure it is listed
98 # This operation requires the user to have 'admin' role
ivan-zhuae7c7c52013-10-21 22:13:22 +080099
100 def verify_flavor_response_extension(flavor):
101 # check some extensions for the flavor create/show/detail response
102 self.assertEqual(flavor['swap'], '')
103 self.assertEqual(int(flavor['rxtx_factor']), 1)
zhufl44cdf152017-02-21 11:21:57 +0800104 self.assertEqual(flavor['OS-FLV-EXT-DATA:ephemeral'], 0)
ivan-zhuae7c7c52013-10-21 22:13:22 +0800105 self.assertEqual(flavor['os-flavor-access:is_public'], True)
106
Masayuki Igawa259c1132013-10-31 17:48:44 +0900107 flavor_name = data_utils.rand_name(self.flavor_name_prefix)
108 new_flavor_id = data_utils.rand_int_id(start=1000)
Chris Yeoh8abacf32013-01-21 17:08:32 +1030109
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200110 # Create the flavor
zhufl36eeab02017-01-18 11:49:04 +0800111 flavor = self.create_flavor(name=flavor_name,
112 ram=self.ram, vcpus=self.vcpus,
113 disk=self.disk,
114 id=new_flavor_id)
Attila Fazekas2883fd52013-03-10 12:05:21 +0100115 self.assertEqual(flavor['name'], flavor_name)
116 self.assertEqual(flavor['ram'], self.ram)
117 self.assertEqual(flavor['vcpus'], self.vcpus)
118 self.assertEqual(flavor['disk'], self.disk)
119 self.assertEqual(int(flavor['id']), new_flavor_id)
ivan-zhuae7c7c52013-10-21 22:13:22 +0800120 verify_flavor_response_extension(flavor)
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +0530121
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200122 # Verify flavor is retrieved
lkuchlaneb829d42017-02-13 12:57:04 +0200123 flavor = self.admin_flavors_client.show_flavor(new_flavor_id)['flavor']
Attila Fazekas2883fd52013-03-10 12:05:21 +0100124 self.assertEqual(flavor['name'], flavor_name)
ivan-zhuae7c7c52013-10-21 22:13:22 +0800125 verify_flavor_response_extension(flavor)
126
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200127 # Check if flavor is present in list
Jordan Pittierd5969792017-02-07 14:10:52 +0100128 flavors_list = [
129 f for f in self.flavors_client.list_flavors(detail=True)['flavors']
130 if f['name'] == flavor_name
131 ]
132 self.assertNotEmpty(flavors_list)
133 verify_flavor_response_extension(flavors_list[0])
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +0530134
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -0800135 @decorators.idempotent_id('be6cc18c-7c5d-48c0-ac16-17eaf03c54eb')
Sumanth Nagadavalli3d955d92013-08-13 15:16:30 +0530136 def test_list_non_public_flavor(self):
Santiago Baldassin7f989162014-03-19 12:02:47 -0300137 # Create a flavor with os-flavor-access:is_public false.
138 # The flavor should not be present in list_details as the
139 # tenant is not automatically added access list.
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200140 # This operation requires the user to have 'admin' role
Masayuki Igawa259c1132013-10-31 17:48:44 +0900141 flavor_name = data_utils.rand_name(self.flavor_name_prefix)
Chris Yeoh8abacf32013-01-21 17:08:32 +1030142
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200143 # Create the flavor
Jordan Pittierd5969792017-02-07 14:10:52 +0100144 self.create_flavor(name=flavor_name,
145 ram=self.ram, vcpus=self.vcpus,
146 disk=self.disk,
147 is_public="False")
148 # Verify flavor is not retrieved
149 flavors_list = self.admin_flavors_client.list_flavors(
lkuchlaneb829d42017-02-13 12:57:04 +0200150 detail=True)['flavors']
Jordan Pittierd5969792017-02-07 14:10:52 +0100151 self.assertNotIn(flavor_name, [f['name'] for f in flavors_list])
Sumanth Nagadavalli3d955d92013-08-13 15:16:30 +0530152
153 # Verify flavor is not retrieved with other user
Jordan Pittierd5969792017-02-07 14:10:52 +0100154 flavors_list = self.flavors_client.list_flavors(detail=True)['flavors']
155 self.assertNotIn(flavor_name, [f['name'] for f in flavors_list])
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +0530156
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -0800157 @decorators.idempotent_id('bcc418ef-799b-47cc-baa1-ce01368b8987')
Ken'ichi Ohmichi32b1e6c2013-09-06 12:07:07 +0900158 def test_create_server_with_non_public_flavor(self):
159 # Create a flavor with os-flavor-access:is_public false
zhufl36eeab02017-01-18 11:49:04 +0800160 flavor = self.create_flavor(ram=self.ram, vcpus=self.vcpus,
161 disk=self.disk,
162 is_public="False")
Ken'ichi Ohmichi32b1e6c2013-09-06 12:07:07 +0900163
164 # Verify flavor is not used by other user
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900165 self.assertRaises(lib_exc.BadRequest,
Ken'ichi Ohmichi32b1e6c2013-09-06 12:07:07 +0900166 self.os.servers_client.create_server,
Ken'ichi Ohmichif2d436e2015-09-03 01:13:16 +0000167 name='test', imageRef=self.image_ref,
168 flavorRef=flavor['id'])
Ken'ichi Ohmichi32b1e6c2013-09-06 12:07:07 +0900169
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -0800170 @decorators.idempotent_id('b345b196-bfbd-4231-8ac1-6d7fe15ff3a3')
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +0530171 def test_list_public_flavor_with_other_user(self):
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200172 # Create a Flavor with public access.
173 # Try to List/Get flavor with another user
Masayuki Igawa259c1132013-10-31 17:48:44 +0900174 flavor_name = data_utils.rand_name(self.flavor_name_prefix)
Chris Yeoh8abacf32013-01-21 17:08:32 +1030175
Matthew Treinishc795b9e2014-06-09 17:01:10 -0400176 # Create the flavor
Jordan Pittierd5969792017-02-07 14:10:52 +0100177 self.create_flavor(name=flavor_name,
178 ram=self.ram, vcpus=self.vcpus,
179 disk=self.disk,
180 is_public="True")
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200181 # Verify flavor is retrieved with new user
Jordan Pittierd5969792017-02-07 14:10:52 +0100182 flavors_list = self.flavors_client.list_flavors(detail=True)['flavors']
183 self.assertIn(flavor_name, [f['name'] for f in flavors_list])
rajalakshmi-ganesanf344cc32012-12-31 20:02:27 +0530184
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -0800185 @decorators.idempotent_id('fb9cbde6-3a0e-41f2-a983-bdb0a823c44e')
Tiago Mello0d835d22013-02-06 13:57:50 -0500186 def test_is_public_string_variations(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900187 flavor_name_not_public = data_utils.rand_name(self.flavor_name_prefix)
Masayuki Igawa259c1132013-10-31 17:48:44 +0900188 flavor_name_public = data_utils.rand_name(self.flavor_name_prefix)
Tiago Mello0d835d22013-02-06 13:57:50 -0500189
Attila Fazekas2883fd52013-03-10 12:05:21 +0100190 # Create a non public flavor
zhufl36eeab02017-01-18 11:49:04 +0800191 self.create_flavor(name=flavor_name_not_public,
192 ram=self.ram, vcpus=self.vcpus,
193 disk=self.disk,
194 is_public="False")
Tiago Mello0d835d22013-02-06 13:57:50 -0500195
Attila Fazekas2883fd52013-03-10 12:05:21 +0100196 # Create a public flavor
zhufl36eeab02017-01-18 11:49:04 +0800197 self.create_flavor(name=flavor_name_public,
198 ram=self.ram, vcpus=self.vcpus,
199 disk=self.disk,
200 is_public="True")
Tiago Mello0d835d22013-02-06 13:57:50 -0500201
Attila Fazekas2883fd52013-03-10 12:05:21 +0100202 def _test_string_variations(variations, flavor_name):
203 for string in variations:
204 params = {'is_public': string}
lkuchlaneb829d42017-02-13 12:57:04 +0200205 flavors = (self.admin_flavors_client.list_flavors(detail=True,
206 **params)
ghanshyam19973be2015-08-18 15:46:42 +0900207 ['flavors'])
Jordan Pittierd5969792017-02-07 14:10:52 +0100208 self.assertIn(flavor_name, [f['name'] for f in flavors])
Tiago Mello0d835d22013-02-06 13:57:50 -0500209
Attila Fazekas2883fd52013-03-10 12:05:21 +0100210 _test_string_variations(['f', 'false', 'no', '0'],
211 flavor_name_not_public)
Tiago Mello0d835d22013-02-06 13:57:50 -0500212
Attila Fazekas2883fd52013-03-10 12:05:21 +0100213 _test_string_variations(['t', 'true', 'yes', '1'],
214 flavor_name_public)
Tiago Mello0d835d22013-02-06 13:57:50 -0500215
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -0800216 @decorators.idempotent_id('3b541a2e-2ac2-4b42-8b8d-ba6e22fcd4da')
Zhi Kun Liu20f13222013-09-03 00:36:38 +0800217 def test_create_flavor_using_string_ram(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900218 new_flavor_id = data_utils.rand_int_id(start=1000)
Zhi Kun Liu20f13222013-09-03 00:36:38 +0800219
Ken'ichi Ohmichi2d2d4d92014-10-29 05:10:24 +0000220 ram = "1024"
zhufl36eeab02017-01-18 11:49:04 +0800221 flavor = self.create_flavor(ram=ram, vcpus=self.vcpus,
222 disk=self.disk,
223 id=new_flavor_id)
Zhi Kun Liu20f13222013-09-03 00:36:38 +0800224 self.assertEqual(flavor['ram'], int(ram))
225 self.assertEqual(int(flavor['id']), new_flavor_id)