From a52043858434cab74ccf92549feb19ecb3264499 Mon Sep 17 00:00:00 2001 From: Rick Harris Date: Sat, 26 Oct 2013 01:07:28 +0000 Subject: [PATCH] Fix `NoopQuotaDriver.get_(project|user)_quotas` format The quota API extension expects `get_project_quotas` and `get_user_quotas` to return a dictionary where the value is another dictionary with a `limit` key. The `DbQuotaDriver` adhered to this spec, but the `NoopQuotaDriver` didn't. This fixes the `NoopQuotaDriver` to return the results in the correct format. Fixes bug 1244842 Change-Id: Iea274dab1c3f10c3cb0a2815f431e15b4d4934b1 (cherry picked from commit 711a12b4029cd1544d26d147d8a67e110e056124) --- nova/quota.py | 22 ++++++++++++++-------- nova/tests/test_quota.py | 30 +++++++++++++++++++----------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/nova/quota.py b/nova/quota.py index 96eb5444849b..719f8946298c 100644 --- a/nova/quota.py +++ b/nova/quota.py @@ -651,6 +651,18 @@ class NoopQuotaDriver(object): quotas[resource.name] = -1 return quotas + def _get_noop_quotas(self, resources, usages=None, remains=False): + quotas = {} + for resource in resources.values(): + quotas[resource.name] = {} + quotas[resource.name]['limit'] = -1 + if usages: + quotas[resource.name]['in_use'] = -1 + quotas[resource.name]['reserved'] = -1 + if remains: + quotas[resource.name]['remains'] = -1 + return quotas + def get_user_quotas(self, context, resources, project_id, user_id, quota_class=None, defaults=True, usages=True): @@ -674,10 +686,7 @@ class NoopQuotaDriver(object): :param usages: If True, the current in_use and reserved counts will also be returned. """ - quotas = {} - for resource in resources.values(): - quotas[resource.name] = -1 - return quotas + return self._get_noop_quotas(resources, usages=usages) def get_project_quotas(self, context, resources, project_id, quota_class=None, defaults=True, @@ -703,10 +712,7 @@ class NoopQuotaDriver(object): :param remains: If True, the current remains of the project will will be returned. """ - quotas = {} - for resource in resources.values(): - quotas[resource.name] = -1 - return quotas + return self._get_noop_quotas(resources, usages=usages, remains=remains) def get_settable_quotas(self, context, resources, project_id, user_id=None): diff --git a/nova/tests/test_quota.py b/nova/tests/test_quota.py index 854fbb005355..2b1b13480a24 100644 --- a/nova/tests/test_quota.py +++ b/nova/tests/test_quota.py @@ -2356,47 +2356,55 @@ class NoopQuotaDriverTestCase(test.TestCase): max_age=0, ) - self.expected_quotas = dict([(r, -1) - for r in quota.QUOTAS._resources]) + self.expected_with_usages = {} + self.expected_without_usages = {} + self.expected_without_dict = {} + for r in quota.QUOTAS._resources: + self.expected_with_usages[r] = dict(limit=-1, + in_use=-1, + reserved=-1) + self.expected_without_usages[r] = dict(limit=-1) + self.expected_without_dict[r] = -1 + self.driver = quota.NoopQuotaDriver() def test_get_defaults(self): # Use our pre-defined resources result = self.driver.get_defaults(None, quota.QUOTAS._resources) - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_without_dict, result) def test_get_class_quotas(self): result = self.driver.get_class_quotas(None, quota.QUOTAS._resources, 'test_class') - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_without_dict, result) def test_get_class_quotas_no_defaults(self): result = self.driver.get_class_quotas(None, quota.QUOTAS._resources, 'test_class', False) - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_without_dict, result) def test_get_project_quotas(self): result = self.driver.get_project_quotas(None, quota.QUOTAS._resources, 'test_project') - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_with_usages, result) def test_get_user_quotas(self): result = self.driver.get_user_quotas(None, quota.QUOTAS._resources, 'test_project', 'fake_user') - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_with_usages, result) def test_get_project_quotas_no_defaults(self): result = self.driver.get_project_quotas(None, quota.QUOTAS._resources, 'test_project', defaults=False) - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_with_usages, result) def test_get_user_quotas_no_defaults(self): result = self.driver.get_user_quotas(None, @@ -2404,14 +2412,14 @@ class NoopQuotaDriverTestCase(test.TestCase): 'test_project', 'fake_user', defaults=False) - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_with_usages, result) def test_get_project_quotas_no_usages(self): result = self.driver.get_project_quotas(None, quota.QUOTAS._resources, 'test_project', usages=False) - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_without_usages, result) def test_get_user_quotas_no_usages(self): result = self.driver.get_user_quotas(None, @@ -2419,4 +2427,4 @@ class NoopQuotaDriverTestCase(test.TestCase): 'test_project', 'fake_user', usages=False) - self.assertEqual(self.expected_quotas, result) + self.assertEqual(self.expected_without_usages, result)