Skip to content

Commit 2d5ae25

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Isolate PCI tracker unit tests" into stable/yoga
2 parents cb0302c + f04cfd4 commit 2d5ae25

File tree

1 file changed

+30
-33
lines changed

1 file changed

+30
-33
lines changed

nova/tests/unit/pci/test_manager.py

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
product_id='p1', vendor_id='v1')
4343
fake_pci_2 = dict(fake_pci, address='0000:00:00.3')
4444

45+
fake_pci_devs = [fake_pci, fake_pci_1, fake_pci_2]
46+
4547
fake_pci_3 = dict(fake_pci, address='0000:00:01.1',
4648
dev_type=fields.PciDeviceType.SRIOV_PF,
4749
vendor_id='v2', product_id='p2', numa_node=None)
@@ -53,6 +55,7 @@
5355
dev_type=fields.PciDeviceType.SRIOV_VF,
5456
parent_addr='0000:00:01.1',
5557
vendor_id='v2', product_id='p2', numa_node=None)
58+
fake_pci_devs_tree = [fake_pci_3, fake_pci_4, fake_pci_5]
5659

5760
fake_db_dev = {
5861
'created_at': None,
@@ -142,22 +145,22 @@ def _create_pci_requests_object(self, requests,
142145
requests=pci_reqs)
143146

144147
def _create_tracker(self, fake_devs):
145-
self.fake_devs = fake_devs
148+
self.fake_devs = copy.deepcopy(fake_devs)
146149
self.tracker = manager.PciDevTracker(
147150
self.fake_context, objects.ComputeNode(id=1, numa_topology=None))
148151

149152
def setUp(self):
150153
super(PciDevTrackerTestCase, self).setUp()
151154
self.fake_context = context.get_admin_context()
152-
self.fake_devs = fake_db_devs[:]
155+
self.fake_devs = copy.deepcopy(fake_db_devs)
153156
self.stub_out('nova.db.main.api.pci_device_get_all_by_node',
154157
self._fake_get_pci_devices)
155158
# The fake_pci_whitelist must be called before creating the fake
156159
# devices
157160
patcher = pci_fakes.fake_pci_whitelist()
158161
self.addCleanup(patcher.stop)
159162
self._create_fake_instance()
160-
self._create_tracker(fake_db_devs[:])
163+
self._create_tracker(fake_db_devs)
161164

162165
def test_pcidev_tracker_create(self):
163166
self.assertEqual(len(self.tracker.pci_devs), 3)
@@ -266,9 +269,8 @@ def test_update_devices_from_hypervisor_resources_32bit_domain(
266269

267270
def test_set_hvdev_new_dev(self):
268271
fake_pci_3 = dict(fake_pci, address='0000:00:00.4', vendor_id='v2')
269-
fake_pci_devs = [copy.deepcopy(fake_pci), copy.deepcopy(fake_pci_1),
270-
copy.deepcopy(fake_pci_2), copy.deepcopy(fake_pci_3)]
271-
self.tracker._set_hvdevs(fake_pci_devs)
272+
fake_pci_devs = [fake_pci, fake_pci_1, fake_pci_2, fake_pci_3]
273+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
272274
self.assertEqual(len(self.tracker.pci_devs), 4)
273275
self.assertEqual(set([dev.address for
274276
dev in self.tracker.pci_devs]),
@@ -284,11 +286,8 @@ def test_set_hvdev_new_dev_tree_maintained(self):
284286
self._create_tracker(fake_db_devs_tree)
285287

286288
fake_new_device = dict(fake_pci_5, id=12, address='0000:00:02.3')
287-
fake_pci_devs = [copy.deepcopy(fake_pci_3),
288-
copy.deepcopy(fake_pci_4),
289-
copy.deepcopy(fake_pci_5),
290-
copy.deepcopy(fake_new_device)]
291-
self.tracker._set_hvdevs(fake_pci_devs)
289+
fake_pci_devs = [fake_pci_3, fake_pci_4, fake_pci_5, fake_new_device]
290+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
292291
self.assertEqual(len(self.tracker.pci_devs), 4)
293292

294293
pf = [dev for dev in self.tracker.pci_devs
@@ -304,15 +303,14 @@ def test_set_hvdev_new_dev_tree_maintained(self):
304303

305304
def test_set_hvdev_changed(self):
306305
fake_pci_v2 = dict(fake_pci, address='0000:00:00.2', vendor_id='v1')
307-
fake_pci_devs = [copy.deepcopy(fake_pci), copy.deepcopy(fake_pci_2),
308-
copy.deepcopy(fake_pci_v2)]
309-
self.tracker._set_hvdevs(fake_pci_devs)
306+
fake_pci_devs = [fake_pci, fake_pci_2, fake_pci_v2]
307+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
310308
self.assertEqual(set([dev.vendor_id for
311309
dev in self.tracker.pci_devs]),
312310
set(['v', 'v1']))
313311

314312
def test_set_hvdev_remove(self):
315-
self.tracker._set_hvdevs([fake_pci])
313+
self.tracker._set_hvdevs(copy.deepcopy([fake_pci]))
316314
self.assertEqual(
317315
len([dev for dev in self.tracker.pci_devs
318316
if dev.status == fields.PciDeviceStatus.REMOVED]),
@@ -324,8 +322,8 @@ def test_set_hvdev_remove_tree_maintained(self):
324322
# from previous scans)
325323
self._create_tracker(fake_db_devs_tree)
326324

327-
fake_pci_devs = [copy.deepcopy(fake_pci_3), copy.deepcopy(fake_pci_4)]
328-
self.tracker._set_hvdevs(fake_pci_devs)
325+
fake_pci_devs = [fake_pci_3, fake_pci_4]
326+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
329327
self.assertEqual(
330328
2,
331329
len([dev for dev in self.tracker.pci_devs
@@ -344,8 +342,9 @@ def test_set_hvdev_remove_tree_maintained_with_allocations(self):
344342
# Make sure the device tree is properly maintained when there are
345343
# devices removed from the system that are allocated to vms.
346344

347-
all_devs = fake_db_devs_tree[:]
348-
self._create_tracker(all_devs)
345+
all_db_devs = fake_db_devs_tree
346+
all_pci_devs = fake_pci_devs_tree
347+
self._create_tracker(all_db_devs)
349348
# we start with 3 devices
350349
self.assertEqual(
351350
3,
@@ -358,18 +357,18 @@ def test_set_hvdev_remove_tree_maintained_with_allocations(self):
358357
claimed_dev = self.tracker.claim_instance(
359358
mock.sentinel.context, pci_requests_obj, None)[0]
360359

361-
self.tracker._set_hvdevs(all_devs)
360+
self.tracker._set_hvdevs(copy.deepcopy(all_pci_devs))
362361
# and assert that no devices were removed
363362
self.assertEqual(
364363
0,
365364
len([dev for dev in self.tracker.pci_devs
366365
if dev.status == fields.PciDeviceStatus.REMOVED]))
367366
# we then try to remove the allocated device from the set reported
368367
# by the driver.
369-
fake_pci_devs = [dev for dev in all_devs
368+
fake_pci_devs = [dev for dev in all_pci_devs
370369
if dev['address'] != claimed_dev.address]
371370
with mock.patch("nova.pci.manager.LOG.warning") as log:
372-
self.tracker._set_hvdevs(fake_pci_devs)
371+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
373372
log.assert_called_once()
374373
args = log.call_args_list[0][0] # args of first call
375374
self.assertIn('Unable to remove device with', args[0])
@@ -380,7 +379,7 @@ def test_set_hvdev_remove_tree_maintained_with_allocations(self):
380379
if dev.status == fields.PciDeviceStatus.REMOVED]))
381380
# free the device that was allocated and update tracker again
382381
self.tracker._free_device(claimed_dev)
383-
self.tracker._set_hvdevs(fake_pci_devs)
382+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
384383
# and assert that one device is removed from the tracker
385384
self.assertEqual(
386385
1,
@@ -393,9 +392,8 @@ def test_set_hvdev_changed_stal(self):
393392
self.tracker.claim_instance(mock.sentinel.context,
394393
pci_requests_obj, None)
395394
fake_pci_3 = dict(fake_pci, address='0000:00:00.2', vendor_id='v2')
396-
fake_pci_devs = [copy.deepcopy(fake_pci), copy.deepcopy(fake_pci_2),
397-
copy.deepcopy(fake_pci_3)]
398-
self.tracker._set_hvdevs(fake_pci_devs)
395+
fake_pci_devs = [fake_pci, fake_pci_2, fake_pci_3]
396+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
399397
self.assertEqual(len(self.tracker.stale), 1)
400398
self.assertEqual(self.tracker.stale['0000:00:00.2']['vendor_id'], 'v2')
401399

@@ -424,13 +422,13 @@ def test_update_pci_for_instance_fail(self):
424422
self.assertIsNone(devs)
425423

426424
def test_pci_claim_instance_with_numa(self):
427-
fake_db_dev_3 = dict(fake_db_dev_1, id=4, address='0000:00:00.4')
428-
fake_devs_numa = copy.deepcopy(fake_db_devs)
429-
fake_devs_numa.append(fake_db_dev_3)
425+
fake_pci_3 = dict(fake_pci_1, address='0000:00:00.4')
426+
fake_devs_numa = copy.deepcopy(fake_pci_devs)
427+
fake_devs_numa.append(fake_pci_3)
430428
self.tracker = manager.PciDevTracker(
431429
mock.sentinel.context,
432430
objects.ComputeNode(id=1, numa_topology=None))
433-
self.tracker._set_hvdevs(fake_devs_numa)
431+
self.tracker._set_hvdevs(copy.deepcopy(fake_devs_numa))
434432
pci_requests = copy.deepcopy(fake_pci_requests)[:1]
435433
pci_requests[0]['count'] = 2
436434
pci_requests_obj = self._create_pci_requests_object(pci_requests)
@@ -477,9 +475,8 @@ def test_save(self, migrate_mock):
477475
'nova.db.main.api.pci_device_update',
478476
self._fake_pci_device_update)
479477
fake_pci_v3 = dict(fake_pci, address='0000:00:00.2', vendor_id='v3')
480-
fake_pci_devs = [copy.deepcopy(fake_pci), copy.deepcopy(fake_pci_2),
481-
copy.deepcopy(fake_pci_v3)]
482-
self.tracker._set_hvdevs(fake_pci_devs)
478+
fake_pci_devs = [fake_pci, fake_pci_2, fake_pci_v3]
479+
self.tracker._set_hvdevs(copy.deepcopy(fake_pci_devs))
483480
self.update_called = 0
484481
self.tracker.save(self.fake_context)
485482
self.assertEqual(self.update_called, 3)

0 commit comments

Comments
 (0)