
In the interest of smaller CRs, this CR partially implements the quota support blueprint. It includes code model and repository used to store project quota information. Unit and functional tests are also provided to verify the implementation. This CR also cover some small design changes, such as: the new defaults is for unlimited quotas for all resources. Implements: blueprint quota-support-on-barbican-resources Change-Id: Ief79dd36fd35528c9d8586d77e01d1f9ad723f4d
135 lines
5.5 KiB
Python
135 lines
5.5 KiB
Python
"""
|
|
Copyright 2015 Cisco Systems
|
|
|
|
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 functionaltests.api.v1.behaviors import base_behaviors
|
|
from functionaltests.api.v1.models import quota_models
|
|
|
|
|
|
class QuotaBehaviors(base_behaviors.BaseBehaviors):
|
|
|
|
def get_quotas(self, extra_headers=None,
|
|
use_auth=True, user_name=None):
|
|
"""Handles getting quotas
|
|
|
|
:param extra_headers: extra HTTP headers for the REST request
|
|
:param use_auth: Boolean for whether to send authentication headers
|
|
:param user_name: The user name used for REST command
|
|
:return: a request Response object
|
|
"""
|
|
resp = self.client.get(
|
|
'quotas', response_model_type=quota_models.QuotasResponseModel,
|
|
extra_headers=extra_headers,
|
|
use_auth=use_auth, user_name=user_name)
|
|
return resp
|
|
|
|
def get_project_quotas_list(self, limit=10, offset=0, extra_headers=None,
|
|
use_auth=True, user_name=None):
|
|
"""Handles getting project quotas
|
|
|
|
:param limit: limits number of returned orders (default 10)
|
|
:param offset: represents how many records to skip before retrieving
|
|
the list (default 0)
|
|
:param extra_headers: extra HTTP headers for the REST request
|
|
:param use_auth: Boolean for whether to send authentication headers
|
|
:param user_name: The user name used for REST command
|
|
:return: the response, a list of project quotas and the next/prev refs
|
|
"""
|
|
params = {'limit': limit, 'offset': offset}
|
|
resp = self.client.get(
|
|
'project-quotas',
|
|
response_model_type=quota_models.ProjectQuotaListModel,
|
|
params=params,
|
|
extra_headers=extra_headers,
|
|
use_auth=use_auth, user_name=user_name)
|
|
|
|
# handle expected JSON parsing errors for unauthenticated requests
|
|
if resp.status_code == 401 and not use_auth:
|
|
return resp, None, None, None
|
|
|
|
project_quotas_list = self.get_json(resp)
|
|
project_quotas, next_ref, prev_ref = self.client.get_list_of_models(
|
|
project_quotas_list, quota_models.ProjectQuotaListItemModel)
|
|
|
|
return resp, project_quotas, next_ref, prev_ref
|
|
|
|
def get_project_quotas(self, project_id, extra_headers=None,
|
|
use_auth=True, user_name=None):
|
|
"""Handles getting project quotas
|
|
|
|
:param extra_headers: extra HTTP headers for the REST request
|
|
:param use_auth: Boolean for whether to send authentication headers
|
|
:param user_name: The user name used for REST command
|
|
:return: a request Response object
|
|
"""
|
|
resp = self.client.get(
|
|
'project-quotas/' + project_id,
|
|
response_model_type=quota_models.ProjectQuotaOneModel,
|
|
extra_headers=extra_headers,
|
|
use_auth=use_auth, user_name=user_name)
|
|
|
|
# handle expected JSON parsing errors for unauthenticated requests
|
|
if resp.status_code == 401 and not use_auth:
|
|
return resp, None, None, None
|
|
|
|
return resp
|
|
|
|
def set_project_quotas(self, project_id, request_model, extra_headers=None,
|
|
use_auth=True, user_name=None):
|
|
"""Handles setting project quotas
|
|
|
|
:param project_id: id of project whose quotas are to be set
|
|
:param extra_headers: extra HTTP headers for the REST request
|
|
:param use_auth: Boolean for whether to send authentication headers
|
|
:param user_name: The user name used for REST command
|
|
:return: a request Response object
|
|
"""
|
|
resp = self.client.put(
|
|
'project-quotas/' + project_id,
|
|
request_model=request_model,
|
|
extra_headers=extra_headers,
|
|
use_auth=use_auth, user_name=user_name)
|
|
|
|
self.created_entities.append((project_id, user_name))
|
|
|
|
return resp
|
|
|
|
def delete_project_quotas(self, project_id, extra_headers=None,
|
|
expected_fail=False,
|
|
use_auth=True, user_name=None):
|
|
"""Handles deleting project quotas
|
|
|
|
:param project_id: id of project whose quotas are to be deleted
|
|
:param extra_headers: extra HTTP headers for the REST request
|
|
:param use_auth: Boolean for whether to send authentication headers
|
|
:param user_name: The user name used for REST command
|
|
:return: a request Response object
|
|
"""
|
|
resp = self.client.delete('project-quotas/' + project_id,
|
|
extra_headers=extra_headers,
|
|
use_auth=use_auth, user_name=user_name)
|
|
|
|
if not expected_fail:
|
|
for item in self.created_entities:
|
|
if item[0] == project_id:
|
|
self.created_entities.remove(item)
|
|
|
|
return resp
|
|
|
|
def delete_all_created_quotas(self):
|
|
"""Delete all of the project_quotas that we have created."""
|
|
entities = list(self.created_entities)
|
|
for (acl_ref, user_name) in entities:
|
|
self.delete_project_quotas(acl_ref, user_name=user_name)
|