]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Use subnet id instead of wrong built-in id()
authorZhiQiang Fan <aji.zqfan@gmail.com>
Mon, 19 Aug 2013 16:05:15 +0000 (00:05 +0800)
committerZhiQiang Fan <aji.zqfan@gmail.com>
Wed, 21 Aug 2013 09:02:27 +0000 (17:02 +0800)
In _validate_subnet(), built-in id() is used as param for exceptions,
this patch fixes it via using proper subnet id.

Closes-Bug: #1213930

Change-Id: I9a88f4dc7b771047f4061fb94ba65f0515afa745

neutron/db/db_base_plugin_v2.py
neutron/tests/unit/test_db_plugin.py

index f8a7a99d72796d47ba555ea0b5251e8d8c7fb5b0..b9ae77d14647c52fe241b8f0f639f08ec497fef9 100644 (file)
@@ -1046,7 +1046,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
         if attributes.is_attr_set(s.get('dns_nameservers')):
             if len(s['dns_nameservers']) > cfg.CONF.max_dns_nameservers:
                 raise q_exc.DNSNameServersExhausted(
-                    subnet_id=id,
+                    subnet_id=s.get('id', _('new subnet')),
                     quota=cfg.CONF.max_dns_nameservers)
             for dns in s['dns_nameservers']:
                 try:
@@ -1060,7 +1060,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
         if attributes.is_attr_set(s.get('host_routes')):
             if len(s['host_routes']) > cfg.CONF.max_subnet_host_routes:
                 raise q_exc.HostRoutesExhausted(
-                    subnet_id=id,
+                    subnet_id=s.get('id', _('new subnet')),
                     quota=cfg.CONF.max_subnet_host_routes)
             # check if the routes are all valid
             for rt in s['host_routes']:
@@ -1154,6 +1154,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
         # and 'allocation_pools' fields.
         s['ip_version'] = db_subnet.ip_version
         s['cidr'] = db_subnet.cidr
+        s['id'] = db_subnet.id
         self._validate_subnet(s)
 
         if 'gateway_ip' in s and s['gateway_ip'] is not None:
index 8eadcf187559f6947e0d502d3e5fc4db06ebc945..ff7c1fb1da3064c788671baceb9f857905acb865 100644 (file)
@@ -482,7 +482,7 @@ class NeutronDbPluginV2TestCase(testlib_api.WebTestCase):
     def _do_side_effect(self, patched_plugin, orig, *args, **kwargs):
         """Invoked by test cases for injecting failures in plugin."""
         def second_call(*args, **kwargs):
-            raise q_exc.NeutronException
+            raise q_exc.NeutronException()
         patched_plugin.side_effect = second_call
         return orig(*args, **kwargs)
 
@@ -3433,6 +3433,34 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase):
         res = req.get_response(self.api)
         self.assertEqual(res.status_int, 204)
 
+    def _helper_test_validate_subnet(self, option, exception):
+        cfg.CONF.set_override(option, 0)
+        with self.network() as network:
+            subnet = {'network_id': network['network']['id'],
+                      'cidr': '10.0.2.0/24',
+                      'ip_version': 4,
+                      'tenant_id': network['network']['tenant_id'],
+                      'gateway_ip': '10.0.2.1',
+                      'dns_nameservers': ['8.8.8.8'],
+                      'host_routes': [{'destination': '135.207.0.0/16',
+                                       'nexthop': '1.2.3.4'}]}
+            plugin = NeutronManager.get_plugin()
+            e = self.assertRaises(exception,
+                                  plugin._validate_subnet, subnet)
+            self.assertThat(
+                str(e),
+                matchers.Not(matchers.Contains('built-in function id')))
+
+    def test_validate_subnet_dns_nameservers_exhausted(self):
+        self._helper_test_validate_subnet(
+            'max_dns_nameservers',
+            q_exc.DNSNameServersExhausted)
+
+    def test_validate_subnet_host_routes_exhausted(self):
+        self._helper_test_validate_subnet(
+            'max_subnet_host_routes',
+            q_exc.HostRoutesExhausted)
+
 
 class DbModelTestCase(base.BaseTestCase):
     """DB model tests."""