kingbird/kingbird/tests/tempest/scenario/quota_management/client_tests/test_kingbird_api.py

144 lines
6.4 KiB
Python

# Copyright 2016 Ericsson AB
# 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 kingbird.tests.tempest.scenario.quota_management. \
client_tests import base
from tempest import config
import novaclient
CONF = config.CONF
DEFAULT_QUOTAS = base.DEFAULT_QUOTAS
class KingbirdTestJSON(base.BaseKingbirdTest):
@classmethod
def setup_clients(self):
super(KingbirdTestJSON, self).setup_clients()
def tearDown(self):
super(KingbirdTestJSON, self).tearDown()
@classmethod
def resource_setup(self):
super(KingbirdTestJSON, self).resource_setup()
self.PROJECT_ID = self.resource_ids["project_id"]
def test_kingbird_put_method(self):
new_quota = {"quota_set": {"instances": 15, "cores": 10}}
actual_value = self.create_custom_kingbird_quota(self.PROJECT_ID,
new_quota)
expected_value = {self.PROJECT_ID: new_quota["quota_set"]}
self.assertEqual(expected_value, eval(actual_value))
def test_kingbird_get_method(self):
new_quota = {"quota_set": {"instances": 15, "cores": 10}}
self.create_custom_kingbird_quota(self.PROJECT_ID,
new_quota)
actual_value = self.get_custom_kingbird_quota(self.PROJECT_ID)
new_quota["quota_set"].update({'project_id': self.PROJECT_ID})
self.assertEqual(new_quota, eval(actual_value))
def test_kingbird_delete_method(self):
new_quota = {"quota_set": {"instances": 15, "cores": 10}}
quota_to_delete = {"quota_set": ["cores"]}
self.create_custom_kingbird_quota(self.PROJECT_ID,
new_quota)
self.delete_custom_kingbird_quota(self.PROJECT_ID,
quota_to_delete)
quota_after_delete = eval(self.get_custom_kingbird_quota(
self.PROJECT_ID))
self.assertNotIn("cores", quota_after_delete["quota_set"])
def test_kingbird_delete_all_method(self):
new_quota = {"quota_set": {"instances": 15, "cores": 10}}
self.create_custom_kingbird_quota(self.PROJECT_ID,
new_quota)
self.delete_custom_kingbird_quota(self.PROJECT_ID)
actual_quota_after_delete = eval(self.get_custom_kingbird_quota(
self.PROJECT_ID))
expected_quota_after_delete = {"quota_set":
{"project_id": self.PROJECT_ID}}
self.assertEqual(expected_quota_after_delete,
actual_quota_after_delete)
def test_kingbird_get_default_method_after_update(self):
new_quota = {"quota_set": {"instances": 15, "cores": 10}}
self.create_custom_kingbird_quota(self.PROJECT_ID,
new_quota)
actual_value = self.get_default_kingbird_quota()
self.assertEqual(eval(actual_value), DEFAULT_QUOTAS)
self.delete_custom_kingbird_quota(self.PROJECT_ID)
def test_get_quota_usage_for_project(self):
self.create_instance(count=1)
actual_usage = self.get_quota_usage_for_project(self.PROJECT_ID)
expected_usage = self.get_usage_manually(self.PROJECT_ID)
self.assertEqual(eval(actual_usage)["quota_set"]["ram"],
expected_usage["quota_set"]["ram"])
self.assertEqual(eval(actual_usage)["quota_set"]["cores"],
expected_usage["quota_set"]["cores"])
self.assertEqual(eval(actual_usage)["quota_set"]["instances"],
expected_usage["quota_set"]["instances"])
self.delete_instance()
def test_kingbird_put_method_wrong_token(self):
new_quota = {"quota_set": {"instances": 15, "cores": 10}}
response = self.create_custom_kingbird_quota_wrong_token(
self.PROJECT_ID, new_quota)
self.assertEqual(response.status_code, 401)
self.assertEqual(response.text, u'Authentication required')
def test_kingbird_get_default_method_after_delete(self):
new_quota = {"quota_set": {"instances": 15, "cores": 10}}
self.create_custom_kingbird_quota(self.PROJECT_ID,
new_quota)
self.delete_custom_kingbird_quota(self.PROJECT_ID)
actual_value = self.get_default_kingbird_quota()
self.assertEqual(eval(actual_value), DEFAULT_QUOTAS)
self.delete_custom_kingbird_quota(self.PROJECT_ID)
def test_quota_sync_for_project(self):
# Delete custom quota if there are any for this project
self.delete_custom_kingbird_quota(self.PROJECT_ID)
self.create_instance()
sync_status = self.quota_sync_for_project(self.PROJECT_ID)
expected_status = u"triggered quota sync for " + self.PROJECT_ID
calculated_limits = self.calculate_quota_limits(self.PROJECT_ID)
self.wait_sometime_for_sync()
actual_limits = self.get_actual_limits(self.PROJECT_ID)
self.assertEqual(calculated_limits, actual_limits)
self.assertEqual(eval(sync_status), expected_status)
self.delete_instance()
def test_quota_exceed_after_sync(self):
new_quota = {"quota_set": {"instances": 2}}
self.create_custom_kingbird_quota(self.PROJECT_ID,
new_quota)
self.quota_sync_for_project(self.PROJECT_ID)
self.wait_sometime_for_sync()
try:
self.create_instance(count=3)
except Exception as exp:
self.assertIsInstance(exp, novaclient.exceptions.Forbidden)
message = exp.message
self.assertIn(u"Quota exceeded for instances", message)
self.delete_instance()
default_quota = {'instances': DEFAULT_QUOTAS['quota_set']['instances'],
'cores': DEFAULT_QUOTAS['quota_set']['cores'],
'ram': DEFAULT_QUOTAS['quota_set']['ram']}
self.set_default_quota(self.PROJECT_ID, default_quota)