@@ -1289,6 +1289,7 @@ def test_get_root_info_no_bdm_empty_image_meta(self, mock_find_dev):
1289
1289
1290
1290
@mock .patch ('nova.virt.libvirt.blockinfo.get_info_from_bdm' )
1291
1291
def test_get_root_info_bdm (self , mock_get_info ):
1292
+ # call get_root_info() with DriverBlockDevice
1292
1293
instance = objects .Instance (** self .test_instance )
1293
1294
image_meta = objects .ImageMeta .from_dict (self .test_image_meta )
1294
1295
root_bdm = {'mount_device' : '/dev/vda' ,
@@ -1318,6 +1319,49 @@ def test_get_root_info_bdm(self, mock_get_info):
1318
1319
{}, 'virtio' )
1319
1320
mock_get_info .reset_mock ()
1320
1321
1322
+ @mock .patch ('nova.virt.libvirt.blockinfo.get_info_from_bdm' )
1323
+ def test_get_root_info_bdm_with_deepcopy (self , mock_get_info ):
1324
+ # call get_root_info() with BlockDeviceMapping
1325
+ instance = objects .Instance (** self .test_instance )
1326
+ image_meta = objects .ImageMeta .from_dict (self .test_image_meta )
1327
+ root_bdm = objects .BlockDeviceMapping (self .context ,
1328
+ ** fake_block_device .FakeDbBlockDeviceDict (
1329
+ {'id' : 3 , 'instance_uuid' : uuids .instance ,
1330
+ 'device_name' : '/dev/sda' ,
1331
+ 'source_type' : 'blank' ,
1332
+ 'destination_type' : 'local' ,
1333
+ 'device_type' : 'cdrom' ,
1334
+ 'disk_bus' : 'virtio' ,
1335
+ 'volume_id' : 'fake-volume-id-1' ,
1336
+ 'boot_index' : 0 }))
1337
+ # No root_device_name
1338
+ blockinfo .get_root_info (
1339
+ instance , 'kvm' , image_meta , root_bdm , 'virtio' , 'ide' )
1340
+ mock_get_info .assert_called_once_with (
1341
+ instance , 'kvm' , image_meta , root_bdm , {}, 'virtio' )
1342
+ mock_get_info .reset_mock ()
1343
+ # Both device names
1344
+ blockinfo .get_root_info (
1345
+ instance , 'kvm' , image_meta , root_bdm , 'virtio' , 'scsi' ,
1346
+ root_device_name = '/dev/sda' )
1347
+ mock_get_info .assert_called_once_with (
1348
+ instance , 'kvm' , image_meta , root_bdm , {}, 'virtio' )
1349
+ mock_get_info .reset_mock ()
1350
+ # Missing device names
1351
+ original_bdm = copy .deepcopy (root_bdm )
1352
+ root_bdm .device_name = ''
1353
+ blockinfo .get_root_info (
1354
+ instance , 'kvm' , image_meta , root_bdm , 'virtio' , 'scsi' ,
1355
+ root_device_name = '/dev/sda' )
1356
+ mock_get_info .assert_called_with (
1357
+ instance , 'kvm' , image_meta , mock .ANY , {}, 'virtio' )
1358
+ actual_call = mock_get_info .call_args
1359
+ _ , _ , _ , actual_bdm , _ , _ = actual_call [0 ]
1360
+ self .assertEqual (
1361
+ original_bdm .obj_to_primitive (),
1362
+ actual_bdm .obj_to_primitive ()
1363
+ )
1364
+
1321
1365
def test_get_boot_order_simple (self ):
1322
1366
disk_info = {
1323
1367
'disk_bus' : 'virtio' ,
0 commit comments