def test_get_instance_pci_request_from_vif_invalid( self, cn_get_by_host_and_node): # Basically make sure we raise an exception if an instance # has an allocated PCI device without having the its corresponding # PCIRequest object in instance.pci_requests mock_inst_cn = mock.Mock() mock_inst_cn.id = 1 cn_get_by_host_and_node.return_value = mock_inst_cn # Create a fake instance with PCI request and allocated PCI devices pci_dev1 = objects.PciDevice(request_id=uuidsentinel.pci_req_id1, address='0000:04:00.0', compute_node_id=1) pci_req2 = objects.InstancePCIRequest( request_id=uuidsentinel.pci_req_id2) pci_dev2 = objects.PciDevice(request_id=uuidsentinel.pci_req_id2, address='0000:05:00.0', compute_node_id=1) pci_request_list = [pci_req2] pci_device_list = [pci_dev1, pci_dev2] inst = PciRequestTestCase._create_fake_inst_with_pci_devs( pci_request_list, pci_device_list) # Create a VIF with pci_dev1 that has no corresponding PCI request pci_vif = model.VIF(vnic_type=model.VNIC_TYPE_DIRECT, profile={'pci_slot': '0000:04:00.0'}) self.assertRaises(exception.PciRequestFromVIFNotFound, request.get_instance_pci_request_from_vif, self.context, inst, pci_vif)
def test_get_instance_pci_request_from_vif(self, cn_get_by_host_and_node): mock_inst_cn = mock.Mock() mock_inst_cn.id = 1 cn_get_by_host_and_node.return_value = mock_inst_cn # Create a fake instance with PCI request and allocated PCI devices pci_req1 = objects.InstancePCIRequest( request_id=uuidsentinel.pci_req_id1) pci_dev1 = objects.PciDevice(request_id=uuidsentinel.pci_req_id1, address='0000:04:00.0', compute_node_id = 1) pci_req2 = objects.InstancePCIRequest( request_id=uuidsentinel.pci_req_id2) pci_dev2 = objects.PciDevice(request_id=uuidsentinel.pci_req_id2, address='0000:05:00.0', compute_node_id=1) pci_request_list = [pci_req1, pci_req2] pci_device_list = [pci_dev1, pci_dev2] inst = PciRequestTestCase._create_fake_inst_with_pci_devs( pci_request_list, pci_device_list) # Create a vif with normal port and make sure no PCI request returned normal_vif = model.VIF(vnic_type=model.VNIC_TYPE_NORMAL) self.assertIsNone(request.get_instance_pci_request_from_vif( self.context, inst, normal_vif)) # Create a vif with PCI address under profile, make sure the correct # PCI request is returned pci_vif = model.VIF(vnic_type=model.VNIC_TYPE_DIRECT, profile={'pci_slot': '0000:05:00.0'}) self.assertEqual(uuidsentinel.pci_req_id2, request.get_instance_pci_request_from_vif( self.context, inst, pci_vif).request_id) # Create a vif with PCI under profile which is not claimed # for the instance, i.e no matching pci device in instance.pci_devices nonclaimed_pci_vif = model.VIF(vnic_type=model.VNIC_TYPE_DIRECT, profile={'pci_slot': '0000:08:00.0'}) self.assertIsNone(request.get_instance_pci_request_from_vif( self.context, inst, nonclaimed_pci_vif)) # "Move" the instance to another compute node, make sure that no # matching PCI request against the new compute. mock_inst_cn.id = 2 self.assertIsNone(request.get_instance_pci_request_from_vif( self.context, inst, pci_vif))
def get_fake_migration_context_with_pci_devs(ctxt=None): obj = get_fake_migration_context_obj(ctxt) obj.old_pci_devices = objects.PciDeviceList( objects=[objects.PciDevice(vendor_id='1377', product_id='0047', address='0000:0a:00.1', compute_node_id=1, request_id=uuids.pcidev)]) obj.new_pci_devices = objects.PciDeviceList( objects=[objects.PciDevice(vendor_id='1377', product_id='0047', address='0000:0b:00.1', compute_node_id=2, request_id=uuids.pcidev)]) return obj
def setUp(self): super(PciDeviceTestCase, self).setUp() self.ctxt = context.get_admin_context() self.inst = objects.Instance() self.inst.uuid = 'fake-inst-uuid' self.inst.pci_devices = objects.PciDeviceList() self.devobj = objects.PciDevice._from_db_object( self.ctxt, objects.PciDevice(), dev_dict)