diff options
author | Tuan Nguyen <tuan@us.ibm.com> | 2015-09-29 12:34:59 -0400 |
---|---|---|
committer | Tuan Nguyen <tuan@us.ibm.com> | 2015-10-02 08:59:08 -0400 |
commit | 410a8d8daf3934c715b3567aeadc25fc37435b4e (patch) | |
tree | bd04278c22aaf119a0c3504e52d4faed6be3a27f | |
parent | 6757c130b97974754b4a18518ee7598920ce1f8b (diff) | |
download | tempest-lib-410a8d8daf3934c715b3567aeadc25fc37435b4e.tar.gz |
Migrated quotas_client.py from tempest
This migrates the above files from tempest. This includes tempest commits:
* quotas_client.py: Idd8afb1bcfc1b0165b1e967a991d4705ff182249
* test_quotas_client.py: I3ad6761651cec5e66012d08e6b63322f53286a5c
* quotas.py: Ica929c402a3d042ae751302384e68853eb28b405
to see the commit history for these files refer to the above Change-Ids in the tempest repository
Partially implements blueprint migrate-service-clients-to-tempest-lib
Change-Id: Ib0fcb82ce09ea68d9899836264e8037ac977347b
-rw-r--r-- | tempest_lib/api_schema/response/compute/v2_1/quotas.py | 65 | ||||
-rw-r--r-- | tempest_lib/services/compute/quotas_client.py | 64 | ||||
-rw-r--r-- | tempest_lib/tests/services/compute/test_quotas_client.py | 92 |
3 files changed, 221 insertions, 0 deletions
diff --git a/tempest_lib/api_schema/response/compute/v2_1/quotas.py b/tempest_lib/api_schema/response/compute/v2_1/quotas.py new file mode 100644 index 0000000..7953983 --- /dev/null +++ b/tempest_lib/api_schema/response/compute/v2_1/quotas.py @@ -0,0 +1,65 @@ +# Copyright 2014 NEC Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import copy + +update_quota_set = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'quota_set': { + 'type': 'object', + 'properties': { + 'instances': {'type': 'integer'}, + 'cores': {'type': 'integer'}, + 'ram': {'type': 'integer'}, + 'floating_ips': {'type': 'integer'}, + 'fixed_ips': {'type': 'integer'}, + 'metadata_items': {'type': 'integer'}, + 'key_pairs': {'type': 'integer'}, + 'security_groups': {'type': 'integer'}, + 'security_group_rules': {'type': 'integer'}, + 'server_group_members': {'type': 'integer'}, + 'server_groups': {'type': 'integer'}, + 'injected_files': {'type': 'integer'}, + 'injected_file_content_bytes': {'type': 'integer'}, + 'injected_file_path_bytes': {'type': 'integer'} + }, + 'additionalProperties': False, + # NOTE: server_group_members and server_groups are represented + # when enabling quota_server_group extension. So they should + # not be required. + 'required': ['instances', 'cores', 'ram', + 'floating_ips', 'fixed_ips', + 'metadata_items', 'key_pairs', + 'security_groups', 'security_group_rules', + 'injected_files', 'injected_file_content_bytes', + 'injected_file_path_bytes'] + } + }, + 'additionalProperties': False, + 'required': ['quota_set'] + } +} + +get_quota_set = copy.deepcopy(update_quota_set) +get_quota_set['response_body']['properties']['quota_set']['properties'][ + 'id'] = {'type': 'string'} +get_quota_set['response_body']['properties']['quota_set']['required'].extend([ + 'id']) + +delete_quota = { + 'status_code': [202] +} diff --git a/tempest_lib/services/compute/quotas_client.py b/tempest_lib/services/compute/quotas_client.py new file mode 100644 index 0000000..b74e1f2 --- /dev/null +++ b/tempest_lib/services/compute/quotas_client.py @@ -0,0 +1,64 @@ +# Copyright 2012 NTT Data +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_serialization import jsonutils as json + +from tempest_lib.api_schema.response.compute.v2_1 import quotas as schema +from tempest_lib.common import rest_client + + +class QuotasClient(rest_client.RestClient): + + def show_quota_set(self, tenant_id, user_id=None): + """List the quota set for a tenant.""" + + url = 'os-quota-sets/%s' % tenant_id + if user_id: + url += '?user_id=%s' % user_id + resp, body = self.get(url) + body = json.loads(body) + self.validate_response(schema.get_quota_set, resp, body) + return rest_client.ResponseBody(resp, body) + + def show_default_quota_set(self, tenant_id): + """List the default quota set for a tenant.""" + + url = 'os-quota-sets/%s/defaults' % tenant_id + resp, body = self.get(url) + body = json.loads(body) + self.validate_response(schema.get_quota_set, resp, body) + return rest_client.ResponseBody(resp, body) + + def update_quota_set(self, tenant_id, user_id=None, **kwargs): + """Updates the tenant's quota limits for one or more resources""" + + post_body = json.dumps({'quota_set': kwargs}) + + if user_id: + resp, body = self.put('os-quota-sets/%s?user_id=%s' % + (tenant_id, user_id), post_body) + else: + resp, body = self.put('os-quota-sets/%s' % tenant_id, + post_body) + + body = json.loads(body) + self.validate_response(schema.update_quota_set, resp, body) + return rest_client.ResponseBody(resp, body) + + def delete_quota_set(self, tenant_id): + """Delete the tenant's quota set.""" + resp, body = self.delete('os-quota-sets/%s' % tenant_id) + self.validate_response(schema.delete_quota, resp, body) + return rest_client.ResponseBody(resp, body) diff --git a/tempest_lib/tests/services/compute/test_quotas_client.py b/tempest_lib/tests/services/compute/test_quotas_client.py new file mode 100644 index 0000000..a5a6a2a --- /dev/null +++ b/tempest_lib/tests/services/compute/test_quotas_client.py @@ -0,0 +1,92 @@ +# Copyright 2015 NEC Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import copy + +from tempest_lib.services.compute import quotas_client +from tempest_lib.tests import fake_auth_provider +from tempest_lib.tests.services.compute import base + + +class TestQuotasClient(base.BaseComputeServiceTest): + + FAKE_QUOTA_SET = { + "quota_set": { + "injected_file_content_bytes": 10240, + "metadata_items": 128, + "server_group_members": 10, + "server_groups": 10, + "ram": 51200, + "floating_ips": 10, + "key_pairs": 100, + "id": "8421f7be61064f50b680465c07f334af", + "instances": 10, + "security_group_rules": 20, + "injected_files": 5, + "cores": 20, + "fixed_ips": -1, + "injected_file_path_bytes": 255, + "security_groups": 10} + } + + project_id = "8421f7be61064f50b680465c07f334af" + + def setUp(self): + super(TestQuotasClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = quotas_client.QuotasClient( + fake_auth, 'compute', 'regionOne') + + def _test_show_quota_set(self, bytes_body=False): + self.check_service_client_function( + self.client.show_quota_set, + 'tempest_lib.common.rest_client.RestClient.get', + self.FAKE_QUOTA_SET, + to_utf=bytes_body, + tenant_id=self.project_id) + + def test_show_quota_set_with_str_body(self): + self._test_show_quota_set() + + def test_show_quota_set_with_bytes_body(self): + self._test_show_quota_set(bytes_body=True) + + def _test_show_default_quota_set(self, bytes_body=False): + self.check_service_client_function( + self.client.show_default_quota_set, + 'tempest_lib.common.rest_client.RestClient.get', + self.FAKE_QUOTA_SET, + to_utf=bytes_body, + tenant_id=self.project_id) + + def test_show_default_quota_set_with_str_body(self): + self._test_show_quota_set() + + def test_show_default_quota_set_with_bytes_body(self): + self._test_show_quota_set(bytes_body=True) + + def test_update_quota_set(self): + fake_quota_set = copy.deepcopy(self.FAKE_QUOTA_SET) + fake_quota_set['quota_set'].pop("id") + self.check_service_client_function( + self.client.update_quota_set, + 'tempest_lib.common.rest_client.RestClient.put', + fake_quota_set, + tenant_id=self.project_id) + + def test_delete_quota_set(self): + self.check_service_client_function( + self.client.delete_quota_set, + 'tempest_lib.common.rest_client.RestClient.delete', + {}, status=202, tenant_id=self.project_id) |