Merge "quota: remove QuotaEngine.register_resources()"

This commit is contained in:
Zuul 2019-02-25 20:04:09 +00:00 committed by Gerrit Code Review
commit 7524a21527
2 changed files with 63 additions and 77 deletions

View File

@ -871,9 +871,18 @@ class CountableResource(AbsoluteResource):
class QuotaEngine(object):
"""Represent the set of recognized quotas."""
def __init__(self, quota_driver=None):
"""Initialize a Quota object."""
self._resources = {}
def __init__(self, quota_driver=None, resources=None):
"""Initialize a Quota object.
:param quota_driver: a QuotaDriver object (only used in testing. if
None (default), instantiates a driver from the
CONF.quota.driver option)
:param resources: iterable of Resource objects
"""
resources = resources or []
self._resources = {
resource.name: resource for resource in resources
}
# NOTE(mriedem): quota_driver is ever only supplied in tests with a
# fake driver.
self.__driver = quota_driver
@ -890,12 +899,6 @@ class QuotaEngine(object):
self._resources[resource.name] = resource
def register_resources(self, resources):
"""Register a list of resources."""
for resource in resources:
self.register_resource(resource)
def get_defaults(self, context):
"""Retrieve the default quotas.
@ -1217,36 +1220,40 @@ def _security_group_rule_count_by_group(context, security_group_id):
return {'user': {'security_group_rules': count}}
QUOTAS = QuotaEngine()
resources = [
CountableResource('instances', _instances_cores_ram_count, 'instances'),
CountableResource('cores', _instances_cores_ram_count, 'cores'),
CountableResource('ram', _instances_cores_ram_count, 'ram'),
CountableResource('security_groups', _security_group_count,
'security_groups'),
CountableResource('fixed_ips', _fixed_ip_count, 'fixed_ips'),
CountableResource('floating_ips', _floating_ip_count,
'floating_ips'),
AbsoluteResource('metadata_items', 'metadata_items'),
AbsoluteResource('injected_files', 'injected_files'),
AbsoluteResource('injected_file_content_bytes',
'injected_file_content_bytes'),
AbsoluteResource('injected_file_path_bytes',
'injected_file_path_length'),
CountableResource('security_group_rules',
_security_group_rule_count_by_group,
'security_group_rules'),
CountableResource('key_pairs', _keypair_get_count_by_user, 'key_pairs'),
CountableResource('server_groups', _server_group_count, 'server_groups'),
CountableResource('server_group_members',
_server_group_count_members_by_user,
'server_group_members'),
]
QUOTAS.register_resources(resources)
QUOTAS = QuotaEngine(
resources=[
CountableResource(
'instances', _instances_cores_ram_count, 'instances'),
CountableResource(
'cores', _instances_cores_ram_count, 'cores'),
CountableResource(
'ram', _instances_cores_ram_count, 'ram'),
CountableResource(
'security_groups', _security_group_count, 'security_groups'),
CountableResource(
'fixed_ips', _fixed_ip_count, 'fixed_ips'),
CountableResource(
'floating_ips', _floating_ip_count, 'floating_ips'),
AbsoluteResource(
'metadata_items', 'metadata_items'),
AbsoluteResource(
'injected_files', 'injected_files'),
AbsoluteResource(
'injected_file_content_bytes', 'injected_file_content_bytes'),
AbsoluteResource(
'injected_file_path_bytes', 'injected_file_path_length'),
CountableResource(
'security_group_rules', _security_group_rule_count_by_group,
'security_group_rules'),
CountableResource(
'key_pairs', _keypair_get_count_by_user, 'key_pairs'),
CountableResource(
'server_groups', _server_group_count, 'server_groups'),
CountableResource(
'server_group_members', _server_group_count_members_by_user,
'server_group_members'),
],
)
def _valid_method_call_check_resource(name, method, resources):

View File

@ -393,14 +393,10 @@ class BaseResourceTestCase(test.TestCase):
class QuotaEngineTestCase(test.TestCase):
def test_init(self):
quota_obj = quota.QuotaEngine()
self.assertEqual(quota_obj._resources, {})
self.assertIsInstance(quota_obj._driver, quota.DbQuotaDriver)
def test_init_override_obj(self):
quota_obj = quota.QuotaEngine(quota_driver=FakeDriver)
self.assertEqual(quota_obj._resources, {})
self.assertEqual(quota_obj._driver, FakeDriver)
def test_register_resource(self):
@ -410,37 +406,19 @@ class QuotaEngineTestCase(test.TestCase):
self.assertEqual(quota_obj._resources, dict(test_resource=resource))
def test_register_resources(self):
quota_obj = quota.QuotaEngine()
resources = [
quota.AbsoluteResource('test_resource1'),
quota.AbsoluteResource('test_resource2'),
quota.AbsoluteResource('test_resource3'),
]
quota_obj.register_resources(resources)
self.assertEqual(quota_obj._resources, dict(
test_resource1=resources[0],
test_resource2=resources[1],
test_resource3=resources[2],
))
def _make_quota_obj(self, driver):
quota_obj = quota.QuotaEngine(quota_driver=driver)
resources = [
def _get_quota_engine(self, driver, resources=None):
resources = resources or [
quota.AbsoluteResource('test_resource4'),
quota.AbsoluteResource('test_resource3'),
quota.AbsoluteResource('test_resource2'),
quota.AbsoluteResource('test_resource1'),
]
quota_obj.register_resources(resources)
return quota_obj
]
return quota.QuotaEngine(quota_driver=driver, resources=resources)
def test_get_defaults(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result = quota_obj.get_defaults(context)
self.assertEqual(driver.called, [
@ -451,7 +429,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_get_class_quotas(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result1 = quota_obj.get_class_quotas(context, 'test_class')
self.assertEqual(driver.called, [
@ -463,7 +441,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_get_user_quotas(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result1 = quota_obj.get_user_quotas(context, 'test_project',
'fake_user')
result2 = quota_obj.get_user_quotas(context, 'test_project',
@ -484,7 +462,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_get_project_quotas(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result1 = quota_obj.get_project_quotas(context, 'test_project')
result2 = quota_obj.get_project_quotas(context, 'test_project',
quota_class='test_class',
@ -503,7 +481,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_count_as_dict_no_resource(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
self.assertRaises(exception.QuotaResourceUnknown,
quota_obj.count_as_dict, context, 'test_resource5',
True, foo='bar')
@ -511,7 +489,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_count_as_dict_wrong_resource(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
self.assertRaises(exception.QuotaResourceUnknown,
quota_obj.count_as_dict, context, 'test_resource1',
True, foo='bar')
@ -524,9 +502,10 @@ class QuotaEngineTestCase(test.TestCase):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj.register_resource(
quota.CountableResource('test_resource5', fake_count_as_dict))
resources = [
quota.CountableResource('test_resource5', fake_count_as_dict),
]
quota_obj = self._get_quota_engine(driver, resources)
result = quota_obj.count_as_dict(context, 'test_resource5', True,
foo='bar')
@ -535,7 +514,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_limit_check(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
quota_obj.limit_check(context, test_resource1=4, test_resource2=3,
test_resource3=2, test_resource4=1)
@ -551,7 +530,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_limit_check_project_and_user(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
project_values = dict(test_resource1=4, test_resource2=3)
user_values = dict(test_resource3=2, test_resource4=1)
quota_obj.limit_check_project_and_user(context,
@ -566,7 +545,7 @@ class QuotaEngineTestCase(test.TestCase):
driver.called)
def test_resources(self):
quota_obj = self._make_quota_obj(None)
quota_obj = self._get_quota_engine(None)
self.assertEqual(quota_obj.resources,
['test_resource1', 'test_resource2',