summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorMichael J Fork <mjfork@us.ibm.com>2013-01-22 22:25:38 +0000
committerMichael J Fork <mjfork@us.ibm.com>2013-02-07 11:50:39 +0000
commit1abe88c44a7e86e80f56f25dfd71f6df44f25289 (patch)
treef5640236a9331ce5ff597e7ee07f3f25567ef24b /nova/tests
parentfe16fded3d4ecfe71d7d0d0d4adbbb8d3cc0da48 (diff)
Support hypervisor supplied macs in nova-network
When hypervisors supply a set of MAC addresses for instances, have nova-network use the supplied values when creating VIFs. This function is required for the PowerVM driver to be properly supported. Change-Id: I922797af6b2b829561f61095bef2098c2d31cde5
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/ec2/test_cloud.py3
-rw-r--r--nova/tests/network/test_api.py2
-rw-r--r--nova/tests/network/test_manager.py51
-rw-r--r--nova/tests/network/test_rpcapi.py3
-rw-r--r--nova/tests/test_xenapi.py3
5 files changed, 53 insertions, 9 deletions
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index c60a0148e..ec0bd3743 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -269,7 +269,8 @@ class CloudTestCase(test.TestCase):
host=inst['host'],
vpn=None,
rxtx_factor=3,
- project_id=project_id)
+ project_id=project_id,
+ macs=None)
fixed_ips = nw_info.fixed_ips()
ec2_id = ec2utils.id_to_ec2_inst_id(inst['uuid'])
diff --git a/nova/tests/network/test_api.py b/nova/tests/network/test_api.py
index a0179ff94..8e9abe1db 100644
--- a/nova/tests/network/test_api.py
+++ b/nova/tests/network/test_api.py
@@ -75,7 +75,7 @@ class ApiTestCase(test.TestCase):
self.mox.StubOutWithMock(
self.network_api.network_rpcapi, "allocate_for_instance")
kwargs = dict(zip(['host', 'instance_id', 'instance_uuid',
- 'project_id', 'requested_networks', 'rxtx_factor', 'vpn'],
+ 'project_id', 'requested_networks', 'rxtx_factor', 'vpn', 'macs'],
itertools.repeat(mox.IgnoreArg())))
self.network_api.network_rpcapi.allocate_for_instance(
mox.IgnoreArg(), **kwargs).AndReturn([])
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py
index 9d467bcb1..0dcd02f78 100644
--- a/nova/tests/network/test_manager.py
+++ b/nova/tests/network/test_manager.py
@@ -1585,9 +1585,8 @@ class TestFloatingIPManager(floating_ips.FloatingIP,
class AllocateTestCase(test.TestCase):
- def test_allocate_for_instance(self):
- address = "10.10.10.10"
- self.flags(auto_assign_floating_ip=True)
+ def setUp(self):
+ super(AllocateTestCase, self).setUp()
self.conductor = self.start_service(
'conductor', manager=CONF.conductor.manager)
self.compute = self.start_service('compute')
@@ -1599,6 +1598,10 @@ class AllocateTestCase(test.TestCase):
self.project_id,
is_admin=True)
+ def test_allocate_for_instance(self):
+ address = "10.10.10.10"
+ self.flags(auto_assign_floating_ip=True)
+
db.floating_ip_create(self.context,
{'address': address,
'pool': 'nova'})
@@ -1613,7 +1616,7 @@ class AllocateTestCase(test.TestCase):
nw_info = self.network.allocate_for_instance(self.context,
instance_id=inst['id'], instance_uuid=inst['uuid'],
host=inst['host'], vpn=None, rxtx_factor=3,
- project_id=project_id)
+ project_id=project_id, macs=None)
self.assertEquals(1, len(nw_info))
fixed_ip = nw_info.fixed_ips()[0]['address']
self.assertTrue(utils.is_valid_ipv4(fixed_ip))
@@ -1623,6 +1626,44 @@ class AllocateTestCase(test.TestCase):
host=self.network.host,
project_id=project_id)
+ def test_allocate_for_instance_with_mac(self):
+ available_macs = set(['ca:fe:de:ad:be:ef'])
+ inst = db.instance_create(self.context, {'host': self.compute.host,
+ 'display_name': HOST,
+ 'instance_type_id': 1})
+ networks = db.network_get_all(self.context)
+ for network in networks:
+ db.network_update(self.context, network['id'],
+ {'host': self.network.host})
+ project_id = self.context.project_id
+ nw_info = self.network.allocate_for_instance(self.context,
+ instance_id=inst['id'], instance_uuid=inst['uuid'],
+ host=inst['host'], vpn=None, rxtx_factor=3,
+ project_id=project_id, macs=available_macs)
+ assigned_macs = [vif['address'] for vif in nw_info]
+ self.assertEquals(1, len(assigned_macs))
+ self.assertEquals(available_macs.pop(), assigned_macs[0])
+ self.network.deallocate_for_instance(self.context,
+ instance_id=inst['id'],
+ host=self.network.host,
+ project_id=project_id)
+
+ def test_allocate_for_instance_not_enough_macs(self):
+ available_macs = set()
+ inst = db.instance_create(self.context, {'host': self.compute.host,
+ 'display_name': HOST,
+ 'instance_type_id': 1})
+ networks = db.network_get_all(self.context)
+ for network in networks:
+ db.network_update(self.context, network['id'],
+ {'host': self.network.host})
+ project_id = self.context.project_id
+ self.assertRaises(exception.VirtualInterfaceCreateException,
+ self.network.allocate_for_instance, self.context,
+ instance_id=inst['id'], instance_uuid=inst['uuid'],
+ host=inst['host'], vpn=None, rxtx_factor=3,
+ project_id=project_id, macs=available_macs)
+
class FloatingIPTestCase(test.TestCase):
"""Tests nova.network.manager.FloatingIP."""
@@ -2052,7 +2093,7 @@ class FloatingIPTestCase(test.TestCase):
# Attempt to add another and make sure that both MACs are consumed
# by the retry loop
- self.network.add_virtual_interface(ctxt, 'fake_uuid', 'fake_net')
+ self.network._add_virtual_interface(ctxt, 'fake_uuid', 'fake_net')
self.assertEqual(macs, [])
def test_deallocate_client_exceptions(self):
diff --git a/nova/tests/network/test_rpcapi.py b/nova/tests/network/test_rpcapi.py
index 5ba7459fb..132d5a433 100644
--- a/nova/tests/network/test_rpcapi.py
+++ b/nova/tests/network/test_rpcapi.py
@@ -161,7 +161,8 @@ class NetworkRpcAPITestCase(test.TestCase):
self._test_network_api('allocate_for_instance', rpc_method='call',
instance_id='fake_id', instance_uuid='fake_uuid',
project_id='fake_id', host='fake_host',
- rxtx_factor='fake_factor', vpn=False, requested_networks={})
+ rxtx_factor='fake_factor', vpn=False, requested_networks={},
+ macs=set(), version="1.8")
def test_deallocate_for_instance(self):
self._test_network_api('deallocate_for_instance', rpc_method='call',
diff --git a/nova/tests/test_xenapi.py b/nova/tests/test_xenapi.py
index c480d5c5f..9285da2b2 100644
--- a/nova/tests/test_xenapi.py
+++ b/nova/tests/test_xenapi.py
@@ -855,7 +855,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
host=CONF.host,
vpn=None,
rxtx_factor=3,
- project_id=self.project_id)
+ project_id=self.project_id,
+ macs=None)
self._test_spawn(IMAGE_MACHINE,
IMAGE_KERNEL,
IMAGE_RAMDISK,