@@ -520,6 +520,36 @@ def test_tagged_volume_attach_new_flow(
520
520
mock_attach .assert_called_once_with (self .context ,
521
521
instance , fake_bdm )
522
522
523
+ @mock .patch .object (compute_rpcapi .ComputeAPI , 'reserve_block_device_name' )
524
+ @mock .patch .object (
525
+ objects .BlockDeviceMapping , 'get_by_volume_and_instance' )
526
+ @mock .patch .object (objects .BlockDeviceMappingList , 'get_by_volume' )
527
+ def test_attach_volume_reserve_bdm_timeout (
528
+ self , mock_get_by_volume , mock_get_by_volume_and_instance ,
529
+ mock_reserve ):
530
+ mock_get_by_volume .side_effect = exception .VolumeBDMNotFound (
531
+ volume_id = 'fake-volume-id' )
532
+
533
+ fake_bdm = mock .MagicMock (spec = objects .BlockDeviceMapping )
534
+ mock_get_by_volume_and_instance .return_value = fake_bdm
535
+ instance = self ._create_instance_obj ()
536
+ volume = fake_volume .fake_volume (1 , 'test-vol' , 'test-vol' ,
537
+ None , None , None , None , None )
538
+
539
+ mock_reserve .side_effect = oslo_exceptions .MessagingTimeout ()
540
+
541
+ mock_volume_api = mock .patch .object (self .compute_api , 'volume_api' ,
542
+ mock .MagicMock (spec = cinder .API ))
543
+
544
+ with mock_volume_api as mock_v_api :
545
+ mock_v_api .get .return_value = volume
546
+ self .assertRaises (oslo_exceptions .MessagingTimeout ,
547
+ self .compute_api .attach_volume ,
548
+ self .context , instance , volume ['id' ])
549
+ mock_get_by_volume_and_instance .assert_called_once_with (
550
+ self .context , volume ['id' ], instance .uuid )
551
+ fake_bdm .destroy .assert_called_once_with ()
552
+
523
553
@mock .patch .object (compute_rpcapi .ComputeAPI , 'reserve_block_device_name' )
524
554
@mock .patch .object (objects .BlockDeviceMappingList , 'get_by_volume' )
525
555
@mock .patch .object (compute_rpcapi .ComputeAPI , 'attach_volume' )
0 commit comments