summaryrefslogtreecommitdiff
path: root/nova/tests/unit/virt/ironic/test_driver.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/tests/unit/virt/ironic/test_driver.py')
-rw-r--r--nova/tests/unit/virt/ironic/test_driver.py66
1 files changed, 64 insertions, 2 deletions
diff --git a/nova/tests/unit/virt/ironic/test_driver.py b/nova/tests/unit/virt/ironic/test_driver.py
index 4712bc3537..71039f1e49 100644
--- a/nova/tests/unit/virt/ironic/test_driver.py
+++ b/nova/tests/unit/virt/ironic/test_driver.py
@@ -1707,13 +1707,75 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
request_context=None)
@mock.patch.object(FAKE_CLIENT.node, 'list_ports')
- def test_generate_network_metadata_ports_only(
- self, mock_ports, mock_cd_builder, mock_instance_meta):
+ @mock.patch.object(FAKE_CLIENT.portgroup, 'list')
+ def _test_generate_network_metadata(self, mock_portgroups, mock_ports,
+ address=None, vif_internal_info=True):
+ internal_info = ({'tenant_vif_port_id': utils.FAKE_VIF_UUID}
+ if vif_internal_info else {})
+ extra = ({'vif_port_id': utils.FAKE_VIF_UUID}
+ if not vif_internal_info else {})
+ portgroup = ironic_utils.get_test_portgroup(
+ node_uuid=self.node.uuid, address=address,
+ extra=extra, internal_info=internal_info,
+ properties={'bond_miimon': 100, 'xmit_hash_policy': 'layer3+4'}
+ )
+ port1 = ironic_utils.get_test_port(uuid=uuidutils.generate_uuid(),
+ node_uuid=self.node.uuid,
+ address='00:00:00:00:00:01',
+ portgroup_uuid=portgroup.uuid)
+ port2 = ironic_utils.get_test_port(uuid=uuidutils.generate_uuid(),
+ node_uuid=self.node.uuid,
+ address='00:00:00:00:00:02',
+ portgroup_uuid=portgroup.uuid)
+ mock_ports.return_value = [port1, port2]
+ mock_portgroups.return_value = [portgroup]
+
+ metadata = self.driver._get_network_metadata(self.node,
+ self.network_info)
+
+ pg_vif = metadata['links'][0]
+ self.assertEqual('bond', pg_vif['type'])
+ self.assertEqual('active-backup', pg_vif['bond_mode'])
+ self.assertEqual(address if address else utils.FAKE_VIF_MAC,
+ pg_vif['ethernet_mac_address'])
+ self.assertEqual('layer3+4',
+ pg_vif['bond_xmit_hash_policy'])
+ self.assertEqual(100, pg_vif['bond_miimon'])
+ self.assertEqual([port1.uuid, port2.uuid],
+ pg_vif['bond_links'])
+ self.assertEqual([{'id': port1.uuid, 'type': 'phy',
+ 'ethernet_mac_address': port1.address},
+ {'id': port2.uuid, 'type': 'phy',
+ 'ethernet_mac_address': port2.address}],
+ metadata['links'][1:])
+ # assert there are no duplicate links
+ link_ids = [link['id'] for link in metadata['links']]
+ self.assertEqual(len(set(link_ids)), len(link_ids),
+ 'There are duplicate link IDs: %s' % link_ids)
+
+ def test_generate_network_metadata_with_pg_address(self, mock_cd_builder,
+ mock_instance_meta):
+ self._test_generate_network_metadata(address='00:00:00:00:00:00')
+
+ def test_generate_network_metadata_no_pg_address(self, mock_cd_builder,
+ mock_instance_meta):
+ self._test_generate_network_metadata()
+
+ def test_generate_network_metadata_vif_in_extra(self, mock_cd_builder,
+ mock_instance_meta):
+ self._test_generate_network_metadata(vif_internal_info=False)
+
+ @mock.patch.object(FAKE_CLIENT.node, 'list_ports')
+ @mock.patch.object(FAKE_CLIENT.portgroup, 'list')
+ def test_generate_network_metadata_ports_only(self, mock_portgroups,
+ mock_ports, mock_cd_builder,
+ mock_instance_meta):
address = self.network_info[0]['address']
port = ironic_utils.get_test_port(
node_uuid=self.node.uuid, address=address,
internal_info={'tenant_vif_port_id': utils.FAKE_VIF_UUID})
mock_ports.return_value = [port]
+ mock_portgroups.return_value = []
metadata = self.driver._get_network_metadata(self.node,
self.network_info)