1717from mock import call
1818from novaclient import api_versions
1919from osc_lib import exceptions
20+ import six
2021
2122from openstackclient .compute .v2 import service
2223from openstackclient .tests .unit .compute .v2 import fakes as compute_fakes
@@ -344,7 +345,7 @@ def test_service_set_state_up(self):
344345 '2.11' )
345346 result = self .cmd .take_action (parsed_args )
346347 self .service_mock .force_down .assert_called_once_with (
347- self .service .host , self .service .binary , force_down = False )
348+ self .service .host , self .service .binary , False )
348349 self .assertNotCalled (self .service_mock .enable )
349350 self .assertNotCalled (self .service_mock .disable )
350351 self .assertIsNone (result )
@@ -365,7 +366,7 @@ def test_service_set_state_down(self):
365366 '2.11' )
366367 result = self .cmd .take_action (parsed_args )
367368 self .service_mock .force_down .assert_called_once_with (
368- self .service .host , self .service .binary , force_down = True )
369+ self .service .host , self .service .binary , True )
369370 self .assertNotCalled (self .service_mock .enable )
370371 self .assertNotCalled (self .service_mock .disable )
371372 self .assertIsNone (result )
@@ -390,7 +391,7 @@ def test_service_set_enable_and_state_down(self):
390391 self .service_mock .enable .assert_called_once_with (
391392 self .service .host , self .service .binary )
392393 self .service_mock .force_down .assert_called_once_with (
393- self .service .host , self .service .binary , force_down = True )
394+ self .service .host , self .service .binary , True )
394395 self .assertIsNone (result )
395396
396397 def test_service_set_enable_and_state_down_with_exception (self ):
@@ -415,4 +416,99 @@ def test_service_set_enable_and_state_down_with_exception(self):
415416 self .assertRaises (exceptions .CommandError ,
416417 self .cmd .take_action , parsed_args )
417418 self .service_mock .force_down .assert_called_once_with (
418- self .service .host , self .service .binary , force_down = True )
419+ self .service .host , self .service .binary , True )
420+
421+ def test_service_set_2_53_disable_down (self ):
422+ # Tests disabling and forcing down a compute service with microversion
423+ # 2.53 which requires looking up the service by host and binary.
424+ arglist = [
425+ '--disable' ,
426+ '--down' ,
427+ self .service .host ,
428+ self .service .binary ,
429+ ]
430+ verifylist = [
431+ ('disable' , True ),
432+ ('down' , True ),
433+ ('host' , self .service .host ),
434+ ('service' , self .service .binary ),
435+ ]
436+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
437+ self .app .client_manager .compute .api_version = api_versions .APIVersion (
438+ '2.53' )
439+ service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
440+ self .service_mock .list .return_value = [mock .Mock (id = service_id )]
441+ result = self .cmd .take_action (parsed_args )
442+ self .service_mock .disable .assert_called_once_with (service_id )
443+ self .service_mock .force_down .assert_called_once_with (service_id , True )
444+ self .assertIsNone (result )
445+
446+ def test_service_set_2_53_disable_reason (self ):
447+ # Tests disabling with reason a compute service with microversion
448+ # 2.53 which requires looking up the service by host and binary.
449+ reason = 'earthquake'
450+ arglist = [
451+ '--disable' ,
452+ '--disable-reason' , reason ,
453+ self .service .host ,
454+ self .service .binary ,
455+ ]
456+ verifylist = [
457+ ('disable' , True ),
458+ ('disable_reason' , reason ),
459+ ('host' , self .service .host ),
460+ ('service' , self .service .binary ),
461+ ]
462+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
463+ self .app .client_manager .compute .api_version = api_versions .APIVersion (
464+ '2.53' )
465+ service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
466+ self .service_mock .list .return_value = [mock .Mock (id = service_id )]
467+ result = self .cmd .take_action (parsed_args )
468+ self .service_mock .disable_log_reason .assert_called_once_with (
469+ service_id , reason )
470+ self .assertIsNone (result )
471+
472+ def test_service_set_2_53_enable_up (self ):
473+ # Tests enabling and bringing up a compute service with microversion
474+ # 2.53 which requires looking up the service by host and binary.
475+ arglist = [
476+ '--enable' ,
477+ '--up' ,
478+ self .service .host ,
479+ self .service .binary ,
480+ ]
481+ verifylist = [
482+ ('enable' , True ),
483+ ('up' , True ),
484+ ('host' , self .service .host ),
485+ ('service' , self .service .binary ),
486+ ]
487+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
488+ self .app .client_manager .compute .api_version = api_versions .APIVersion (
489+ '2.53' )
490+ service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
491+ self .service_mock .list .return_value = [mock .Mock (id = service_id )]
492+ result = self .cmd .take_action (parsed_args )
493+ self .service_mock .enable .assert_called_once_with (service_id )
494+ self .service_mock .force_down .assert_called_once_with (service_id , False )
495+ self .assertIsNone (result )
496+
497+ def test_service_set_find_service_by_host_and_binary_no_results (self ):
498+ # Tests that no compute services are found by host and binary.
499+ self .service_mock .list .return_value = []
500+ ex = self .assertRaises (exceptions .CommandError ,
501+ self .cmd ._find_service_by_host_and_binary ,
502+ self .service_mock , 'fake-host' , 'nova-compute' )
503+ self .assertIn ('Compute service for host "fake-host" and binary '
504+ '"nova-compute" not found.' , six .text_type (ex ))
505+
506+ def test_service_set_find_service_by_host_and_binary_many_results (self ):
507+ # Tests that more than one compute service is found by host and binary.
508+ self .service_mock .list .return_value = [mock .Mock (), mock .Mock ()]
509+ ex = self .assertRaises (exceptions .CommandError ,
510+ self .cmd ._find_service_by_host_and_binary ,
511+ self .service_mock , 'fake-host' , 'nova-compute' )
512+ self .assertIn ('Multiple compute services found for host "fake-host" '
513+ 'and binary "nova-compute". Unable to proceed.' ,
514+ six .text_type (ex ))
0 commit comments