summaryrefslogtreecommitdiff
path: root/nova/tests/network/test_manager.py
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2014-05-23 11:12:31 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2014-08-19 11:21:23 -0700
commit231347ebbb1c61976e7bd2bd3734d611d21e0ec0 (patch)
tree9489386299978b47ed1abe28deba1f30adc4059f /nova/tests/network/test_manager.py
parentc3fdcc2bd61b84dbab9a8d3a9e7737315c6f7fb5 (diff)
downloadnova-231347ebbb1c61976e7bd2bd3734d611d21e0ec0.tar.gz
Support reserving ips at network create time
It is horribly inefficient to create a network and reserve a large swath of ips, so allow the network creator to specify which ips he wants to be available in the network by specifying allowed_start and allowed_end. Something like: network-create foo --cidr 10.0.0.0/24 --allowed-start 10.0.0.5 \ --allowed-end 10.0.0.250 would ensure that 10.0.0.0-10.0.0.4 and 10.0.0.254-10.0.0.255 are marked reserved so instances would be assigned addresses from the middle of the range. Partially-implements blueprint better-support-for-multiple-networks Change-Id: I5427e1a2d202658d374292559fc7054f2fa51124
Diffstat (limited to 'nova/tests/network/test_manager.py')
-rw-r--r--nova/tests/network/test_manager.py41
1 files changed, 39 insertions, 2 deletions
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py
index 694f3d6e11..61f8d67afc 100644
--- a/nova/tests/network/test_manager.py
+++ b/nova/tests/network/test_manager.py
@@ -333,9 +333,45 @@ class FlatNetworkTestCase(test.TestCase):
256, None, None, None, None, None)
self.assertEqual(1, len(nets))
network = nets[0]
- self.assertEqual(3, db.network_count_reserved_ips(context_admin,
+ self.assertEqual(4, db.network_count_reserved_ips(context_admin,
network['id']))
+ def test_validate_reserved_start_end(self):
+ context_admin = context.RequestContext('testuser', 'testproject',
+ is_admin=True)
+ nets = self.network.create_networks(context_admin, 'fake',
+ '192.168.0.0/24', False, 1,
+ 256, dhcp_server='192.168.0.11',
+ allowed_start='192.168.0.10',
+ allowed_end='192.168.0.245')
+ self.assertEqual(1, len(nets))
+ network = nets[0]
+ # gateway defaults to beginning of allowed_start
+ self.assertEqual('192.168.0.10', network['gateway'])
+ # vpn_server doesn't conflict with dhcp_start
+ self.assertEqual('192.168.0.12', network['vpn_private_address'])
+ # dhcp_start doesn't conflict with dhcp_server
+ self.assertEqual('192.168.0.13', network['dhcp_start'])
+ # NOTE(vish): 10 from the beginning, 10 from the end, and
+ # 1 for the gateway, 1 for the dhcp server,
+ # 1 for the vpn server
+ self.assertEqual(23, db.network_count_reserved_ips(context_admin,
+ network['id']))
+
+ def test_validate_reserved_start_out_of_range(self):
+ context_admin = context.RequestContext('testuser', 'testproject',
+ is_admin=True)
+ self.assertRaises(ValueError, self.network.create_networks,
+ context_admin, 'fake', '192.168.0.0/24', False,
+ 1, 256, allowed_start='192.168.1.10')
+
+ def test_validate_reserved_end_invalid(self):
+ context_admin = context.RequestContext('testuser', 'testproject',
+ is_admin=True)
+ self.assertRaises(ValueError, self.network.create_networks,
+ context_admin, 'fake', '192.168.0.0/24', False,
+ 1, 256, allowed_end='invalid')
+
def test_validate_networks_none_requested_networks(self):
self.network.validate_networks(self.context, None)
@@ -1782,7 +1818,8 @@ class CommonNetworkTestCase(test.TestCase):
self.assertTrue(res)
def fake_create_fixed_ips(self, context, network_id, fixed_cidr=None,
- extra_reserved=None):
+ extra_reserved=None, bottom_reserved=0,
+ top_reserved=0):
return None
def test_get_instance_nw_info_client_exceptions(self):