--- /dev/null
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2014 OpenStack Foundation.
+# 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 oslo.config import cfg
+
+from neutron import context
+from neutron import quota
+from neutron.tests.unit import test_api_v2
+from neutron.tests.unit import test_quota_ext
+
+_get_path = test_api_v2._get_path
+
+
+class LBaaSQuotaExtensionTestCase(
+ test_quota_ext.QuotaExtensionTestCase):
+
+ def setUp(self):
+ super(LBaaSQuotaExtensionTestCase, self).setUp()
+ cfg.CONF.set_override(
+ 'quota_items',
+ ['vip', 'pool', 'member', 'health_monitor', 'extra1'],
+ group='QUOTAS')
+ quota.register_resources_from_config()
+
+
+class LBaaSQuotaExtensionDbTestCase(LBaaSQuotaExtensionTestCase):
+ fmt = 'json'
+
+ def setUp(self):
+ cfg.CONF.set_override(
+ 'quota_driver',
+ 'neutron.db.quota_db.DbQuotaDriver',
+ group='QUOTAS')
+ super(LBaaSQuotaExtensionDbTestCase, self).setUp()
+
+ def test_quotas_loaded_right(self):
+ res = self.api.get(_get_path('quotas', fmt=self.fmt))
+ quota = self.deserialize(res)
+ self.assertEqual([], quota['quotas'])
+ self.assertEqual(200, res.status_int)
+
+ def test_quotas_default_values(self):
+ tenant_id = 'tenant_id1'
+ env = {'neutron.context': context.Context('', tenant_id)}
+ res = self.api.get(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ extra_environ=env)
+ quota = self.deserialize(res)
+ self.assertEqual(10, quota['quota']['vip'])
+ self.assertEqual(10, quota['quota']['pool'])
+ self.assertEqual(-1, quota['quota']['member'])
+ self.assertEqual(-1, quota['quota']['health_monitor'])
+ self.assertEqual(-1, quota['quota']['extra1'])
+
+ def test_show_quotas_with_admin(self):
+ tenant_id = 'tenant_id1'
+ env = {'neutron.context': context.Context('', tenant_id + '2',
+ is_admin=True)}
+ res = self.api.get(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ extra_environ=env)
+ self.assertEqual(200, res.status_int)
+ quota = self.deserialize(res)
+ self.assertEqual(10, quota['quota']['vip'])
+ self.assertEqual(10, quota['quota']['pool'])
+ self.assertEqual(-1, quota['quota']['member'])
+ self.assertEqual(-1, quota['quota']['health_monitor'])
+
+ def test_show_quotas_with_owner_tenant(self):
+ tenant_id = 'tenant_id1'
+ env = {'neutron.context': context.Context('', tenant_id,
+ is_admin=False)}
+ res = self.api.get(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ extra_environ=env)
+ self.assertEqual(200, res.status_int)
+ quota = self.deserialize(res)
+ self.assertEqual(10, quota['quota']['vip'])
+ self.assertEqual(10, quota['quota']['pool'])
+ self.assertEqual(-1, quota['quota']['member'])
+ self.assertEqual(-1, quota['quota']['health_monitor'])
+
+ def test_update_quotas_to_unlimited(self):
+ tenant_id = 'tenant_id1'
+ env = {'neutron.context': context.Context('', tenant_id,
+ is_admin=True)}
+ quotas = {'quota': {'pool': -1}}
+ res = self.api.put(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ self.serialize(quotas), extra_environ=env,
+ expect_errors=False)
+ self.assertEqual(200, res.status_int)
+
+ def test_update_quotas_exceeding_current_limit(self):
+ tenant_id = 'tenant_id1'
+ env = {'neutron.context': context.Context('', tenant_id,
+ is_admin=True)}
+ quotas = {'quota': {'pool': 120}}
+ res = self.api.put(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ self.serialize(quotas), extra_environ=env,
+ expect_errors=False)
+ self.assertEqual(200, res.status_int)
+
+ def test_update_quotas_with_admin(self):
+ tenant_id = 'tenant_id1'
+ env = {'neutron.context': context.Context('', tenant_id + '2',
+ is_admin=True)}
+ quotas = {'quota': {'pool': 100}}
+ res = self.api.put(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ self.serialize(quotas), extra_environ=env)
+ self.assertEqual(200, res.status_int)
+ env2 = {'neutron.context': context.Context('', tenant_id)}
+ res = self.api.get(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ extra_environ=env2)
+ quota = self.deserialize(res)
+ self.assertEqual(10, quota['quota']['vip'])
+ self.assertEqual(100, quota['quota']['pool'])
+ self.assertEqual(-1, quota['quota']['member'])
+ self.assertEqual(-1, quota['quota']['health_monitor'])
+
+
+class LBaaSQuotaExtensionDbTestCaseXML(LBaaSQuotaExtensionDbTestCase):
+ fmt = 'xml'
+
+
+class LBaaSQuotaExtensionCfgTestCase(
+ LBaaSQuotaExtensionTestCase):
+
+ def setUp(self):
+ cfg.CONF.set_override(
+ 'quota_driver',
+ 'neutron.quota.ConfDriver',
+ group='QUOTAS')
+ super(LBaaSQuotaExtensionCfgTestCase, self).setUp()
+
+ def test_quotas_default_values(self):
+ tenant_id = 'tenant_id1'
+ env = {'neutron.context': context.Context('', tenant_id)}
+ res = self.api.get(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ extra_environ=env)
+ quota = self.deserialize(res)
+ self.assertEqual(10, quota['quota']['vip'])
+ self.assertEqual(10, quota['quota']['pool'])
+ self.assertEqual(-1, quota['quota']['member'])
+ self.assertEqual(-1, quota['quota']['health_monitor'])
+ self.assertEqual(-1, quota['quota']['extra1'])
+
+ def test_update_quotas_forbidden(self):
+ tenant_id = 'tenant_id1'
+ quotas = {'quota': {'pool': 100}}
+ res = self.api.put(_get_path('quotas', id=tenant_id, fmt=self.fmt),
+ self.serialize(quotas),
+ expect_errors=True)
+ self.assertEqual(403, res.status_int)
+
+
+class LBaaSQuotaExtensionCfgTestCaseXML(LBaaSQuotaExtensionCfgTestCase):
+ fmt = 'xml'