@@ -520,16 +520,15 @@ def test_attachment_delete(self, mock_cinderclient):
520520 @mock .patch ('nova.volume.cinder.cinderclient' )
521521 def test_attachment_delete_failed (self , mock_cinderclient , mock_log ):
522522 mock_cinderclient .return_value .attachments .delete .side_effect = (
523- cinder_exception .NotFound ( 404 , '404 ' ))
523+ cinder_exception .BadRequest ( 400 , '400 ' ))
524524
525525 attachment_id = uuids .attachment
526- ex = self .assertRaises (exception .VolumeAttachmentNotFound ,
526+ ex = self .assertRaises (exception .InvalidInput ,
527527 self .api .attachment_delete ,
528528 self .ctx ,
529529 attachment_id )
530530
531- self .assertEqual (404 , ex .code )
532- self .assertIn (attachment_id , str (ex ))
531+ self .assertEqual (400 , ex .code )
533532
534533 @mock .patch ('nova.volume.cinder.cinderclient' ,
535534 side_effect = exception .CinderAPIVersionNotAvailable (
@@ -545,6 +544,16 @@ def test_attachment_delete_unsupported_api_version(self,
545544 mock_cinderclient .assert_called_once_with (self .ctx , '3.44' ,
546545 skip_version_check = True )
547546
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+
548557 @mock .patch ('nova.volume.cinder.cinderclient' )
549558 def test_attachment_delete_internal_server_error (self , mock_cinderclient ):
550559 mock_cinderclient .return_value .attachments .delete .side_effect = (
@@ -568,6 +577,29 @@ def test_attachment_delete_internal_server_error_do_not_raise(
568577
569578 self .assertEqual (2 , mock_cinderclient .call_count )
570579
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+
571603 @mock .patch ('nova.volume.cinder.cinderclient' )
572604 def test_attachment_delete_bad_request_exception (self , mock_cinderclient ):
573605 mock_cinderclient .return_value .attachments .delete .side_effect = (
0 commit comments