diff options
| author | Michael J Fork <mjfork@us.ibm.com> | 2013-01-22 22:25:38 +0000 |
|---|---|---|
| committer | Michael J Fork <mjfork@us.ibm.com> | 2013-02-07 11:50:39 +0000 |
| commit | 1abe88c44a7e86e80f56f25dfd71f6df44f25289 (patch) | |
| tree | f5640236a9331ce5ff597e7ee07f3f25567ef24b /nova/tests | |
| parent | fe16fded3d4ecfe71d7d0d0d4adbbb8d3cc0da48 (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.py | 3 | ||||
| -rw-r--r-- | nova/tests/network/test_api.py | 2 | ||||
| -rw-r--r-- | nova/tests/network/test_manager.py | 51 | ||||
| -rw-r--r-- | nova/tests/network/test_rpcapi.py | 3 | ||||
| -rw-r--r-- | nova/tests/test_xenapi.py | 3 |
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, |
