summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/network/manager.py3
-rw-r--r--nova/tests/network/test_manager.py35
2 files changed, 36 insertions, 2 deletions
diff --git a/nova/network/manager.py b/nova/network/manager.py
index 402513faf..114e0d750 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -987,8 +987,7 @@ class NetworkManager(manager.SchedulerDependentManager):
context=read_deleted_context)
# deallocate fixed ips
for fixed_ip in fixed_ips:
- self.deallocate_fixed_ip(read_deleted_context, fixed_ip['address'],
- **kwargs)
+ self.deallocate_fixed_ip(context, fixed_ip['address'], **kwargs)
# deallocate vifs (mac addresses)
self.db.virtual_interface_delete_by_instance(read_deleted_context,
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py
index 11e293291..995c78061 100644
--- a/nova/tests/network/test_manager.py
+++ b/nova/tests/network/test_manager.py
@@ -943,6 +943,41 @@ class VlanNetworkTestCase(test.TestCase):
fixed = db.fixed_ip_get_by_address(elevated, fix_addr)
self.assertFalse(fixed['allocated'])
+ def test_deallocate_fixed_deleted(self):
+ """Verify doesn't deallocate deleted fixed_ip from deleted network"""
+
+ def network_get(_context, network_id):
+ return networks[network_id]
+
+ def teardown_network_on_host(_context, network):
+ if network['id'] == 0:
+ raise Exception('Correct network/fixed_ip assertion')
+
+ self.stubs.Set(db, 'network_get', network_get)
+ self.stubs.Set(self.network, '_teardown_network_on_host',
+ teardown_network_on_host)
+
+ context1 = context.RequestContext('user', 'project1')
+
+ instance = db.instance_create(context1,
+ {'project_id': 'project1'})
+
+ elevated = context1.elevated()
+ fix_addr = db.fixed_ip_associate_pool(elevated, 1, instance['id'])
+ db.fixed_ip_update(elevated, fix_addr, {'deleted': 1})
+ elevated.read_deleted = 'yes'
+ delfixed = db.fixed_ip_get_by_address(elevated, fix_addr)
+ values = {'address': fix_addr,
+ 'network_id': 0,
+ 'instance_id': delfixed['instance_id']}
+ db.fixed_ip_create(elevated, values)
+ elevated.read_deleted = 'no'
+ newfixed = db.fixed_ip_get_by_address(elevated, fix_addr)
+ elevated.read_deleted = 'yes'
+
+ deallocate = self.network.deallocate_fixed_ip
+ self.assertRaises(Exception, deallocate, context1, fix_addr, 'fake')
+
def test_deallocate_fixed_no_vif(self):
"""Verify that deallocate doesn't raise when no vif is returned.