From 84f65f387c873d7d342a56f081f7bf8025500bf9 Mon Sep 17 00:00:00 2001 From: fujioka yuuichi Date: Tue, 14 May 2013 09:01:17 +0900 Subject: [PATCH] fix reference to tenant id. Administrator can create resource, even if the tenant of resource is different from the one of authentication. For example, administrator can operate 'quantum net-create' command with different tenant between the authentication tenant(--os-tenant-name) and --tenant-id. In this case, quota cannot be restricted with the resource tenant, because it is restricted with --os-tenant-name. This patch fixes this problem. Fixes: bug #1179729 Change-Id: I8ce893bb583d52f81c661082372d725bebf9c1be --- quantum/db/quota_db.py | 2 +- quantum/tests/unit/test_quota_ext.py | 30 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/quantum/db/quota_db.py b/quantum/db/quota_db.py index 5ccf8adb7..eef09f294 100644 --- a/quantum/db/quota_db.py +++ b/quantum/db/quota_db.py @@ -138,7 +138,7 @@ class DbQuotaDriver(object): # Grab and return the quotas (without usages) quotas = DbQuotaDriver.get_tenant_quotas( - context, sub_resources, context.tenant_id) + context, sub_resources, tenant_id) return dict((k, v) for k, v in quotas.items()) diff --git a/quantum/tests/unit/test_quota_ext.py b/quantum/tests/unit/test_quota_ext.py index 73cfc74f9..3b4315503 100644 --- a/quantum/tests/unit/test_quota_ext.py +++ b/quantum/tests/unit/test_quota_ext.py @@ -9,9 +9,11 @@ from quantum.common import config from quantum.common import exceptions from quantum import context from quantum.db import api as db +from quantum.db import quota_db from quantum import manager from quantum.plugins.linuxbridge.db import l2network_db_v2 from quantum import quota +from quantum.tests import base from quantum.tests.unit import test_api_v2 from quantum.tests.unit import test_extensions from quantum.tests.unit import testlib_api @@ -341,3 +343,31 @@ class QuotaExtensionCfgTestCase(QuotaExtensionTestCase): class QuotaExtensionCfgTestCaseXML(QuotaExtensionCfgTestCase): fmt = 'xml' + + +class TestDbQuotaDriver(base.BaseTestCase): + """Test for quantum.db.quota_db.DbQuotaDriver.""" + + def test_get_tenant_quotas_arg(self): + """Call quantum.db.quota_db.DbQuotaDriver._get_quotas.""" + + driver = quota_db.DbQuotaDriver() + ctx = context.Context('', 'bar') + + foo_quotas = {'network': 5} + default_quotas = {'network': 10} + target_tenant = 'foo' + + with mock.patch.object(quota_db.DbQuotaDriver, + 'get_tenant_quotas', + return_value=foo_quotas) as get_tenant_quotas: + + quotas = driver._get_quotas(ctx, + target_tenant, + default_quotas, + ['network']) + + self.assertEqual(quotas, foo_quotas) + get_tenant_quotas.assert_called_once_with(ctx, + default_quotas, + target_tenant) -- 2.45.2