@@ -520,16 +520,15 @@ def test_attachment_delete(self, mock_cinderclient):
520
520
@mock .patch ('nova.volume.cinder.cinderclient' )
521
521
def test_attachment_delete_failed (self , mock_cinderclient , mock_log ):
522
522
mock_cinderclient .return_value .attachments .delete .side_effect = (
523
- cinder_exception .NotFound ( 404 , '404 ' ))
523
+ cinder_exception .BadRequest ( 400 , '400 ' ))
524
524
525
525
attachment_id = uuids .attachment
526
- ex = self .assertRaises (exception .VolumeAttachmentNotFound ,
526
+ ex = self .assertRaises (exception .InvalidInput ,
527
527
self .api .attachment_delete ,
528
528
self .ctx ,
529
529
attachment_id )
530
530
531
- self .assertEqual (404 , ex .code )
532
- self .assertIn (attachment_id , str (ex ))
531
+ self .assertEqual (400 , ex .code )
533
532
534
533
@mock .patch ('nova.volume.cinder.cinderclient' ,
535
534
side_effect = exception .CinderAPIVersionNotAvailable (
@@ -545,6 +544,16 @@ def test_attachment_delete_unsupported_api_version(self,
545
544
mock_cinderclient .assert_called_once_with (self .ctx , '3.44' ,
546
545
skip_version_check = True )
547
546
547
+ @mock .patch ('nova.volume.cinder.cinderclient' )
548
+ def test_attachment_delete_not_found (self , mock_cinderclient ):
549
+ mock_cinderclient .return_value .attachments .delete .side_effect = (
550
+ cinder_exception .ClientException (404 ))
551
+
552
+ attachment_id = uuids .attachment
553
+ self .api .attachment_delete (self .ctx , attachment_id )
554
+
555
+ self .assertEqual (1 , mock_cinderclient .call_count )
556
+
548
557
@mock .patch ('nova.volume.cinder.cinderclient' )
549
558
def test_attachment_delete_internal_server_error (self , mock_cinderclient ):
550
559
mock_cinderclient .return_value .attachments .delete .side_effect = (
@@ -568,6 +577,29 @@ def test_attachment_delete_internal_server_error_do_not_raise(
568
577
569
578
self .assertEqual (2 , mock_cinderclient .call_count )
570
579
580
+ @mock .patch ('nova.volume.cinder.cinderclient' )
581
+ def test_attachment_delete_gateway_timeout (self , mock_cinderclient ):
582
+ mock_cinderclient .return_value .attachments .delete .side_effect = (
583
+ cinder_exception .ClientException (504 ))
584
+
585
+ self .assertRaises (cinder_exception .ClientException ,
586
+ self .api .attachment_delete ,
587
+ self .ctx , uuids .attachment_id )
588
+
589
+ self .assertEqual (5 , mock_cinderclient .call_count )
590
+
591
+ @mock .patch ('nova.volume.cinder.cinderclient' )
592
+ def test_attachment_delete_gateway_timeout_do_not_raise (
593
+ self , mock_cinderclient ):
594
+ # generate exception, and then have a normal return on the next retry
595
+ mock_cinderclient .return_value .attachments .delete .side_effect = [
596
+ cinder_exception .ClientException (504 ), None ]
597
+
598
+ attachment_id = uuids .attachment
599
+ self .api .attachment_delete (self .ctx , attachment_id )
600
+
601
+ self .assertEqual (2 , mock_cinderclient .call_count )
602
+
571
603
@mock .patch ('nova.volume.cinder.cinderclient' )
572
604
def test_attachment_delete_bad_request_exception (self , mock_cinderclient ):
573
605
mock_cinderclient .return_value .attachments .delete .side_effect = (
0 commit comments