42
42
product_id = 'p1' , vendor_id = 'v1' )
43
43
fake_pci_2 = dict (fake_pci , address = '0000:00:00.3' )
44
44
45
+ fake_pci_devs = [fake_pci , fake_pci_1 , fake_pci_2 ]
46
+
45
47
fake_pci_3 = dict (fake_pci , address = '0000:00:01.1' ,
46
48
dev_type = fields .PciDeviceType .SRIOV_PF ,
47
49
vendor_id = 'v2' , product_id = 'p2' , numa_node = None )
53
55
dev_type = fields .PciDeviceType .SRIOV_VF ,
54
56
parent_addr = '0000:00:01.1' ,
55
57
vendor_id = 'v2' , product_id = 'p2' , numa_node = None )
58
+ fake_pci_devs_tree = [fake_pci_3 , fake_pci_4 , fake_pci_5 ]
56
59
57
60
fake_db_dev = {
58
61
'created_at' : None ,
@@ -142,22 +145,22 @@ def _create_pci_requests_object(self, requests,
142
145
requests = pci_reqs )
143
146
144
147
def _create_tracker (self , fake_devs ):
145
- self .fake_devs = fake_devs
148
+ self .fake_devs = copy . deepcopy ( fake_devs )
146
149
self .tracker = manager .PciDevTracker (
147
150
self .fake_context , objects .ComputeNode (id = 1 , numa_topology = None ))
148
151
149
152
def setUp (self ):
150
153
super (PciDevTrackerTestCase , self ).setUp ()
151
154
self .fake_context = context .get_admin_context ()
152
- self .fake_devs = fake_db_devs [:]
155
+ self .fake_devs = copy . deepcopy ( fake_db_devs )
153
156
self .stub_out ('nova.db.main.api.pci_device_get_all_by_node' ,
154
157
self ._fake_get_pci_devices )
155
158
# The fake_pci_whitelist must be called before creating the fake
156
159
# devices
157
160
patcher = pci_fakes .fake_pci_whitelist ()
158
161
self .addCleanup (patcher .stop )
159
162
self ._create_fake_instance ()
160
- self ._create_tracker (fake_db_devs [:] )
163
+ self ._create_tracker (fake_db_devs )
161
164
162
165
def test_pcidev_tracker_create (self ):
163
166
self .assertEqual (len (self .tracker .pci_devs ), 3 )
@@ -266,9 +269,8 @@ def test_update_devices_from_hypervisor_resources_32bit_domain(
266
269
267
270
def test_set_hvdev_new_dev (self ):
268
271
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 ))
272
274
self .assertEqual (len (self .tracker .pci_devs ), 4 )
273
275
self .assertEqual (set ([dev .address for
274
276
dev in self .tracker .pci_devs ]),
@@ -284,11 +286,8 @@ def test_set_hvdev_new_dev_tree_maintained(self):
284
286
self ._create_tracker (fake_db_devs_tree )
285
287
286
288
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 ))
292
291
self .assertEqual (len (self .tracker .pci_devs ), 4 )
293
292
294
293
pf = [dev for dev in self .tracker .pci_devs
@@ -304,15 +303,14 @@ def test_set_hvdev_new_dev_tree_maintained(self):
304
303
305
304
def test_set_hvdev_changed (self ):
306
305
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 ))
310
308
self .assertEqual (set ([dev .vendor_id for
311
309
dev in self .tracker .pci_devs ]),
312
310
set (['v' , 'v1' ]))
313
311
314
312
def test_set_hvdev_remove (self ):
315
- self .tracker ._set_hvdevs ([fake_pci ])
313
+ self .tracker ._set_hvdevs (copy . deepcopy ( [fake_pci ]) )
316
314
self .assertEqual (
317
315
len ([dev for dev in self .tracker .pci_devs
318
316
if dev .status == fields .PciDeviceStatus .REMOVED ]),
@@ -324,8 +322,8 @@ def test_set_hvdev_remove_tree_maintained(self):
324
322
# from previous scans)
325
323
self ._create_tracker (fake_db_devs_tree )
326
324
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 ) )
329
327
self .assertEqual (
330
328
2 ,
331
329
len ([dev for dev in self .tracker .pci_devs
@@ -344,8 +342,9 @@ def test_set_hvdev_remove_tree_maintained_with_allocations(self):
344
342
# Make sure the device tree is properly maintained when there are
345
343
# devices removed from the system that are allocated to vms.
346
344
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 )
349
348
# we start with 3 devices
350
349
self .assertEqual (
351
350
3 ,
@@ -358,18 +357,18 @@ def test_set_hvdev_remove_tree_maintained_with_allocations(self):
358
357
claimed_dev = self .tracker .claim_instance (
359
358
mock .sentinel .context , pci_requests_obj , None )[0 ]
360
359
361
- self .tracker ._set_hvdevs (all_devs )
360
+ self .tracker ._set_hvdevs (copy . deepcopy ( all_pci_devs ) )
362
361
# and assert that no devices were removed
363
362
self .assertEqual (
364
363
0 ,
365
364
len ([dev for dev in self .tracker .pci_devs
366
365
if dev .status == fields .PciDeviceStatus .REMOVED ]))
367
366
# we then try to remove the allocated device from the set reported
368
367
# by the driver.
369
- fake_pci_devs = [dev for dev in all_devs
368
+ fake_pci_devs = [dev for dev in all_pci_devs
370
369
if dev ['address' ] != claimed_dev .address ]
371
370
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 ) )
373
372
log .assert_called_once ()
374
373
args = log .call_args_list [0 ][0 ] # args of first call
375
374
self .assertIn ('Unable to remove device with' , args [0 ])
@@ -380,7 +379,7 @@ def test_set_hvdev_remove_tree_maintained_with_allocations(self):
380
379
if dev .status == fields .PciDeviceStatus .REMOVED ]))
381
380
# free the device that was allocated and update tracker again
382
381
self .tracker ._free_device (claimed_dev )
383
- self .tracker ._set_hvdevs (fake_pci_devs )
382
+ self .tracker ._set_hvdevs (copy . deepcopy ( fake_pci_devs ) )
384
383
# and assert that one device is removed from the tracker
385
384
self .assertEqual (
386
385
1 ,
@@ -393,9 +392,8 @@ def test_set_hvdev_changed_stal(self):
393
392
self .tracker .claim_instance (mock .sentinel .context ,
394
393
pci_requests_obj , None )
395
394
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 ))
399
397
self .assertEqual (len (self .tracker .stale ), 1 )
400
398
self .assertEqual (self .tracker .stale ['0000:00:00.2' ]['vendor_id' ], 'v2' )
401
399
@@ -424,13 +422,13 @@ def test_update_pci_for_instance_fail(self):
424
422
self .assertIsNone (devs )
425
423
426
424
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 )
430
428
self .tracker = manager .PciDevTracker (
431
429
mock .sentinel .context ,
432
430
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 ) )
434
432
pci_requests = copy .deepcopy (fake_pci_requests )[:1 ]
435
433
pci_requests [0 ]['count' ] = 2
436
434
pci_requests_obj = self ._create_pci_requests_object (pci_requests )
@@ -477,9 +475,8 @@ def test_save(self, migrate_mock):
477
475
'nova.db.main.api.pci_device_update' ,
478
476
self ._fake_pci_device_update )
479
477
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 ))
483
480
self .update_called = 0
484
481
self .tracker .save (self .fake_context )
485
482
self .assertEqual (self .update_called , 3 )
0 commit comments