diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-12-11 17:47:01 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-12-11 17:47:01 +0000 |
| commit | 2d143aa8b5f676d3967d16b08a65b5dfe73c3ebd (patch) | |
| tree | 4fce854390575d22941b5c5b6fa8241a1a729e02 | |
| parent | 83b104ad87f72f2e7323de9b2617df0e25e870a5 (diff) | |
| parent | 4371509084c97072cc5f2fe16fe01f09b81b1af0 (diff) | |
| download | nova-2d143aa8b5f676d3967d16b08a65b5dfe73c3ebd.tar.gz nova-2d143aa8b5f676d3967d16b08a65b5dfe73c3ebd.tar.xz nova-2d143aa8b5f676d3967d16b08a65b5dfe73c3ebd.zip | |
Merge "Consider reserved count in os-user-limits extension"
| -rw-r--r-- | nova/api/openstack/compute/contrib/used_limits.py | 11 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/contrib/test_used_limits.py | 33 |
2 files changed, 34 insertions, 10 deletions
diff --git a/nova/api/openstack/compute/contrib/used_limits.py b/nova/api/openstack/compute/contrib/used_limits.py index 020f6d8e4..a7ac33ae9 100644 --- a/nova/api/openstack/compute/contrib/used_limits.py +++ b/nova/api/openstack/compute/contrib/used_limits.py @@ -39,6 +39,13 @@ class UsedLimitsTemplate(xmlutil.TemplateBuilder): class UsedLimitsController(wsgi.Controller): + @staticmethod + def _reserved(req): + try: + return int(req.GET['reserved']) + except (ValueError, KeyError): + return False + @wsgi.extends def index(self, req, resp_obj): resp_obj.attach(xml=UsedLimitsTemplate()) @@ -57,7 +64,9 @@ class UsedLimitsController(wsgi.Controller): used_limits = {} for display_name, quota in quota_map.iteritems(): if quota in quotas: - used_limits[display_name] = quotas[quota]['in_use'] + reserved = (quotas[quota]['reserved'] + if self._reserved(req) else 0) + used_limits[display_name] = quotas[quota]['in_use'] + reserved resp_obj.obj['limits']['absolute'].update(used_limits) diff --git a/nova/tests/api/openstack/compute/contrib/test_used_limits.py b/nova/tests/api/openstack/compute/contrib/test_used_limits.py index 3ab814ebb..4a75961ed 100644 --- a/nova/tests/api/openstack/compute/contrib/test_used_limits.py +++ b/nova/tests/api/openstack/compute/contrib/test_used_limits.py @@ -24,8 +24,10 @@ from nova import test class FakeRequest(object): - def __init__(self, context): + def __init__(self, context, reserved=False): self.environ = {'nova.context': context} + self.reserved = reserved + self.GET = {'reserved': 1} if reserved else {} class UsedLimitsTestCase(test.TestCase): @@ -36,9 +38,9 @@ class UsedLimitsTestCase(test.TestCase): self.controller = used_limits.UsedLimitsController() self.fake_context = nova.context.RequestContext('fake', 'fake') - self.fake_req = FakeRequest(self.fake_context) - def test_used_limits(self): + def _do_test_used_limits(self, reserved): + fake_req = FakeRequest(self.fake_context, reserved=reserved) obj = { "limits": { "rate": [], @@ -57,19 +59,30 @@ class UsedLimitsTestCase(test.TestCase): } limits = {} for display_name, q in quota_map.iteritems(): - limits[q] = {'limit': 10, 'in_use': 2} + limits[q] = {'limit': len(display_name), + 'in_use': len(display_name) / 2, + 'reserved': len(display_name) / 3} def stub_get_project_quotas(context, project_id, usages=True): return limits self.stubs.Set(quota.QUOTAS, "get_project_quotas", stub_get_project_quotas) - self.controller.index(self.fake_req, res) + self.controller.index(fake_req, res) abs_limits = res.obj['limits']['absolute'] for used_limit, value in abs_limits.iteritems(): - self.assertEqual(value, limits[quota_map[used_limit]]['in_use']) + r = limits[quota_map[used_limit]]['reserved'] if reserved else 0 + self.assertEqual(value, + limits[quota_map[used_limit]]['in_use'] + r) + + def test_used_limits_basic(self): + self._do_test_used_limits(False) + + def test_used_limits_with_reserved(self): + self._do_test_used_limits(True) def test_used_ram_added(self): + fake_req = FakeRequest(self.fake_context) obj = { "limits": { "rate": [], @@ -84,12 +97,13 @@ class UsedLimitsTestCase(test.TestCase): return {'ram': {'limit': 512, 'in_use': 256}} self.stubs.Set(quota.QUOTAS, "get_project_quotas", stub_get_project_quotas) - self.controller.index(self.fake_req, res) + self.controller.index(fake_req, res) abs_limits = res.obj['limits']['absolute'] self.assertTrue('totalRAMUsed' in abs_limits) self.assertEqual(abs_limits['totalRAMUsed'], 256) def test_no_ram_quota(self): + fake_req = FakeRequest(self.fake_context) obj = { "limits": { "rate": [], @@ -102,11 +116,12 @@ class UsedLimitsTestCase(test.TestCase): return {} self.stubs.Set(quota.QUOTAS, "get_project_quotas", stub_get_project_quotas) - self.controller.index(self.fake_req, res) + self.controller.index(fake_req, res) abs_limits = res.obj['limits']['absolute'] self.assertFalse('totalRAMUsed' in abs_limits) def test_used_limits_xmlns(self): + fake_req = FakeRequest(self.fake_context) obj = { "limits": { "rate": [], @@ -120,6 +135,6 @@ class UsedLimitsTestCase(test.TestCase): return {} self.stubs.Set(quota.QUOTAS, "get_project_quotas", stub_get_project_quotas) - self.controller.index(self.fake_req, res) + self.controller.index(fake_req, res) response = res.serialize(None, 'xml') self.assertTrue(used_limits.XMLNS in response.body) |
