@@ -1289,6 +1289,7 @@ def test_get_root_info_no_bdm_empty_image_meta(self, mock_find_dev):
12891289
12901290 @mock .patch ('nova.virt.libvirt.blockinfo.get_info_from_bdm' )
12911291 def test_get_root_info_bdm (self , mock_get_info ):
1292+ # call get_root_info() with DriverBlockDevice
12921293 instance = objects .Instance (** self .test_instance )
12931294 image_meta = objects .ImageMeta .from_dict (self .test_image_meta )
12941295 root_bdm = {'mount_device' : '/dev/vda' ,
@@ -1318,6 +1319,49 @@ def test_get_root_info_bdm(self, mock_get_info):
13181319 {}, 'virtio' )
13191320 mock_get_info .reset_mock ()
13201321
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+
13211365 def test_get_boot_order_simple (self ):
13221366 disk_info = {
13231367 'disk_bus' : 'virtio' ,
0 commit comments