@ -33,7 +33,6 @@ from ansible.errors import AnsibleError, AnsibleOptionsError
from ansible . cli . galaxy import GalaxyCLI
class TestGalaxy ( unittest . TestCase ) :
@classmethod
def setUpClass ( cls ) :
@ -44,7 +43,7 @@ class TestGalaxy(unittest.TestCase):
shutil . rmtree ( " ./delete_me " )
# creating framework for a role
gc = GalaxyCLI ( args = [ " init " , " - c" , " - -offline" , " delete_me " ] )
gc = GalaxyCLI ( args = [ " init " , " - -offline" , " delete_me " ] )
gc . parse ( )
gc . run ( )
cls . role_dir = " ./delete_me "
@ -114,9 +113,8 @@ class TestGalaxy(unittest.TestCase):
def test_run ( self ) :
''' verifies that the GalaxyCLI object ' s api is created and that execute() is called. '''
gc = GalaxyCLI ( args = [ " install " ] )
with patch ( ' sys.argv ' , [ " -c " , " -v " , ' --ignore-errors ' , ' imaginary_role ' ] ) :
galaxy_parser = gc . parse ( )
gc = GalaxyCLI ( args = [ " install " , " --ignore-errors " , " imaginary_role " ] )
gc . parse ( )
with patch . object ( ansible . cli . CLI , " execute " , return_value = None ) as mock_ex :
with patch . object ( ansible . cli . CLI , " run " , return_value = None ) as mock_run :
gc . run ( )
@ -129,40 +127,36 @@ class TestGalaxy(unittest.TestCase):
def test_execute_remove ( self ) :
# installing role
gc = GalaxyCLI ( args = [ " install " , " --offline " , " -p " , self . role_path , " -r " , self . role_req ] )
g alaxy_parser = g c. parse ( )
g c. parse ( )
gc . run ( )
# checking that installation work ed
# location where the role was install ed
role_file = os . path . join ( self . role_path , self . role_name )
self . assertTrue ( os . path . exists ( role_file ) )
# removing role
gc = GalaxyCLI ( args = [ " remove " , " -c " , " -p " , self . role_path , self . role_name ] )
galaxy_parser = gc . parse ( )
super ( GalaxyCLI , gc ) . run ( )
gc . api = ansible . galaxy . api . GalaxyAPI ( gc . galaxy )
completed_task = gc . execute_remove ( )
gc = GalaxyCLI ( args = [ " remove " , " -p " , role_file , self . role_name ] )
gc . parse ( )
gc . run ( )
# testing role was removed
self . assertTrue ( completed_task == 0 )
self . assertTrue ( not os . path . exists ( role_file ) )
def test_exit_without_ignore ( self ) :
''' tests that GalaxyCLI exits with the error specified unless the --ignore-errors flag is used '''
gc = GalaxyCLI ( args = [ " install " , " --server=None " , " -c " , " fake_role_name " ] )
removed_role = not os . path . exists ( role_file )
self . assertTrue ( removed_role )
# testing without --ignore-errors flag
galaxy_parser = gc . parse ( )
def test_exit_without_ignore_without_flag ( self ) :
''' tests that GalaxyCLI exits with the error specified if the --ignore-errors flag is not used '''
gc = GalaxyCLI ( args = [ " install " , " --server=None " , " fake_role_name " ] )
gc . parse ( )
with patch . object ( ansible . utils . display . Display , " display " , return_value = None ) as mocked_display :
# testing that error expected is raised
self . assertRaises ( AnsibleError , gc . run )
self . assertTrue ( mocked_display . called_once_with ( " - downloading role ' fake_role_name ' , owned by " ) )
def test_exit_without_ignore_with_flag ( self ) :
''' tests that GalaxyCLI exits without the error specified if the --ignore-errors flag is used '''
# testing with --ignore-errors flag
gc = GalaxyCLI ( args = [ " install " , " --server=None " , " -c " , " fake_role_name " , " --ignore-errors " ] )
g alalxy_parser = g c. parse ( )
gc = GalaxyCLI ( args = [ " install " , " --server=None " , " fake_role_name" , " --ignore-errors " ] )
g c. parse ( )
with patch . object ( ansible . utils . display . Display , " display " , return_value = None ) as mocked_display :
# testing that error expected is not raised with --ignore-errors flag in use
gc . run ( )
self . assertTrue ( mocked_display . called_once_with ( " - downloading role ' fake_role_name ' , owned by " ) )
@ -173,94 +167,101 @@ class TestGalaxy(unittest.TestCase):
# checking that the common results of parse() for all possible actions have been created/called
self . assertIsInstance ( galaxycli_obj . parser , ansible . cli . SortedOptParser )
self . assertIsInstance ( galaxycli_obj . galaxy , ansible . galaxy . Galaxy )
if action in [ ' import ' , ' delete ' ] :
formatted_call = ' usage: % prog ' + action + ' [options] github_user github_repo '
elif action == ' info ' :
formatted_call = ' usage: % prog ' + action + ' [options] role_name[,version] '
elif action == ' init ' :
formatted_call = ' usage: % prog ' + action + ' [options] role_name '
elif action == ' install ' :
formatted_call = ' usage: % prog ' + action + ' [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)] '
elif action == ' list ' :
formatted_call = ' usage: % prog ' + action + ' [role_name] '
elif action == ' login ' :
formatted_call = ' usage: % prog ' + action + ' [options] '
elif action == ' remove ' :
formatted_call = ' usage: % prog ' + action + ' role1 role2 ... '
elif action == ' search ' :
formatted_call = ' usage: % prog ' + action + ' [searchterm1 searchterm2] [--galaxy-tags galaxy_tag1,galaxy_tag2] [--platforms platform1,platform2] [--author username] '
elif action == ' setup ' :
formatted_call = ' usage: % prog ' + action + ' [options] source github_user github_repo secret '
calls = [ call ( ' usage: % prog [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ... ' ) , call ( formatted_call ) ]
formatted_call = {
' import ' : ' usage: % prog import [options] github_user github_repo ' ,
' delete ' : ' usage: % prog delete [options] github_user github_repo ' ,
' info ' : ' usage: % prog info [options] role_name[,version] ' ,
' init ' : ' usage: % prog init [options] role_name ' ,
' install ' : ' usage: % prog install [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)] ' ,
' list ' : ' usage: % prog list [role_name] ' ,
' login ' : ' usage: % prog login [options] ' ,
' remove ' : ' usage: % prog remove role1 role2 ... ' ,
' search ' : ' usage: % prog search [searchterm1 searchterm2] [--galaxy-tags galaxy_tag1,galaxy_tag2] [--platforms platform1,platform2] [--author username] ' ,
' setup ' : ' usage: % prog setup [options] source github_user github_repo secret ' ,
}
first_call = ' usage: % prog [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ... '
second_call = formatted_call [ action ]
calls = [ call ( first_call ) , call ( second_call ) ]
mocked_usage . assert_has_calls ( calls )
def test_parse ( self ) :
''' systematically testing that the expected options parser is created '''
# testing no action given
gc = GalaxyCLI ( args = [ " -c " ] )
def test_parse_no_action ( self ) :
''' testing the options parser when no action is given '''
gc = GalaxyCLI ( args = [ " " ] )
self . assertRaises ( AnsibleOptionsError , gc . parse )
# testing action that doesn't exist
gc = GalaxyCLI ( args = [ " NOT_ACTION " , " -c " ] )
def test_parse_invalid_action ( self ) :
''' testing the options parser when an invalid action is given '''
gc = GalaxyCLI ( args = [ " NOT_ACTION " ] )
self . assertRaises ( AnsibleOptionsError , gc . parse )
# testing action 'delete'
gc = GalaxyCLI ( args = [ " delete " , " -c " ] )
def test_parse_delete ( self ) :
''' testing the options parser when the action ' delete ' is given '''
gc = GalaxyCLI ( args = [ " delete " ] )
self . run_parse_common ( gc , " delete " )
self . assertEqual ( gc . options . verbosity , 0 )
# testing action 'import'
gc = GalaxyCLI ( args = [ " import " , " -c " ] )
def test_parse_import ( self ) :
''' testing the options parser when the action ' import ' is given '''
gc = GalaxyCLI ( args = [ " import " ] )
self . run_parse_common ( gc , " import " )
self . assertEqual ( gc . options . wait , True )
self . assertEqual ( gc . options . reference , None )
self . assertEqual ( gc . options . check_status , False )
self . assertEqual ( gc . options . verbosity , 0 )
# testing action 'info'
gc = GalaxyCLI ( args = [ " info " , " -c " ] )
def test_parse_info ( self ) :
''' testing the options parser when the action ' info ' is given '''
gc = GalaxyCLI ( args = [ " info " ] )
self . run_parse_common ( gc , " info " )
self . assertEqual ( gc . options . offline , False )
# testing action 'init'
gc = GalaxyCLI ( args = [ " init " , " -c " ] )
def test_parse_init ( self ) :
''' testing the options parser when the action ' init ' is given '''
gc = GalaxyCLI ( args = [ " init " ] )
self . run_parse_common ( gc , " init " )
self . assertEqual ( gc . options . offline , False )
self . assertEqual ( gc . options . force , False )
# testing action 'install'
gc = GalaxyCLI ( args = [ " install " , " -c " ] )
def test_parse_install ( self ) :
''' testing the options parser when the action ' install ' is given '''
gc = GalaxyCLI ( args = [ " install " ] )
self . run_parse_common ( gc , " install " )
self . assertEqual ( gc . options . ignore_errors , False )
self . assertEqual ( gc . options . no_deps , False )
self . assertEqual ( gc . options . role_file , None )
self . assertEqual ( gc . options . force , False )
# testing action 'list'
gc = GalaxyCLI ( args = [ " list " , " -c " ] )
def test_parse_list ( self ) :
''' testing the options parser when the action ' list ' is given '''
gc = GalaxyCLI ( args = [ " list " ] )
self . run_parse_common ( gc , " list " )
self . assertEqual ( gc . options . verbosity , 0 )
# testing action 'login'
gc = GalaxyCLI ( args = [ " login " , " -c " ] )
def test_parse_login ( self ) :
''' testing the options parser when the action ' login ' is given '''
gc = GalaxyCLI ( args = [ " login " ] )
self . run_parse_common ( gc , " login " )
self . assertEqual ( gc . options . verbosity , 0 )
self . assertEqual ( gc . options . token , None )
# testing action 'remove'
gc = GalaxyCLI ( args = [ " remove " , " -c " ] )
def test_parse_remove ( self ) :
''' testing the options parser when the action ' remove ' is given '''
gc = GalaxyCLI ( args = [ " remove " ] )
self . run_parse_common ( gc , " remove " )
self . assertEqual ( gc . options . verbosity , 0 )
# testing action 'search'
gc = GalaxyCLI ( args = [ " search " , " -c " ] )
def test_parse_search ( self ) :
''' testing the options parswer when the action ' search ' is given '''
gc = GalaxyCLI ( args = [ " search " ] )
self . run_parse_common ( gc , " search " )
self . assertEqual ( gc . options . platforms , None )
self . assertEqual ( gc . options . galaxy_tags , None )
self . assertEqual ( gc . options . author , None )
# testing action 'setup'
gc = GalaxyCLI ( args = [ " setup " , " -c " ] )
def test_parse_setup ( self ) :
''' testing the options parser when the action ' setup ' is given '''
gc = GalaxyCLI ( args = [ " setup " ] )
self . run_parse_common ( gc , " setup " )
self . assertEqual ( gc . options . verbosity , 0 )
self . assertEqual ( gc . options . remove_id , None )