summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJoshua McKenty <jmckenty@joshua-mckentys-macbook-pro.local>2010-07-07 12:06:34 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2010-07-07 12:06:34 -0700
commitb7ea2f70581f6acd927ea7b65adaffeeb4b8d2ba (patch)
tree6f00bf4a6207486478b0142f0297081ebcf85d8d /nova/tests
parent5e8337aec03f5a697c90779eb66a457aae4e7ae0 (diff)
downloadnova-b7ea2f70581f6acd927ea7b65adaffeeb4b8d2ba.tar.gz
nova-b7ea2f70581f6acd927ea7b65adaffeeb4b8d2ba.tar.xz
nova-b7ea2f70581f6acd927ea7b65adaffeeb4b8d2ba.zip
Capture signals from dnsmasq and use them to update network state.
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/fake_flags.py2
-rw-r--r--nova/tests/network_unittest.py34
2 files changed, 35 insertions, 1 deletions
diff --git a/nova/tests/fake_flags.py b/nova/tests/fake_flags.py
index d40172cfc..3f5d9ff54 100644
--- a/nova/tests/fake_flags.py
+++ b/nova/tests/fake_flags.py
@@ -28,5 +28,5 @@ FLAGS.fake_rabbit = True
FLAGS.fake_network = True
FLAGS.fake_users = True
#FLAGS.keeper_backend = 'sqlite'
-FLAGS.datastore_path = ':memory:'
+# FLAGS.datastore_path = ':memory:'
FLAGS.verbose = True
diff --git a/nova/tests/network_unittest.py b/nova/tests/network_unittest.py
index f215c0b3f..4c9f340c1 100644
--- a/nova/tests/network_unittest.py
+++ b/nova/tests/network_unittest.py
@@ -18,6 +18,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import os
import logging
import unittest
@@ -26,6 +27,7 @@ import IPy
from nova import flags
from nova import test
+from nova import exception
from nova.compute import network
from nova.auth import users
from nova import utils
@@ -40,6 +42,7 @@ class NetworkTestCase(test.TrialTestCase):
network_size=32)
logging.getLogger().setLevel(logging.DEBUG)
self.manager = users.UserManager.instance()
+ self.dnsmasq = FakeDNSMasq()
try:
self.manager.create_user('netuser', 'netuser', 'netuser')
except: pass
@@ -63,11 +66,23 @@ 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"))
+ 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.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
self.assertEqual(False, address in self._get_project_addresses("project0"))
def test_range_allocation(self):
@@ -122,3 +137,22 @@ class NetworkTestCase(test.TrialTestCase):
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))
+
+class FakeDNSMasq(object):
+ def issue_ip(self, mac, ip, hostname, interface):
+ cmd = "%s add %s %s %s" % (binpath('dhcpleasor.py'), mac, ip, hostname)
+ env = {'DNSMASQ_INTERFACE': interface, 'REDIS_DB' : '8'}
+ (out, err) = utils.execute(cmd, addl_env=env)
+ logging.debug(out)
+ logging.debug(err)
+
+ def release_ip(self, mac, ip, hostname, interface):
+ cmd = "%s del %s %s %s" % (binpath('dhcpleasor.py'), mac, ip, hostname)
+ env = {'DNSMASQ_INTERFACE': interface, 'REDIS_DB' : '8'}
+ (out, err) = utils.execute(cmd, addl_env=env)
+ logging.debug(out)
+ logging.debug(err)
+ \ No newline at end of file