summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua McKenty <jmckenty@joshua-mckentys-macbook-pro.local>2010-07-07 12:15:11 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2010-07-07 12:15:11 -0700
commitd831ef39e2d84aa3e39bc3861085d563575efa43 (patch)
treec619068f0ab11e7a830705eed0262efb9276532a
parentdbe324f7254dd3e01de44bb908150fb8397fe118 (diff)
downloadnova-d831ef39e2d84aa3e39bc3861085d563575efa43.tar.gz
nova-d831ef39e2d84aa3e39bc3861085d563575efa43.tar.xz
nova-d831ef39e2d84aa3e39bc3861085d563575efa43.zip
Adding more tests, refactoring for dhcp logic.
-rw-r--r--nova/tests/network_unittest.py106
1 files changed, 62 insertions, 44 deletions
diff --git a/nova/tests/network_unittest.py b/nova/tests/network_unittest.py
index 8cbc2b7cd..67ae7ad2d 100644
--- a/nova/tests/network_unittest.py
+++ b/nova/tests/network_unittest.py
@@ -29,6 +29,7 @@ import IPy
from nova import flags
from nova import test
from nova import exception
+from nova.compute.exception import NoMoreAddresses
from nova.compute import network
from nova.auth import users
from nova import utils
@@ -67,24 +68,21 @@ class NetworkTestCase(test.TrialTestCase):
self.assertTrue(IPy.IP(address) in self.network.network)
def test_allocate_deallocate_ip(self):
- # Address should be allocated
- # Then, simulate acquisition of the address
- # Deallocate it, and wait for simulated ip release
- # then confirm it's gone.
address = network.allocate_ip(
"netuser", "project0", utils.generate_mac())
logging.debug("Was allocated %s" % (address))
net = network.get_project_network("project0", "default")
- self.assertEqual(True, address in self._get_project_addresses("project0"))
+ self.assertEqual(True, is_in_project(address, "project0"))
mac = utils.generate_mac()
hostname = "test-host"
self.dnsmasq.issue_ip(mac, address, hostname, net.bridge_name)
rv = network.deallocate_ip(address)
+
# Doesn't go away until it's dhcp released
- self.assertEqual(True, address in self._get_project_addresses("project0"))
+ self.assertEqual(True, is_in_project(address, "project0"))
self.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
- self.assertEqual(False, address in self._get_project_addresses("project0"))
+ self.assertEqual(False, is_in_project(address, "project0"))
def test_range_allocation(self):
mac = utils.generate_mac()
@@ -97,11 +95,10 @@ class NetworkTestCase(test.TrialTestCase):
net = network.get_project_network("project0", "default")
secondnet = network.get_project_network("project1", "default")
- self.assertEqual(True,
- address in self._get_project_addresses("project0"))
- self.assertEqual(True,
- secondaddress in self._get_project_addresses("project1"))
- self.assertEqual(False, address in self._get_project_addresses("project1"))
+ self.assertEqual(True, is_in_project(address, "project0"))
+ self.assertEqual(True, is_in_project(secondaddress, "project1"))
+ self.assertEqual(False, is_in_project(address, "project1"))
+
# Addresses are allocated before they're issued
self.dnsmasq.issue_ip(mac, address, hostname, net.bridge_name)
self.dnsmasq.issue_ip(secondmac, secondaddress,
@@ -109,58 +106,79 @@ class NetworkTestCase(test.TrialTestCase):
rv = network.deallocate_ip(address)
self.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
- self.assertEqual(False, address in self._get_project_addresses("project0"))
+ self.assertEqual(False, is_in_project(address, "project0"))
+
# First address release shouldn't affect the second
- self.assertEqual(True,
- secondaddress in self._get_project_addresses("project1"))
+ self.assertEqual(True, is_in_project(secondaddress, "project1"))
rv = network.deallocate_ip(secondaddress)
self.dnsmasq.release_ip(secondmac, secondaddress,
hostname, secondnet.bridge_name)
- self.assertEqual(False,
- secondaddress in self._get_project_addresses("project1"))
+ self.assertEqual(False, is_in_project(secondaddress, "project1"))
def test_subnet_edge(self):
secondaddress = network.allocate_ip("netuser", "project0",
utils.generate_mac())
+ hostname = "toomany-hosts"
for project in range(1,5):
project_id = "project%s" % (project)
+ mac = utils.generate_mac()
+ mac2 = utils.generate_mac()
+ mac3 = utils.generate_mac()
address = network.allocate_ip(
- "netuser", project_id, utils.generate_mac())
+ "netuser", project_id, mac)
address2 = network.allocate_ip(
- "netuser", project_id, utils.generate_mac())
+ "netuser", project_id, mac2)
address3 = network.allocate_ip(
- "netuser", project_id, utils.generate_mac())
- self.assertEqual(False,
- address in self._get_project_addresses("project0"))
- self.assertEqual(False,
- address2 in self._get_project_addresses("project0"))
- self.assertEqual(False,
- address3 in self._get_project_addresses("project0"))
+ "netuser", project_id, mac3)
+ self.assertEqual(False, is_in_project(address, "project0"))
+ self.assertEqual(False, is_in_project(address2, "project0"))
+ self.assertEqual(False, is_in_project(address3, "project0"))
rv = network.deallocate_ip(address)
rv = network.deallocate_ip(address2)
rv = network.deallocate_ip(address3)
+ net = network.get_project_network(project_id, "default")
+ self.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
+ self.dnsmasq.release_ip(mac2, address2, hostname, net.bridge_name)
+ self.dnsmasq.release_ip(mac3, address3, hostname, net.bridge_name)
+ net = network.get_project_network("project0", "default")
rv = network.deallocate_ip(secondaddress)
+ self.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
- def test_too_many_projects(self):
- for i in range(0, 30):
- name = 'toomany-project%s' % i
- self.manager.create_project(name, 'netuser', name)
- net = network.get_project_network(name, "default")
- mac = utils.generate_mac()
- hostname = "toomany-hosts"
- address = network.allocate_ip(
- "netuser", name, mac)
- self.dnsmasq.issue_ip(mac, address, hostname, net.bridge_name)
- rv = network.deallocate_ip(address)
- self.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
- self.manager.delete_project(name)
+ def test_release_before_deallocate(self):
+ pass
+
+ def test_deallocate_before_issued(self):
+ pass
+
+ def test_too_many_addresses(self):
+ """
+ Network size is 32, there are 5 addresses reserved for VPN.
+ So we should get 24 usable addresses
+ """
+ net = network.get_project_network("project0", "default")
+ hostname = "toomany-hosts"
+ macs = {}
+ addresses = {}
+ for i in range(0, 23):
+ macs[i] = utils.generate_mac()
+ addresses[i] = network.allocate_ip("netuser", "project0", macs[i])
+ self.dnsmasq.issue_ip(macs[i], addresses[i], hostname, net.bridge_name)
+
+ self.assertRaises(NoMoreAddresses, network.allocate_ip, "netuser", "project0", utils.generate_mac())
+
+ for i in range(0, 23):
+ rv = network.deallocate_ip(addresses[i])
+ self.dnsmasq.release_ip(macs[i], addresses[i], hostname, net.bridge_name)
+
+def is_in_project(address, project_id):
+ return address in network.get_project_network(project_id).list_addresses()
- def _get_project_addresses(self, project_id):
- project_addresses = []
- for addr in network.get_project_network(project_id).list_addresses():
- project_addresses.append(addr)
- return project_addresses
+def _get_project_addresses(project_id):
+ project_addresses = []
+ for addr in network.get_project_network(project_id).list_addresses():
+ project_addresses.append(addr)
+ return project_addresses
def binpath(script):
return os.path.abspath(os.path.join(__file__, "../../../bin", script))