2525from openstackclient .compute .v2 import server
2626from openstackclient .tests .unit .compute .v2 import fakes as compute_fakes
2727from openstackclient .tests .unit .image .v2 import fakes as image_fakes
28+ from openstackclient .tests .unit .network .v2 import fakes as network_fakes
2829from openstackclient .tests .unit import utils
2930from openstackclient .tests .unit .volume .v2 import fakes as volume_fakes
3031
@@ -421,16 +422,24 @@ def test_server_create_with_options(self):
421422 # In base command class ShowOne in cliff, abstract method take_action()
422423 # returns a two-part tuple with a tuple of column names and a tuple of
423424 # data to be shown.
425+ fake_sg = network_fakes .FakeSecurityGroup .create_security_groups ()
426+ mock_find_sg = (
427+ network_fakes .FakeSecurityGroup .get_security_groups (fake_sg )
428+ )
429+ self .app .client_manager .network .find_security_group = mock_find_sg
430+
424431 columns , data = self .cmd .take_action (parsed_args )
425432
433+ mock_find_sg .assert_called_once_with ('securitygroup' ,
434+ ignore_missing = False )
426435 # Set expected values
427436 kwargs = dict (
428437 meta = {'Beta' : 'b' },
429438 files = {},
430439 reservation_id = None ,
431440 min_count = 1 ,
432441 max_count = 1 ,
433- security_groups = ['securitygroup' ],
442+ security_groups = [fake_sg [ 0 ]. id ],
434443 userdata = None ,
435444 key_name = 'keyname' ,
436445 availability_zone = None ,
@@ -450,6 +459,92 @@ def test_server_create_with_options(self):
450459 self .assertEqual (self .columns , columns )
451460 self .assertEqual (self .datalist (), data )
452461
462+ def test_server_create_with_not_exist_security_group (self ):
463+ arglist = [
464+ '--image' , 'image1' ,
465+ '--flavor' , 'flavor1' ,
466+ '--key-name' , 'keyname' ,
467+ '--security-group' , 'securitygroup' ,
468+ '--security-group' , 'not_exist_sg' ,
469+ self .new_server .name ,
470+ ]
471+ verifylist = [
472+ ('image' , 'image1' ),
473+ ('flavor' , 'flavor1' ),
474+ ('key_name' , 'keyname' ),
475+ ('security_group' , ['securitygroup' , 'not_exist_sg' ]),
476+ ('server_name' , self .new_server .name ),
477+ ]
478+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
479+
480+ fake_sg = network_fakes .FakeSecurityGroup .create_security_groups (
481+ count = 1 )
482+ fake_sg .append (exceptions .NotFound (code = 404 ))
483+ mock_find_sg = (
484+ network_fakes .FakeSecurityGroup .get_security_groups (fake_sg )
485+ )
486+ self .app .client_manager .network .find_security_group = mock_find_sg
487+
488+ self .assertRaises (exceptions .NotFound ,
489+ self .cmd .take_action ,
490+ parsed_args )
491+ mock_find_sg .assert_called_with ('not_exist_sg' ,
492+ ignore_missing = False )
493+
494+ def test_server_create_with_security_group_in_nova_network (self ):
495+ arglist = [
496+ '--image' , 'image1' ,
497+ '--flavor' , 'flavor1' ,
498+ '--key-name' , 'keyname' ,
499+ '--security-group' , 'securitygroup' ,
500+ self .new_server .name ,
501+ ]
502+ verifylist = [
503+ ('image' , 'image1' ),
504+ ('flavor' , 'flavor1' ),
505+ ('key_name' , 'keyname' ),
506+ ('security_group' , ['securitygroup' ]),
507+ ('server_name' , self .new_server .name ),
508+ ]
509+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
510+
511+ with mock .patch .object (self .app .client_manager ,
512+ 'is_network_endpoint_enabled' ,
513+ return_value = False ):
514+ with mock .patch .object (self .app .client_manager .compute .api ,
515+ 'security_group_find' ,
516+ return_value = {'name' : 'fake_sg' }
517+ ) as mock_find :
518+ columns , data = self .cmd .take_action (parsed_args )
519+ mock_find .assert_called_once_with ('securitygroup' )
520+
521+ # Set expected values
522+ kwargs = dict (
523+ meta = None ,
524+ files = {},
525+ reservation_id = None ,
526+ min_count = 1 ,
527+ max_count = 1 ,
528+ security_groups = ['fake_sg' ],
529+ userdata = None ,
530+ key_name = 'keyname' ,
531+ availability_zone = None ,
532+ block_device_mapping_v2 = [],
533+ nics = [],
534+ scheduler_hints = {},
535+ config_drive = None ,
536+ )
537+ # ServerManager.create(name, image, flavor, **kwargs)
538+ self .servers_mock .create .assert_called_with (
539+ self .new_server .name ,
540+ self .image ,
541+ self .flavor ,
542+ ** kwargs
543+ )
544+
545+ self .assertEqual (self .columns , columns )
546+ self .assertEqual (self .datalist (), data )
547+
453548 def test_server_create_with_network (self ):
454549 arglist = [
455550 '--image' , 'image1' ,
0 commit comments