blob: b2e52bb8bdc518440ef781b33cf0f75a65d719fb [file] [log] [blame]
Sylvain Baubeaufdd34592014-02-20 18:40:10 +01001# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
2#
Sylvain Baubeaufdd34592014-02-20 18:40:10 +01003# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
Matthew Treinish71426682015-04-23 11:19:38 -040015import six
Matthew Treinish01472ff2015-02-20 17:26:52 -050016
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010017from tempest.api.volume import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120018from tempest.common.utils import data_utils
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010019from tempest import test
20
21QUOTA_KEYS = ['gigabytes', 'snapshots', 'volumes']
22QUOTA_USAGE_KEYS = ['reserved', 'limit', 'in_use']
23
24
Chandan Kumardd23f632014-11-17 15:27:48 +053025class BaseVolumeQuotasAdminV2TestJSON(base.BaseVolumeAdminTest):
Matt Riedemann5349cfd2014-03-12 07:38:55 -070026 force_tenant_isolation = True
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010027
28 @classmethod
Rohan Kanade05749152015-01-30 17:15:18 +053029 def setup_credentials(cls):
30 super(BaseVolumeQuotasAdminV2TestJSON, cls).setup_credentials()
Andrea Frittolib21de6c2015-02-06 20:12:38 +000031 cls.demo_tenant_id = cls.os.credentials.tenant_id
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010032
Chris Hoge7579c1a2015-02-26 14:12:15 -080033 @test.idempotent_id('59eada70-403c-4cef-a2a3-a8ce2f1b07a0')
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010034 def test_list_quotas(self):
ghanshyam08a73f92015-08-31 17:32:49 +090035 quotas = (self.quotas_client.show_quota_set(self.demo_tenant_id)
36 ['quota_set'])
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010037 for key in QUOTA_KEYS:
38 self.assertIn(key, quotas)
39
Chris Hoge7579c1a2015-02-26 14:12:15 -080040 @test.idempotent_id('2be020a2-5fdd-423d-8d35-a7ffbc36e9f7')
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010041 def test_list_default_quotas(self):
Ken'ichi Ohmichi35798fb2015-04-06 01:22:41 +000042 quotas = self.quotas_client.show_default_quota_set(
ghanshyam08a73f92015-08-31 17:32:49 +090043 self.demo_tenant_id)['quota_set']
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010044 for key in QUOTA_KEYS:
45 self.assertIn(key, quotas)
46
Chris Hoge7579c1a2015-02-26 14:12:15 -080047 @test.idempotent_id('3d45c99e-cc42-4424-a56e-5cbd212b63a6')
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010048 def test_update_all_quota_resources_for_tenant(self):
49 # Admin can update all the resource quota limits for a tenant
Ken'ichi Ohmichi35798fb2015-04-06 01:22:41 +000050 default_quota_set = self.quotas_client.show_default_quota_set(
ghanshyam08a73f92015-08-31 17:32:49 +090051 self.demo_tenant_id)['quota_set']
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010052 new_quota_set = {'gigabytes': 1009,
53 'volumes': 11,
54 'snapshots': 11}
55
56 # Update limits for all quota resources
Joseph Lanoux6809bab2014-12-18 14:57:18 +000057 quota_set = self.quotas_client.update_quota_set(
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010058 self.demo_tenant_id,
ghanshyam08a73f92015-08-31 17:32:49 +090059 **new_quota_set)['quota_set']
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010060
Cory Stone2cb18262014-03-19 14:14:03 -050061 cleanup_quota_set = dict(
Matthew Treinish71426682015-04-23 11:19:38 -040062 (k, v) for k, v in six.iteritems(default_quota_set)
Cory Stone2cb18262014-03-19 14:14:03 -050063 if k in QUOTA_KEYS)
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010064 self.addCleanup(self.quotas_client.update_quota_set,
Cory Stone2cb18262014-03-19 14:14:03 -050065 self.demo_tenant_id, **cleanup_quota_set)
Sean Dague27a8c562014-03-19 07:46:42 -040066 # test that the specific values we set are actually in
67 # the final result. There is nothing here that ensures there
68 # would be no other values in there.
69 self.assertDictContainsSubset(new_quota_set, quota_set)
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010070
Chris Hoge7579c1a2015-02-26 14:12:15 -080071 @test.idempotent_id('18c51ae9-cb03-48fc-b234-14a19374dbed')
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010072 def test_show_quota_usage(self):
Ken'ichi Ohmichi35798fb2015-04-06 01:22:41 +000073 quota_usage = self.quotas_client.show_quota_usage(
ghanshyam08a73f92015-08-31 17:32:49 +090074 self.os_adm.credentials.tenant_id)['quota_set']
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010075 for key in QUOTA_KEYS:
76 self.assertIn(key, quota_usage)
77 for usage_key in QUOTA_USAGE_KEYS:
78 self.assertIn(usage_key, quota_usage[key])
79
Chris Hoge7579c1a2015-02-26 14:12:15 -080080 @test.idempotent_id('ae8b6091-48ad-4bfa-a188-bbf5cc02115f')
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010081 def test_quota_usage(self):
Ken'ichi Ohmichi35798fb2015-04-06 01:22:41 +000082 quota_usage = self.quotas_client.show_quota_usage(
ghanshyam08a73f92015-08-31 17:32:49 +090083 self.demo_tenant_id)['quota_set']
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010084
Markus Zoeller3d2a21c2015-02-27 12:04:22 +010085 volume = self.create_volume()
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010086 self.addCleanup(self.admin_volume_client.delete_volume,
87 volume['id'])
88
Ken'ichi Ohmichi35798fb2015-04-06 01:22:41 +000089 new_quota_usage = self.quotas_client.show_quota_usage(
ghanshyam08a73f92015-08-31 17:32:49 +090090 self.demo_tenant_id)['quota_set']
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010091
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010092 self.assertEqual(quota_usage['volumes']['in_use'] + 1,
93 new_quota_usage['volumes']['in_use'])
94
Markus Zoeller56cb97c2015-03-10 16:06:34 +010095 self.assertEqual(quota_usage['gigabytes']['in_use'] +
96 volume["size"],
Sylvain Baubeaufdd34592014-02-20 18:40:10 +010097 new_quota_usage['gigabytes']['in_use'])
98
Chris Hoge7579c1a2015-02-26 14:12:15 -080099 @test.idempotent_id('874b35a9-51f1-4258-bec5-cd561b6690d3')
nayna-patel3d59e4a2014-04-24 14:28:38 +0000100 def test_delete_quota(self):
Jamie Lennox15350172015-08-17 10:54:25 +1000101 # Admin can delete the resource quota set for a project
102 project_name = data_utils.rand_name('quota_tenant')
103 description = data_utils.rand_name('desc_')
104 project = self.identity_utils.create_project(project_name,
105 description=description)
106 project_id = project['id']
107 self.addCleanup(self.identity_utils.delete_project, project_id)
Ken'ichi Ohmichi35798fb2015-04-06 01:22:41 +0000108 quota_set_default = self.quotas_client.show_default_quota_set(
Jamie Lennox15350172015-08-17 10:54:25 +1000109 project_id)['quota_set']
nayna-patel3d59e4a2014-04-24 14:28:38 +0000110 volume_default = quota_set_default['volumes']
111
Jamie Lennox15350172015-08-17 10:54:25 +1000112 self.quotas_client.update_quota_set(project_id,
nayna-patel3d59e4a2014-04-24 14:28:38 +0000113 volumes=(int(volume_default) + 5))
114
Jamie Lennox15350172015-08-17 10:54:25 +1000115 self.quotas_client.delete_quota_set(project_id)
116 quota_set_new = (self.quotas_client.show_quota_set(project_id)
ghanshyam08a73f92015-08-31 17:32:49 +0900117 ['quota_set'])
nayna-patel3d59e4a2014-04-24 14:28:38 +0000118 self.assertEqual(volume_default, quota_set_new['volumes'])
Chandan Kumardd23f632014-11-17 15:27:48 +0530119
120
121class VolumeQuotasAdminV1TestJSON(BaseVolumeQuotasAdminV2TestJSON):
122 _api_version = 1