summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngus Lees <gus@inodes.org>2014-08-28 14:37:34 +1000
committerAngus Lees <gus@inodes.org>2014-10-12 20:00:38 +1100
commit648063881ebfbb54a362ef32d58263fc0f20981c (patch)
tree5784b54ef60d5ce7d37df22e108c3ae2e03f2c38
parent542f5cc6277c6d66bb1f603e174f1254e823f2c9 (diff)
downloadneutron-648063881ebfbb54a362ef32d58263fc0f20981c.tar.gz
Compare subnet length as well when deleting DHCP entry
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
-rw-r--r--neutron/plugins/midonet/midonet_lib.py3
-rw-r--r--neutron/tests/unit/midonet/test_midonet_lib.py14
2 files changed, 11 insertions, 6 deletions
diff --git a/neutron/plugins/midonet/midonet_lib.py b/neutron/plugins/midonet/midonet_lib.py
index a733eb0574..60dac24250 100644
--- a/neutron/plugins/midonet/midonet_lib.py
+++ b/neutron/plugins/midonet/midonet_lib.py
@@ -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
diff --git a/neutron/tests/unit/midonet/test_midonet_lib.py b/neutron/tests/unit/midonet/test_midonet_lib.py
index 9f456a8709..b581493ea5 100644
--- a/neutron/tests/unit/midonet/test_midonet_lib.py
+++ b/neutron/tests/unit/midonet/test_midonet_lib.py
@@ -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):