]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Compare subnet length as well when deleting DHCP entry
authorAngus Lees <gus@inodes.org>
Thu, 28 Aug 2014 04:37:34 +0000 (14:37 +1000)
committerAngus Lees <gus@inodes.org>
Sun, 12 Oct 2014 09:00:38 +0000 (20:00 +1100)
When searching for the DHCP subnet entry to delete, the existing code
compares only the subnet prefix and ignores subnet length.  This could
delete the wrong entry/entries if nested subnets are present.

Change-Id: Icf079c42adeca14ef84ec57dc45a5930fde8786d
Closes-Bug: #1362416

neutron/plugins/midonet/midonet_lib.py
neutron/tests/unit/midonet/test_midonet_lib.py

index a733eb0574729c94455447eb06ee37dc0187917b..60dac2425040409bb9b58d139a4367ff2dba1c1f 100644 (file)
@@ -212,7 +212,8 @@ class MidoClient:
             raise MidonetApiException(
                 msg=_("Tried to delete non-existent DHCP"))
         for dhcp in dhcp_subnets:
-            if dhcp.get_subnet_prefix() == net_addr:
+            if (dhcp.get_subnet_prefix() == net_addr and
+                dhcp.get_subnet_length() == str(net_len)):
                 dhcp.delete()
                 break
 
index 9f456a870910ad6042c374ec269df4bb28716742..b581493ea52c20289fa06e9f35b659174a21a352 100644 (file)
@@ -92,14 +92,18 @@ class MidoClientTestCase(testtools.TestCase):
     def test_delete_dhcp(self):
 
         bridge = mock.Mock()
-        subnet = mock.Mock()
-        subnet.get_subnet_prefix.return_value = "10.0.0.0"
-        subnets = mock.MagicMock(return_value=[subnet])
+        subnet1 = mock.Mock()
+        subnet1.get_subnet_prefix.return_value = "10.0.0.0"
+        subnet1.get_subnet_length.return_value = "16"
+        subnet2 = mock.Mock()
+        subnet2.get_subnet_prefix.return_value = "10.0.0.0"
+        subnet2.get_subnet_length.return_value = "24"
+        subnets = mock.MagicMock(return_value=[subnet1, subnet2])
         bridge.get_dhcp_subnets.side_effect = subnets
         self.client.delete_dhcp(bridge, "10.0.0.0/24")
         bridge.assert_has_calls(mock.call.get_dhcp_subnets)
-        subnet.assert_has_calls([mock.call.get_subnet_prefix(),
-                                mock.call.delete()])
+        self.assertFalse(subnet1.delete.called)
+        subnet2.delete.assert_called_once_with()
 
     def test_add_dhcp_host(self):