@@ -427,3 +427,104 @@ def test_volume_create_host_no_remote_source(self):
427427 '--host and --cluster options are only supported ' ,
428428 str (exc ),
429429 )
430+
431+
432+ class TestVolumeDelete (BaseVolumeTest ):
433+ def setUp (self ):
434+ super ().setUp ()
435+
436+ self .volumes_mock = self .volume_client .volumes
437+ self .volumes_mock .reset_mock ()
438+ self .volume_sdk_client .unmanage_volume .return_value = None
439+
440+ # Get the command object to mock
441+ self .cmd = volume .DeleteVolume (self .app , None )
442+
443+ def test_volume_delete_remote (self ):
444+ vol = sdk_fakes .generate_fake_resource (_volume .Volume , ** {'size' : 1 })
445+ self .volumes_mock .get .return_value = vol
446+
447+ arglist = ['--remote' , vol .id ]
448+ verifylist = [
449+ ("remote" , True ),
450+ ("force" , False ),
451+ ("purge" , False ),
452+ ("volumes" , [vol .id ]),
453+ ]
454+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
455+
456+ result = self .cmd .take_action (parsed_args )
457+
458+ self .volume_sdk_client .unmanage_volume .assert_called_once_with (vol .id )
459+ self .assertIsNone (result )
460+
461+ def test_volume_delete_multi_volumes_remote (self ):
462+ volumes = sdk_fakes .generate_fake_resources (
463+ _volume .Volume , count = 3 , attrs = {'size' : 1 }
464+ )
465+
466+ arglist = ['--remote' ]
467+ arglist += [v .id for v in volumes ]
468+ verifylist = [
469+ ('remote' , True ),
470+ ('force' , False ),
471+ ('purge' , False ),
472+ ('volumes' , arglist [1 :]),
473+ ]
474+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
475+
476+ result = self .cmd .take_action (parsed_args )
477+
478+ calls = [mock .call (v .id ) for v in volumes ]
479+ self .volume_sdk_client .unmanage_volume .assert_has_calls (calls )
480+ self .assertIsNone (result )
481+
482+ def test_volume_delete_remote_with_purge (self ):
483+ vol = sdk_fakes .generate_fake_resource (_volume .Volume , ** {'size' : 1 })
484+
485+ arglist = [
486+ '--remote' ,
487+ '--purge' ,
488+ vol .id ,
489+ ]
490+ verifylist = [
491+ ('remote' , True ),
492+ ('force' , False ),
493+ ('purge' , True ),
494+ ('volumes' , [vol .id ]),
495+ ]
496+
497+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
498+ exc = self .assertRaises (
499+ exceptions .CommandError , self .cmd .take_action , parsed_args
500+ )
501+ self .assertIn (
502+ "The --force and --purge options are not supported with the "
503+ "--remote parameter." ,
504+ str (exc ),
505+ )
506+
507+ def test_volume_delete_remote_with_force (self ):
508+ vol = sdk_fakes .generate_fake_resource (_volume .Volume , ** {'size' : 1 })
509+
510+ arglist = [
511+ '--remote' ,
512+ '--force' ,
513+ vol .id ,
514+ ]
515+ verifylist = [
516+ ('remote' , True ),
517+ ('force' , True ),
518+ ('purge' , False ),
519+ ('volumes' , [vol .id ]),
520+ ]
521+
522+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
523+ exc = self .assertRaises (
524+ exceptions .CommandError , self .cmd .take_action , parsed_args
525+ )
526+ self .assertIn (
527+ "The --force and --purge options are not supported with the "
528+ "--remote parameter." ,
529+ str (exc ),
530+ )
0 commit comments