diff options
author | Aarti Kriplani <aarti.kriplani@RACKSPACE.COM> | 2013-04-22 12:01:27 -0500 |
---|---|---|
committer | Aarti Kriplani <aarti.kriplani@RACKSPACE.COM> | 2013-05-23 16:25:29 +0530 |
commit | cdd998c418edc42a6a828ddef144e8408c206b7c (patch) | |
tree | 9f23c9005dd304e23acb32ff207bd4c526406e94 /nova/tests | |
parent | af7048590dac77806dd3e7c97a736fda52c2389b (diff) | |
download | nova-cdd998c418edc42a6a828ddef144e8408c206b7c.tar.gz nova-cdd998c418edc42a6a828ddef144e8408c206b7c.tar.xz nova-cdd998c418edc42a6a828ddef144e8408c206b7c.zip |
Delete a quota through admin api.
Added 'extended-quotas' extension that has provides ability for admins
to be able to delete a non-default quota (absolute limit) for a tenant,
so that tenant's quota will revert back to the configured default.
Implements blueprint admin-api-for-delete-quota
Change-Id: I7375420a466823b3e099aebff71a8f7d7f922afb
Diffstat (limited to 'nova/tests')
6 files changed, 61 insertions, 1 deletions
diff --git a/nova/tests/api/openstack/compute/contrib/test_quotas.py b/nova/tests/api/openstack/compute/contrib/test_quotas.py index c95c41614..4fb337294 100644 --- a/nova/tests/api/openstack/compute/contrib/test_quotas.py +++ b/nova/tests/api/openstack/compute/contrib/test_quotas.py @@ -19,7 +19,10 @@ from lxml import etree import webob from nova.api.openstack.compute.contrib import quotas +from nova.api.openstack import extensions from nova.api.openstack import wsgi +from nova import context as context_maker +from nova import quota from nova import test from nova.tests.api.openstack import fakes @@ -37,7 +40,8 @@ class QuotaSetsTest(test.TestCase): def setUp(self): super(QuotaSetsTest, self).setUp() - self.controller = quotas.QuotaSetsController() + self.ext_mgr = self.mox.CreateMock(extensions.ExtensionManager) + self.controller = quotas.QuotaSetsController(self.ext_mgr) def test_format_quota_set(self): raw_quota_set = { @@ -201,6 +205,33 @@ class QuotaSetsTest(test.TestCase): res_dict = self.controller.update(req, 'update_me', body) self.assertEqual(res_dict, expected_resp) + def test_delete_quotas_when_extension_not_loaded(self): + self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(False) + self.mox.ReplayAll() + req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234') + self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete, + req, 1234) + + def test_quotas_delete_as_unauthorized_user(self): + self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True) + self.mox.ReplayAll() + req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234') + self.assertRaises(webob.exc.HTTPForbidden, self.controller.delete, + req, 1234) + + def test_quotas_delete_as_admin(self): + context = context_maker.get_admin_context() + self.req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234') + self.req.environ['nova.context'] = context + self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True) + self.mox.StubOutWithMock(quota.QUOTAS, + "destroy_all_by_project") + quota.QUOTAS.destroy_all_by_project(context, 1234) + self.mox.ReplayAll() + res = self.controller.delete(self.req, 1234) + self.mox.VerifyAll() + self.assertEqual(res.status_int, 202) + class QuotaXMLSerializerTest(test.TestCase): def setUp(self): diff --git a/nova/tests/api/openstack/compute/test_extensions.py b/nova/tests/api/openstack/compute/test_extensions.py index 6e400a075..5c3e07a7a 100644 --- a/nova/tests/api/openstack/compute/test_extensions.py +++ b/nova/tests/api/openstack/compute/test_extensions.py @@ -195,6 +195,7 @@ class ExtensionControllerTest(ExtensionTestCase): "MultipleCreate", "QuotaClasses", "Quotas", + "ExtendedQuotas", "Rescue", "SchedulerHints", "SecurityGroupDefaultRules", diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py index 1290ef80b..b30793ac4 100644 --- a/nova/tests/fake_policy.py +++ b/nova/tests/fake_policy.py @@ -159,6 +159,7 @@ policy_data = """ "compute_extension:os-tenant-networks": "", "compute_extension:quotas:show": "", "compute_extension:quotas:update": "", + "compute_extension:quotas:delete": "", "compute_extension:quota_classes": "", "compute_extension:rescue": "", "compute_extension:security_group_default_rules": "", diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl index d559b4890..7a636036a 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl @@ -417,6 +417,14 @@ "updated": "%(timestamp)s" }, { + "alias": "os-extended-quotas", + "description": "%(text)s", + "links": [], + "name": "ExtendedQuotas", + "namespace": "http://docs.openstack.org/compute/ext/quota-delete/api/v1.1", + "updated": "%(timestamp)s" + }, + { "alias": "os-quota-sets", "description": "%(text)s", "links": [], diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl index cc9ae4c02..ee01eb33c 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl @@ -156,6 +156,9 @@ <extension alias="os-quota-class-sets" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/quota-classes-sets/api/v1.1" name="QuotaClasses"> <description>%(text)s</description> </extension> + <extension alias="os-extended-quotas" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/quota-delete/api/v1.1" name="ExtendedQuotas"> + <description>%(text)s</description> + </extension> <extension alias="os-quota-sets" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/quotas-sets/api/v1.1" name="Quotas"> <description>%(text)s</description> </extension> diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index 9b678ddd3..873719ab6 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -2277,6 +2277,22 @@ class QuotasSampleXmlTests(QuotasSampleJsonTests): ctype = "xml" +class ExtendedQuotasSampleJsonTests(ApiSampleTestBase): + extends_name = "nova.api.openstack.compute.contrib.quotas.Quotas" + extension_name = ("nova.api.openstack.compute.contrib" + ".extended_quotas.Extended_quotas") + + def test_delete_quotas(self): + # Get api sample to delete quota. + response = self._do_delete('os-quota-sets/fake_tenant') + self.assertEqual(response.status, 202) + self.assertEqual(response.read(), '') + + +class ExtendedQuotasSampleXmlTests(ExtendedQuotasSampleJsonTests): + ctype = "xml" + + class ExtendedIpsSampleJsonTests(ServersSampleBase): extension_name = ("nova.api.openstack.compute.contrib" ".extended_ips.Extended_ips") |