@@ -328,6 +328,61 @@ def test_server_create_minimal(self):
328328 self .assertEqual (self .columns , columns )
329329 self .assertEqual (self .datalist (), data )
330330
331+ def test_server_create_with_options (self ):
332+ arglist = [
333+ '--image' , 'image1' ,
334+ '--flavor' , 'flavor1' ,
335+ '--key-name' , 'keyname' ,
336+ '--property' , 'Beta=b' ,
337+ '--security-group' , 'securitygroup' ,
338+ '--hint' , 'a=b' ,
339+ '--hint' , 'a=c' ,
340+ self .new_server .name ,
341+ ]
342+ verifylist = [
343+ ('image' , 'image1' ),
344+ ('flavor' , 'flavor1' ),
345+ ('key_name' , 'keyname' ),
346+ ('property' , {'Beta' : 'b' }),
347+ ('security_group' , ['securitygroup' ]),
348+ ('hint' , ['a=b' , 'a=c' ]),
349+ ('config_drive' , False ),
350+ ('server_name' , self .new_server .name ),
351+ ]
352+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
353+
354+ # In base command class ShowOne in cliff, abstract method take_action()
355+ # returns a two-part tuple with a tuple of column names and a tuple of
356+ # data to be shown.
357+ columns , data = self .cmd .take_action (parsed_args )
358+
359+ # Set expected values
360+ kwargs = dict (
361+ meta = {'Beta' : 'b' },
362+ files = {},
363+ reservation_id = None ,
364+ min_count = 1 ,
365+ max_count = 1 ,
366+ security_groups = ['securitygroup' ],
367+ userdata = None ,
368+ key_name = 'keyname' ,
369+ availability_zone = None ,
370+ block_device_mapping = {},
371+ nics = [],
372+ scheduler_hints = {'a' : ['b' , 'c' ]},
373+ config_drive = None ,
374+ )
375+ # ServerManager.create(name, image, flavor, **kwargs)
376+ self .servers_mock .create .assert_called_with (
377+ self .new_server .name ,
378+ self .image ,
379+ self .flavor ,
380+ ** kwargs
381+ )
382+
383+ self .assertEqual (self .columns , columns )
384+ self .assertEqual (self .datalist (), data )
385+
331386 def test_server_create_with_network (self ):
332387 arglist = [
333388 '--image' , 'image1' ,
@@ -415,6 +470,102 @@ def test_server_create_with_network(self):
415470 self .assertEqual (self .columns , columns )
416471 self .assertEqual (self .datalist (), data )
417472
473+ @mock .patch .object (common_utils , 'wait_for_status' , return_value = True )
474+ def test_server_create_with_wait_ok (self , mock_wait_for_status ):
475+ arglist = [
476+ '--image' , 'image1' ,
477+ '--flavor' , 'flavor1' ,
478+ '--wait' ,
479+ self .new_server .name ,
480+ ]
481+ verifylist = [
482+ ('image' , 'image1' ),
483+ ('flavor' , 'flavor1' ),
484+ ('config_drive' , False ),
485+ ('wait' , True ),
486+ ('server_name' , self .new_server .name ),
487+ ]
488+
489+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
490+ columns , data = self .cmd .take_action (parsed_args )
491+ mock_wait_for_status .assert_called_once_with (
492+ self .servers_mock .get ,
493+ self .new_server .id ,
494+ callback = server ._show_progress ,
495+ )
496+
497+ kwargs = dict (
498+ meta = None ,
499+ files = {},
500+ reservation_id = None ,
501+ min_count = 1 ,
502+ max_count = 1 ,
503+ security_groups = [],
504+ userdata = None ,
505+ key_name = None ,
506+ availability_zone = None ,
507+ block_device_mapping = {},
508+ nics = [],
509+ scheduler_hints = {},
510+ config_drive = None ,
511+ )
512+ self .servers_mock .create .assert_called_with (
513+ self .new_server .name ,
514+ self .image ,
515+ self .flavor ,
516+ ** kwargs
517+ )
518+ self .assertEqual (self .columns , columns )
519+ self .assertEqual (self .datalist (), data )
520+
521+ @mock .patch .object (common_utils , 'wait_for_status' , return_value = False )
522+ def test_server_create_with_wait_fails (self , mock_wait_for_status ):
523+ arglist = [
524+ '--image' , 'image1' ,
525+ '--flavor' , 'flavor1' ,
526+ '--wait' ,
527+ self .new_server .name ,
528+ ]
529+ verifylist = [
530+ ('image' , 'image1' ),
531+ ('flavor' , 'flavor1' ),
532+ ('config_drive' , False ),
533+ ('wait' , True ),
534+ ('server_name' , self .new_server .name ),
535+ ]
536+
537+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
538+
539+ self .assertRaises (SystemExit , self .cmd .take_action , parsed_args )
540+
541+ mock_wait_for_status .assert_called_once_with (
542+ self .servers_mock .get ,
543+ self .new_server .id ,
544+ callback = server ._show_progress ,
545+ )
546+
547+ kwargs = dict (
548+ meta = None ,
549+ files = {},
550+ reservation_id = None ,
551+ min_count = 1 ,
552+ max_count = 1 ,
553+ security_groups = [],
554+ userdata = None ,
555+ key_name = None ,
556+ availability_zone = None ,
557+ block_device_mapping = {},
558+ nics = [],
559+ scheduler_hints = {},
560+ config_drive = None ,
561+ )
562+ self .servers_mock .create .assert_called_with (
563+ self .new_server .name ,
564+ self .image ,
565+ self .flavor ,
566+ ** kwargs
567+ )
568+
418569 @mock .patch ('openstackclient.compute.v2.server.io.open' )
419570 def test_server_create_userdata (self , mock_open ):
420571 mock_file = mock .Mock (name = 'File' )
0 commit comments