blob: 7f4ea2d157b0f437e00eae7cdc0da20b398c5ff8 [file] [log] [blame]
ivan-zhub6d69ee2013-12-17 14:16:31 +08001# Copyright 2013 OpenStack Foundation
ivan-zhu24358182013-11-27 15:08:06 +08002# 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
16from tempest.api.compute import base
17from tempest.common.utils import data_utils
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000018from tempest import config
ivan-zhub6d69ee2013-12-17 14:16:31 +080019from tempest import test
Sean Dague86bd8422013-12-20 09:56:44 -050020
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000021CONF = config.CONF
22
ivan-zhu24358182013-11-27 15:08:06 +080023
Ken'ichi Ohmichi7f508ed2014-01-30 22:35:20 +090024class QuotasAdminV3Test(base.BaseV3ComputeAdminTest):
ivan-zhu24358182013-11-27 15:08:06 +080025 _interface = 'json'
26 force_tenant_isolation = True
27
28 @classmethod
29 def setUpClass(cls):
Ken'ichi Ohmichi7f508ed2014-01-30 22:35:20 +090030 super(QuotasAdminV3Test, cls).setUpClass()
ivan-zhub6d69ee2013-12-17 14:16:31 +080031 cls.client = cls.quotas_client
32 cls.adm_client = cls.quotas_admin_client
ivan-zhu24358182013-11-27 15:08:06 +080033
34 # NOTE(afazekas): these test cases should always create and use a new
35 # tenant most of them should be skipped if we can't do that
36 cls.demo_tenant_id = cls.isolated_creds.get_primary_user().get(
37 'tenantId')
38
ivan-zhub6d69ee2013-12-17 14:16:31 +080039 cls.default_quota_set = set(('metadata_items',
ivan-zhu24358182013-11-27 15:08:06 +080040 'ram', 'floating_ips',
41 'fixed_ips', 'key_pairs',
ivan-zhu24358182013-11-27 15:08:06 +080042 'instances', 'security_group_rules',
43 'cores', 'security_groups'))
44
ivan-zhub6d69ee2013-12-17 14:16:31 +080045 @test.attr(type='smoke')
ivan-zhu24358182013-11-27 15:08:06 +080046 def test_get_default_quotas(self):
47 # Admin can get the default resource quota set for a tenant
48 expected_quota_set = self.default_quota_set | set(['id'])
Zhi Kun Liu50eb71c2014-02-19 15:08:45 +080049 resp, quota_set = self.adm_client.get_default_quota_set(
ivan-zhu24358182013-11-27 15:08:06 +080050 self.demo_tenant_id)
51 self.assertEqual(200, resp.status)
52 self.assertEqual(sorted(expected_quota_set),
53 sorted(quota_set.keys()))
54 self.assertEqual(quota_set['id'], self.demo_tenant_id)
55
Ken'ichi Ohmichi776cda62014-02-18 21:21:23 +090056 @test.attr(type='smoke')
57 def test_get_quota_set_detail(self):
58 # Admin can get the detail of resource quota set for a tenant
59 expected_quota_set = self.default_quota_set | set(['id'])
60 expected_detail = {'reserved', 'limit', 'in_use'}
61 resp, quota_set = self.adm_client.get_quota_set_detail(
62 self.demo_tenant_id)
63 self.assertEqual(200, resp.status)
64 self.assertEqual(sorted(expected_quota_set), sorted(quota_set.keys()))
65 self.assertEqual(quota_set['id'], self.demo_tenant_id)
66 for quota in quota_set:
67 if quota == 'id':
68 continue
69 self.assertEqual(sorted(expected_detail),
70 sorted(quota_set[quota].keys()))
71
ivan-zhub6d69ee2013-12-17 14:16:31 +080072 @test.attr(type='gate')
ivan-zhu24358182013-11-27 15:08:06 +080073 def test_update_all_quota_resources_for_tenant(self):
74 # Admin can update all the resource quota limits for a tenant
Zhi Kun Liu50eb71c2014-02-19 15:08:45 +080075 resp, default_quota_set = self.adm_client.get_default_quota_set(
ivan-zhu24358182013-11-27 15:08:06 +080076 self.demo_tenant_id)
ivan-zhub6d69ee2013-12-17 14:16:31 +080077 new_quota_set = {'metadata_items': 256,
ivan-zhu24358182013-11-27 15:08:06 +080078 'ram': 10240, 'floating_ips': 20, 'fixed_ips': 10,
ivan-zhub6d69ee2013-12-17 14:16:31 +080079 'key_pairs': 200,
ivan-zhu24358182013-11-27 15:08:06 +080080 'instances': 20, 'security_group_rules': 20,
81 'cores': 2, 'security_groups': 20}
82 # Update limits for all quota resources
83 resp, quota_set = self.adm_client.update_quota_set(
84 self.demo_tenant_id,
85 force=True,
86 **new_quota_set)
87
88 default_quota_set.pop('id')
89 self.addCleanup(self.adm_client.update_quota_set,
90 self.demo_tenant_id, **default_quota_set)
91 self.assertEqual(200, resp.status)
ivan-zhub6d69ee2013-12-17 14:16:31 +080092 quota_set.pop('id')
ivan-zhu24358182013-11-27 15:08:06 +080093 self.assertEqual(new_quota_set, quota_set)
94
95 # TODO(afazekas): merge these test cases
ivan-zhub6d69ee2013-12-17 14:16:31 +080096 @test.attr(type='gate')
ivan-zhu24358182013-11-27 15:08:06 +080097 def test_get_updated_quotas(self):
98 # Verify that GET shows the updated quota set
99 tenant_name = data_utils.rand_name('cpu_quota_tenant_')
100 tenant_desc = tenant_name + '-desc'
101 identity_client = self.os_adm.identity_client
102 _, tenant = identity_client.create_tenant(name=tenant_name,
103 description=tenant_desc)
104 tenant_id = tenant['id']
105 self.addCleanup(identity_client.delete_tenant,
106 tenant_id)
107
108 self.adm_client.update_quota_set(tenant_id,
109 ram='5120')
110 resp, quota_set = self.adm_client.get_quota_set(tenant_id)
111 self.assertEqual(200, resp.status)
112 self.assertEqual(quota_set['ram'], 5120)
Yuiko Takadad4f86522014-02-27 10:46:50 +0000113
114 @test.attr(type='gate')
115 def test_delete_quota(self):
116 # Admin can delete the resource quota set for a tenant
117 tenant_name = data_utils.rand_name('cpu_quota_tenant_')
118 tenant_desc = tenant_name + '-desc'
119 identity_client = self.os_adm.identity_client
120 _, tenant = identity_client.create_tenant(name=tenant_name,
121 description=tenant_desc)
122 tenant_id = tenant['id']
123 self.addCleanup(identity_client.delete_tenant, tenant_id)
124 resp, quota_set_default = self.adm_client.get_quota_set(tenant_id)
125 self.assertEqual(200, resp.status)
126 ram_default = quota_set_default['ram']
127
128 self.adm_client.update_quota_set(tenant_id, ram='5120')
129 self.assertEqual(200, resp.status)
130 resp, _ = self.adm_client.delete_quota_set(tenant_id)
131 self.assertEqual(204, resp.status)
132
133 resp, quota_set_new = self.adm_client.get_quota_set(tenant_id)
134 self.assertEqual(200, resp.status)
135 self.assertEqual(ram_default, quota_set_new['ram'])