Esempio n. 1
0
 def test_from_db_obj_pre_1_4_format(self):
     ctxt = context.get_admin_context()
     dev = pci_device.PciDevice._from_db_object(ctxt,
                                                pci_device.PciDevice(),
                                                fake_db_dev_old)
     self.assertEqual('blah', dev.parent_addr)
     self.assertEqual({'phys_function': 'blah'}, dev.extra_info)
Esempio n. 2
0
 def test_dev_type_vdpa_1_6(self):
     ctxt = context.get_admin_context()
     fake_dev = copy.deepcopy(fake_db_dev)
     fake_dev['dev_type'] = fields.PciDeviceType.STANDARD
     dev = pci_device.PciDevice._from_db_object(
         ctxt, pci_device.PciDevice(), fake_dev)
     dev.obj_make_compatible(dev.obj_to_primitive(), '1.6')
     self.assertEqual(dev.dev_type, fake_dev['dev_type'])
Esempio n. 3
0
 def setUp(self):
     super(PciDeviceTestCase, self).setUp()
     self.ctxt = context.get_admin_context()
     self.inst = instance.Instance()
     self.inst.uuid = 'fake-inst-uuid'
     self.inst.pci_devices = pci_device_obj.PciDeviceList()
     self.devobj = pci_device_obj.PciDevice._from_db_object(
         self.ctxt, pci_device_obj.PciDevice(), dev_dict)
Esempio n. 4
0
 def test_dev_type_vdpa_1_6_fails(self):
     ctxt = context.get_admin_context()
     fake_dev = copy.deepcopy(fake_db_dev)
     fake_dev['dev_type'] = fields.PciDeviceType.VDPA
     dev = pci_device.PciDevice._from_db_object(
         ctxt, pci_device.PciDevice(), fake_dev)
     self.assertRaises(exception.ObjectActionError,
                       dev.obj_to_primitive, '1.6')
Esempio n. 5
0
 def test_from_db_obj_pre_1_5_format(self):
     ctxt = context.get_admin_context()
     fake_dev_pre_1_5 = copy.deepcopy(fake_db_dev_old)
     fake_dev_pre_1_5['status'] = fields.PciDeviceStatus.UNAVAILABLE
     dev = pci_device.PciDevice._from_db_object(
         ctxt, pci_device.PciDevice(), fake_dev_pre_1_5)
     self.assertRaises(exception.ObjectActionError,
                       dev.obj_to_primitive, '1.4')
Esempio n. 6
0
 def test_save_empty_parent_addr(self):
     ctxt = context.get_admin_context()
     dev = pci_device.PciDevice._from_db_object(
         ctxt, pci_device.PciDevice(), fake_db_dev)
     dev.parent_addr = None
     with mock.patch.object(db, 'pci_device_update',
                            return_value=fake_db_dev):
         dev.save()
         self.assertIsNone(dev.parent_addr)
         self.assertEqual({}, dev.extra_info)
Esempio n. 7
0
 def test_save_migrate_parent_addr(self, get_min_ver_mock):
     ctxt = context.get_admin_context()
     dev = pci_device.PciDevice._from_db_object(
         ctxt, pci_device.PciDevice(), fake_db_dev_old)
     with mock.patch.object(db, 'pci_device_update',
                            return_value=fake_db_dev_old) as update_mock:
         dev.save()
         update_mock.assert_called_once_with(
             ctxt, dev.compute_node_id, dev.address,
             {'extra_info': '{}', 'parent_addr': 'blah'})
Esempio n. 8
0
 def test_save_RHOS_6_0_format_no_numa(self):
     ctxt = context.get_admin_context
     kw = {'compute_node_id': 1, 'address': 'a',
           'status': 'available', 'numa_node': 1}
     self.pci_device = pci_device.PciDevice(ctxt, **kw)
     self.pci_device.obj_reset_changes()
     self.mox.StubOutWithMock(db, 'pci_device_update')
     expected_updates = {'extra_info': '{}'}
     self.pci_device.save()
     self.assertRemotes()
Esempio n. 9
0
 def test_free_allocated_device(self):
     self._create_fake_instance()
     ctx = context.get_admin_context()
     devobj = pci_device.PciDevice._from_db_object(ctx,
                                                   pci_device.PciDevice(),
                                                   fake_db_dev)
     devobj.claim(self.inst)
     devobj.allocate(self.inst)
     self.assertEqual(len(self.inst.pci_devices), 1)
     devobj.free(self.inst)
     self.assertEqual(len(self.inst.pci_devices), 0)
     self.assertEqual(devobj.status, fields.PciDeviceStatus.AVAILABLE)
     self.assertIsNone(devobj.instance_uuid)
Esempio n. 10
0
    def test_from_db_obj_missing_uuid(self, mock_create_uuid):
        """Ensure a UUID is generated if it's not present."""
        ctxt = context.get_admin_context()
        fake_dev_no_uuid = copy.deepcopy(fake_db_dev)
        fake_dev_no_uuid['uuid'] = None

        dev = pci_device.PciDevice._from_db_object(
            ctxt, pci_device.PciDevice(), fake_dev_no_uuid)

        # UUID should have been populated
        self.assertIn('uuid', dev)
        self.assertIsNotNone(dev.uuid)
        self.assertEqual(1, mock_create_uuid.call_count)
Esempio n. 11
0
 def test_save_migrate_parent_addr_updated(self, get_min_ver_mock):
     ctxt = context.get_admin_context()
     dev = pci_device.PciDevice._from_db_object(
         ctxt, pci_device.PciDevice(), fake_db_dev_old)
     # Note that the pci manager code will never update parent_addr alone,
     # but we want to make it future proof so we guard against it
     dev.parent_addr = 'doh!'
     with mock.patch.object(db, 'pci_device_update',
                            return_value=fake_db_dev_old) as update_mock:
         dev.save()
         update_mock.assert_called_once_with(
             ctxt, dev.compute_node_id, dev.address,
             {'extra_info': '{}', 'parent_addr': 'doh!'})
Esempio n. 12
0
 def test_save_dont_migrate_parent_addr(self, get_min_ver_mock):
     ctxt = context.get_admin_context()
     dev = pci_device.PciDevice._from_db_object(
         ctxt, pci_device.PciDevice(), fake_db_dev_old)
     dev.extra_info['other'] = "blahtoo"
     with mock.patch.object(db, 'pci_device_update',
                            return_value=fake_db_dev_old) as update_mock:
         dev.save()
         self.assertEqual("blah",
                          update_mock.call_args[0][3]['parent_addr'])
         self.assertIn("phys_function",
                       update_mock.call_args[0][3]['extra_info'])
         self.assertIn("other",
                       update_mock.call_args[0][3]['extra_info'])
Esempio n. 13
0
 def test_save_RHOS_6_0_format_numa_field_set(self):
     ctxt = context.get_admin_context
     kw = {'compute_node_id': 1, 'address': 'a',
           'status': 'available', 'numa_node': 1}
     self.pci_device = pci_device.PciDevice(ctxt, **kw)
     self.pci_device.obj_reset_changes()
     self.pci_device['extra_info'] = {'numa_node': 0}
     self.mox.StubOutWithMock(db, 'pci_device_update')
     expected_updates = {'extra_info': '{}'}
     db.pci_device_update(ctxt, 1, 'a',
                          expected_updates).AndReturn(fake_db_dev_1)
     self.mox.ReplayAll()
     self.pci_device.save()
     self.assertEqual(self.pci_device.numa_node, 1)
     self.assertEqual(self.pci_device.extra_info, {})
     self.assertRemotes()