--- /dev/null
+# Thierry Parmentelat <thierry.parmentelat@inria.fr>
+# Copyright (C) 2010 INRIA
+#
+import utils
+import os, os.path
+import datetime
+import time
+
+from TestKey import TestKey
+from TestNode import TestNode
+from TestSsh import TestSsh
+from TestUserSfa import TestUserSfa
+from TestSliceSfa import TestSliceSfa
+
+
+def slice_sfa_mapper (method):
+ def actual(self,*args, **kwds):
+ overall=True
+ slice_method = TestSliceSfa.__dict__[method.__name__]
+ for slice_spec in [ self.auth_sfa_spec['slice_spec'] ]:
+ test_slice_sfa = TestSliceSfa(self,slice_spec)
+ if not slice_method(test_slice_sfa, *args, **kwds): overall=False
+ return overall
+ # restore the doc text
+ actual.__doc__=TestSliceSfa.__dict__[method.__name__].__doc__
+ return actual
+
+
+def user_sfa_mapper (method):
+ def actual(self,*args, **kwds):
+ overall=True
+ user_method = TestUserSfa.__dict__[method.__name__]
+ for user_spec in [ self.auth_sfa_spec['user_spec'] ]:
+ test_user_sfa = TestUserSfa(self,user_spec)
+ if not user_method(test_user_sfa, *args, **kwds): overall=False
+ return overall
+ # restore the doc text
+ actual.__doc__=TestUserSfa.__dict__[method.__name__].__doc__
+ return actual
+
+
+class TestAuthSfa:
+
+ def __init__ (self,test_plc,auth_sfa_spec):
+ self.test_plc=test_plc
+ self.auth_sfa_spec=auth_sfa_spec
+ self.test_ssh=TestSsh(self.test_plc.test_ssh)
+# # shortcuts
+ self.login_base=self.auth_sfa_spec['login_base']
+# self.piuser=self.auth_sfa_spec['piuser']
+# self.regularuser=self.auth_sfa_spec['regularuser']
+# self.slicename=self.auth_sfa_spec['slicename']
+#
+# def plc_name(self):
+# return self.auth_sfa_spec['plc_slicename']
+
+ def rspec_style (self): return self.auth_sfa_spec['rspec_style']
+
+ def sfi_path (self):
+ return "/root/sfi/%s"%(self.rspec_style())
+
+ # the hrn for the root authority
+ def root_hrn (self):
+ return self.test_plc.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
+
+ # the hrn for the auth/site
+ def hrn (self):
+ return "%s.%s"%(self.root_hrn(),self.login_base)
+
+ # something in this site (users typically)
+ def qualified (self, name):
+# return "%s.%s"%(self.auth_sfa_spec['hrn_prefix'],name)
+ return "%s.%s"%(self.hrn(),name)
+
+ # xxx this needs tweaks with more recent versions of sfa that have pgv2 as the default ?
+ # dir_name is local and will be pushed later on by TestPlc
+ # by default set SFI_USER to the pi, we'll overload this
+ # on the command line when needed
+ def sfi_configure (self,dir_name):
+ plc_spec=self.test_plc.plc_spec
+ # cheat a bit: retrieve the global SFA spec from the plc obj
+ sfa_spec=self.test_plc.plc_spec['sfa']
+ # fetch keys in config spec and expose to sfi
+ for spec_name in ['pi_spec','user_spec']:
+ user_spec=self.auth_sfa_spec[spec_name]
+ user_leaf=user_spec['name']
+ key_name=user_spec['key_name']
+ key_spec = self.test_plc.locate_key (key_name)
+ for (kind,ext) in [ ('private', 'pkey'), ('public', 'pub') ] :
+ contents=key_spec[kind]
+ file_name=os.path.join(dir_name,self.qualified(user_leaf))+"."+ext
+ fileconf=open(file_name,'w')
+ fileconf.write (contents)
+ fileconf.close()
+ utils.header ("(Over)wrote %s"%file_name)
+ #
+ file_name=dir_name + os.sep + 'sfi_config'
+ fileconf=open(file_name,'w')
+ SFI_AUTH=self.hrn()
+ fileconf.write ("SFI_AUTH='%s'"%SFI_AUTH)
+ fileconf.write('\n')
+ # default is to run as a PI
+ SFI_USER=self.qualified(self.auth_sfa_spec['pi_spec']['name'])
+ fileconf.write ("SFI_USER='%s'"%SFI_USER)
+ fileconf.write('\n')
+ SFI_REGISTRY='http://' + sfa_spec['SFA_REGISTRY_HOST'] + ':12345/'
+ fileconf.write ("SFI_REGISTRY='%s'"%SFI_REGISTRY)
+ fileconf.write('\n')
+ SFI_SM='http://' + sfa_spec['SFA_SM_HOST'] + ':12347/'
+ fileconf.write ("SFI_SM='%s'"%SFI_SM)
+ fileconf.write('\n')
+ fileconf.close()
+ utils.header ("(Over)wrote %s"%file_name)
+
+ # using sfaadmin to bootstrap
+ def sfa_add_site (self, options):
+ "bootstrap a site using sfaadmin"
+ command="sfaadmin reg register -t authority -x %s"%self.hrn()
+ return self.test_plc.run_in_guest(command)==0
+
+ def sfa_add_pi (self, options):
+ "bootstrap a PI user for that site"
+ pi_spec = self.auth_sfa_spec['pi_spec']
+ pi_hrn=self.qualified(pi_spec['name'])
+ pi_mail=pi_spec['email']
+ # as installed by sfi_config
+ pi_key=os.path.join(self.sfi_path(),self.qualified(pi_spec['name']+'.pub'))
+ command="sfaadmin reg register -t user -x %s --email %s --key %s"%(pi_hrn,pi_mail,pi_key)
+ if self.test_plc.run_in_guest(command)!=0: return False
+ command="sfaadmin reg update -t authority -x %s --pi %s"%(self.hrn(),pi_hrn)
+ return self.test_plc.run_in_guest(command)==0
+
+ # run as pi
+ def sfi_pi (self, command):
+ pi_name=self.auth_sfa_spec['pi_spec']['name']
+ return "sfi -d %s -u %s %s"%(self.sfi_path(),self.qualified(pi_name), command,)
+ # the sfi command line option to run as a regular user
+ def sfi_user (self, command):
+ user_name=self.auth_sfa_spec['user_spec']['name']
+ return "sfi -d %s -u %s %s"%(self.sfi_path(),self.qualified(user_name), command,)
+
+ # user management
+ @user_sfa_mapper
+ def sfa_add_user (self, *args, **kwds): pass
+ @user_sfa_mapper
+ def sfa_update_user (self, *args, **kwds): pass
+ @user_sfa_mapper
+ def sfa_delete_user (self, *args, **kwds): pass
+
+ def sfi_list (self, options):
+ "run (as regular user) sfi list (on Registry)"
+ return \
+ self.test_plc.run_in_guest(self.sfi_user("list -r %s"%self.root_hrn()))==0 and \
+ self.test_plc.run_in_guest(self.sfi_user("list %s"%(self.hrn())))==0
+
+ def sfi_show (self, options):
+ "run (as regular user) sfi show (on Registry)"
+ return \
+ self.test_plc.run_in_guest(self.sfi_user("show %s"%(self.hrn())))==0
+
+ def sfi_slices (self, options):
+ "run (as regular user) sfi slices (on SM)"
+ return \
+ self.test_plc.run_in_guest(self.sfi_user("slices"))==0
+
+ # those are step names exposed as methods of TestPlc, hence the _sfa
+ @slice_sfa_mapper
+ def sfa_add_slice (self, *args, **kwds): pass
+ @slice_sfa_mapper
+ def sfa_discover (self, *args, **kwds): pass
+ @slice_sfa_mapper
+ def sfa_create_slice (self, *args, **kwds): pass
+ @slice_sfa_mapper
+ def sfa_check_slice_plc (self, *args, **kwds): pass
+ @slice_sfa_mapper
+ def sfa_update_slice (self, *args, **kwds): pass
+ @slice_sfa_mapper
+ def sfa_delete_slice (self, *args, **kwds): pass
+ @slice_sfa_mapper
+ def ssh_slice_sfa (self, *args, **kwds): pass
+
# Copyright (C) 2010 INRIA
#
import sys, os, os.path, time, base64
-import xmlrpclib
import utils
from TestUser import TestUser
from TestBoxQemu import TestBoxQemu
from TestSsh import TestSsh
from TestApiserver import TestApiserver
-from TestSliceSfa import TestSliceSfa
+from TestAuthSfa import TestAuthSfa
# step methods must take (self) and return a boolean (options is a member of the class)
actual.__doc__=TestSlice.__dict__[method.__name__].__doc__
return actual
-def slice_sfa_mapper (method):
+def auth_sfa_mapper (method):
def actual(self):
overall=True
- slice_method = TestSliceSfa.__dict__[method.__name__]
- for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
- test_slice=TestSliceSfa(self,slice_spec)
+ slice_method = TestAuthSfa.__dict__[method.__name__]
+ for slice_spec in self.plc_spec['sfa']['auth_sfa_specs']:
+ test_slice=TestAuthSfa(self,slice_spec)
if not slice_method(test_slice,self.options): overall=False
return overall
# restore the doc text
- actual.__doc__=TestSliceSfa.__dict__[method.__name__].__doc__
+ actual.__doc__=TestAuthSfa.__dict__[method.__name__].__doc__
return actual
SEP='<sep>'
# ignore result
sfa_spec=self.plc_spec['sfa']
- for sfa_slice_spec in sfa_spec['sfa_slice_specs']:
- login_base=sfa_slice_spec['login_base']
+ for auth_sfa_spec in sfa_spec['auth_sfa_specs']:
+ login_base=auth_sfa_spec['login_base']
try: self.apiserver.DeleteSite (self.auth_root(),login_base)
except: print "Site %s already absent from PLC db"%login_base
- for key in ['piuser','regularuser']:
- username="%s@%s"%(sfa_slice_spec[key],sfa_slice_spec['domain'])
+ for spec_name in ['pi_spec','user_spec']:
+ user_spec=auth_sfa_spec[spec_name]
+ username=user_spec['email']
try: self.apiserver.DeletePerson(self.auth_root(),username)
except:
# this in fact is expected as sites delete their members
utils.header("DRY RUN - skipping step")
return True
sfa_spec=self.plc_spec['sfa']
- # cannot use slice_sfa_mapper to pass dir_name
- for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
- test_slice=TestSliceSfa(self,slice_spec)
+ # cannot use auth_sfa_mapper to pass dir_name
+ for slice_spec in self.plc_spec['sfa']['auth_sfa_specs']:
+ test_slice=TestAuthSfa(self,slice_spec)
dir_basename=os.path.basename(test_slice.sfi_path())
dir_name=self.confsubdir("dot-sfi/%s"%dir_basename,clean=True,dry_run=self.options.dry_run)
test_slice.sfi_configure(dir_name)
self.run_in_guest("rm -rf /root/sfi")
return True
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_add_site (self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_add_pi (self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_add_user(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_update_user(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_add_slice(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_discover(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_create_slice(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_check_slice_plc(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_update_slice(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfi_list(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfi_show(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfi_slices(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def ssh_slice_sfa(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_delete_user(self): pass
- @slice_sfa_mapper
+ @auth_sfa_mapper
def sfa_delete_slice(self): pass
def sfa_stop(self):
date_test_ssh = TestSsh (hostname,key=remote_privatekey,username=self.name())
command = date_test_ssh.actual_command("echo hostname ; hostname; echo id; id; echo uname -a ; uname -a")
date = utils.system (command, silent=datetime.datetime.now() < graceout)
+ if getattr(options,'dry_run',None): return True
if expected: success = date==0
else: success = date!=0
# Thierry Parmentelat <thierry.parmentelat@inria.fr>
# Copyright (C) 2010 INRIA
#
-import utils
-import os, os.path
-import datetime
-import time
-from TestKey import TestKey
+import utils
from TestUser import TestUser
-from TestNode import TestNode
+from TestBoxQemu import TestBoxQemu
from TestSsh import TestSsh
-from TestUserSfa import TestUserSfa
+
class TestSliceSfa:
- def __init__ (self,test_plc,sfa_slice_spec):
- self.test_plc=test_plc
- self.sfa_slice_spec=sfa_slice_spec
- self.test_ssh=TestSsh(self.test_plc.test_ssh)
+ def __init__ (self, test_auth_sfa, slice_spec):
+ self.test_auth_sfa=test_auth_sfa
+ self.slice_spec=slice_spec
# shortcuts
- self.sfa_spec=test_plc.plc_spec['sfa']
- self.piuser=self.sfa_slice_spec['piuser']
- self.regularuser=self.sfa_slice_spec['regularuser']
- self.slicename=self.sfa_slice_spec['slicename']
- self.login_base=self.sfa_slice_spec['login_base']
-
- def plc_name(self):
- return self.sfa_slice_spec['plc_slicename']
-
- def rspec_style (self): return self.sfa_slice_spec['rspec_style']
-
- # the hrn for the site
- def auth_hrn (self):
- return self.test_plc.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
-
- # the hrn for the site
- def site_hrn (self):
- return "%s.%s"%(self.auth_hrn(),self.login_base)
+ self.test_plc=self.test_auth_sfa.test_plc
- # something in the site (users typically)
- def qualified_hrn (self, name):
- return "%s.%s"%(self.site_hrn(),name)
+ def qualified(self,name): return self.test_auth_sfa.qualified(name)
+ def hrn (self): return self.qualified(self.slice_spec['name'])
+ def sfi_path (self): return self.test_auth_sfa.sfi_path()
- # the slice hrn
- def hrn(self): return self.qualified_hrn (self.slicename)
+ # send back up to the TestAuthSfa
+ def rspec_style (self): return self.test_auth_sfa.rspec_style()
+ def sfi_pi(self,*args,**kwds): return self.test_auth_sfa.sfi_pi(*args, **kwds)
+ def sfi_user(self,*args,**kwds): return self.test_auth_sfa.sfi_user(*args, **kwds)
- # result name
- def resname (self,name,ext): return "%s.%s"%(name,ext)
-
- def adfile (self): return self.resname("ad","rspec")
- def reqfile (self): return self.resname("req","rspec")
- def nodefile (self): return self.resname("nodes","txt")
- # xxx this needs tweaks with more recent versions of sfa that have pgv2 as the default ?
def discover_option(self):
if self.rspec_style()=='pg': return "-r protogeni"
else: return "-r sfa"
- def sfi_path (self):
- return "/root/sfi/%s%s"%(self.slicename,self.rspec_style())
-
- def locate_key(self):
- for key_name in self.sfa_slice_spec['slice_key_names']:
- key_spec=self.test_plc.locate_key(key_name)
- test_key=TestKey(self.test_plc,key_spec)
- publickey=test_key.publicpath()
- privatekey=test_key.privatepath()
- if os.path.isfile(publickey) and os.path.isfile(privatekey):
- found=True
- return (found,privatekey)
-
- # dir_name is local and will be pushed later on by TestPlc
- # by default set SFI_USER to the pi, we'll overload this
- # on the command line when needed
- def sfi_configure (self,dir_name):
- plc_spec=self.test_plc.plc_spec
- sfa_spec=self.sfa_spec
- sfa_slice_spec=self.sfa_slice_spec
- keys=plc_spec['keys']
- # fetch keys in config spec and expose to sfi
- for (hrn_leaf,key_name) in sfa_slice_spec['hrn_keys'].items():
- key_spec = self.test_plc.locate_key (key_name)
- for (kind,ext) in [ ('private', 'pkey'), ('public', 'pub') ] :
- contents=key_spec[kind]
- file_name=os.path.join(dir_name,self.qualified_hrn(hrn_leaf))+"."+ext
- fileconf=open(file_name,'w')
- fileconf.write (contents)
- fileconf.close()
- utils.header ("(Over)wrote %s"%file_name)
- #
- file_name=dir_name + os.sep + 'sfi_config'
- fileconf=open(file_name,'w')
- SFI_AUTH="%s"%(self.site_hrn())
- fileconf.write ("SFI_AUTH='%s'"%SFI_AUTH)
- fileconf.write('\n')
- SFI_USER=SFI_AUTH + '.' + self.piuser
- fileconf.write ("SFI_USER='%s'"%SFI_USER)
- fileconf.write('\n')
- SFI_REGISTRY='http://' + sfa_spec['SFA_REGISTRY_HOST'] + ':12345/'
- fileconf.write ("SFI_REGISTRY='%s'"%SFI_REGISTRY)
- fileconf.write('\n')
- SFI_SM='http://' + sfa_spec['SFA_SM_HOST'] + ':12347/'
- fileconf.write ("SFI_SM='%s'"%SFI_SM)
- fileconf.write('\n')
- fileconf.close()
- utils.header ("(Over)wrote %s"%file_name)
-
- # using sfaadmin to bootstrap
- def sfa_add_site (self, options):
- "bootstrap a site using sfaadmin"
- command="sfaadmin reg register -t authority -x %s"%self.site_hrn()
- return self.test_plc.run_in_guest(command)==0
-
- def sfa_add_pi (self, options):
- "bootstrap a PI user for that site"
- pi_hrn=self.qualified_hrn(self.piuser)
- pi_mail=self.sfa_slice_spec['pimail']
- # as installed by sfi_config
- pi_key=os.path.join(self.sfi_path(),self.qualified_hrn(self.piuser+'.pub'))
- command="sfaadmin reg register -t user -x %s --email %s --key %s"%(pi_hrn,pi_mail,pi_key)
- if self.test_plc.run_in_guest(command)!=0: return False
- command="sfaadmin reg update -t authority -x %s --pi %s"%(self.site_hrn(),pi_hrn)
- return self.test_plc.run_in_guest(command)==0
-
- # user management
- def sfa_add_user (self, options):
- "add a regular user using sfi add"
- return TestUserSfa(self.test_plc, self.sfa_slice_spec, self).add_user()
- def sfa_update_user (self, options):
- "update a user record using sfi update"
- return TestUserSfa(self.test_plc, self.sfa_slice_spec, self).update_user()
- def sfa_delete_user (self, options):
- "run sfi delete"
- return TestUserSfa(self.test_plc, self.sfa_slice_spec, self).delete_user()
-
- # run as pi
- def sfi_pi (self, command):
- return "sfi -d %s -u %s %s"%(self.sfi_path(),self.qualified_hrn(self.piuser), command,)
- # the sfi command line option to run as a regular user
- def sfi_user (self, command):
- return "sfi -d %s -u %s %s"%(self.sfi_path(),self.qualified_hrn(self.regularuser), command,)
-
# those are step names exposed as methods of TestPlc, hence the _sfa
- def sfi_list (self, options):
- "run (as regular user) sfi list (on Registry)"
- return \
- self.test_plc.run_in_guest(self.sfi_user("list -r %s"%self.auth_hrn()))==0 and \
- self.test_plc.run_in_guest(self.sfi_user("list %s"%(self.site_hrn())))==0
-
- def sfi_show (self, options):
- "run (as regular user) sfi show (on Registry)"
- return \
- self.test_plc.run_in_guest(self.sfi_user("show %s"%(self.site_hrn())))==0
-
- def sfi_slices (self, options):
- "run (as regular user) sfi slices (on SM)"
- return \
- self.test_plc.run_in_guest(self.sfi_user("slices"))==0
-
# needs to be run as pi
def sfa_add_slice(self,options):
"run sfi add (on Registry) from slice.xml"
- sfi_options="add"
- for opt in self.sfa_slice_spec['slice_sfi_options']:
- sfi_options += " %s"%(opt)
- return self.test_plc.run_in_guest(self.sfi_pi(sfi_options))==0
-
+ sfi_command="add"
+ sfi_command += " --type slice"
+ sfi_command += " --xrn %s"%self.qualified(self.slice_spec['name'])
+ for opt in self.slice_spec['sfi_options']:
+ sfi_command += " %s"%(opt)
+ return self.test_plc.run_in_guest(self.sfi_pi(sfi_command))==0
+
+ # helper - filename to store a given result
+ def _resname (self,name,ext): return "%s.%s"%(name,ext)
+ def adfile (self): return self._resname("ad","rspec")
+ def reqfile (self): return self._resname("req","rspec")
+ def nodefile (self): return self._resname("nodes","txt")
+
# run as user
def sfa_discover(self,options):
"discover resources into resouces_in.rspec"
# all local nodes in slice ?
def sfa_check_slice_plc (self,options):
"check sfa_create_slice at the plcs - all local nodes should be in slice"
- slice_name = self.plc_name()
+ login_base=self.test_auth_sfa.login_base
+ slice_name = "%s_%s"%(login_base,self.slice_spec['name'])
slice=self.test_plc.apiserver.GetSlices(self.test_plc.auth_root(), slice_name)[0]
nodes=self.test_plc.apiserver.GetNodes(self.test_plc.auth_root(), {'peer_id':None})
result=True
return False
# convert nodenames to real hostnames
- sfa_slice_spec = self.sfa_slice_spec
restarted=[]
tocheck=[]
- for nodename in sfa_slice_spec['nodenames']:
+ for nodename in self.auth_sfa_spec['nodenames']:
(site_spec,node_spec) = self.test_plc.locate_node(nodename)
tocheck.append(node_spec['node_fields']['hostname'])
# for an empty slice
return True
+
class TestUserSfa:
- def __init__ (self,test_plc,sfa_slice_spec,test_slice_sfa):
- self.test_plc=test_plc
- self.sfa_slice_spec=sfa_slice_spec
- self.test_slice_sfa=test_slice_sfa
+ def __init__ (self,test_auth_sfa, user_spec):
+ self.test_auth_sfa=test_auth_sfa
+ self.user_spec=user_spec
# shortcuts
- self.sfa_spec=test_plc.plc_spec['sfa']
- self.piuser=self.sfa_slice_spec['piuser']
- self.regularuser=self.sfa_slice_spec['regularuser']
- self.login_base=self.sfa_slice_spec['login_base']
+ self.test_plc=self.test_auth_sfa.test_plc
+ self.login_base=self.test_auth_sfa.login_base
- def sfi_path(self): return self.test_slice_sfa.sfi_path()
+ def sfi_path(self): return self.test_auth_sfa.sfi_path()
+ def qualified(self,name): return self.test_auth_sfa.qualified(name)
# xxx todo - not the right place any longer - or is it ?
- def add_user (self):
- sfi_add_options = self.sfa_slice_spec['user_sfi_options']
- user_hrn = self.sfa_slice_spec['user_hrn']
+ def sfa_add_user (self,options):
+ "add a regular user using sfi add"
+ sfi_add_options = self.user_spec['sfi_options']
+ user_hrn = self.qualified(self.user_spec['name'])
command="sfi -d %s add"%(self.sfi_path())
+ command += " --type user"
+ command += " --xrn %s"%user_hrn
+ command += " --email %s"%self.user_spec['email']
for opt in sfi_add_options:
command += " %s"%(opt,)
# handle key separately because of embedded whitespace
command += " -k %s/%s.pub"%(self.sfi_path(),user_hrn)
return self.test_plc.run_in_guest(command)==0
- def update_user (self):
+ def sfa_update_user (self,options):
+ "update a user record using sfi update"
# xxx TODO now that we use sfi arguments
utils.header ("WARNING: TestUserSfa.update_user needs more work")
return True
- def delete_user(self):
- auth=self.sfa_spec['SFA_REGISTRY_ROOT_AUTH']
+ def sfa_delete_user(self,options):
+ "run sfi delete on user record"
+ auth=self.test_auth_sfa.root_hrn()
return \
self.test_plc.run_in_guest("sfi -d %s remove -t user %s.%s.%s"%(
self.sfi_path(),auth,self.login_base,self.regularuser))==0
'login_base':login_base(index),
'abbreviated_name':'PlanetTest%d'%index,
'max_slices':100,
- 'url':'http://test.onelab.eu',
+ 'url':'http://test.%s'%domain,
'latitude':float(latitude),
'longitude':float(longitude),
},
'SFA_GENERIC_FLAVOUR' : 'pl',
'SFA_AGGREGATE_ENABLED' : 'true',
# details of the slices to create
- 'sfa_slice_specs' : [ sfa_slice_spec(options,index,rspec_style)
- for rspec_style in options.rspec_styles ]
+ 'auth_sfa_specs' : [ test_auth_sfa_spec(options,index,rspec_style)
+ for rspec_style in options.rspec_styles ]
}
# rspecstyle is 'pl' for sfav1 or 'pg' for pgv2
-def sfa_slice_spec (options,index,rspec_style):
- the_login_base=sfa_login_base(index,rspec_style)
- # we're already in a dedicated site/authority so no need to encumber with odd names
- piuser='pi'
- pimail=piuser+'@test.onelab.eu'
- regularuser='us'
- slicename='sl'
- prefix='%s.%s'%(sfa_root(index),the_login_base)
- hrn=prefix+'.'+slicename
- user_hrn=prefix+'.'+regularuser
- pi_hrn=prefix+'.'+piuser
- mail="%s@%s"%(regularuser,domain)
- # passed to sfi
- # -k gets computed later on from the hrn (i.e. from the '-x' key..)
- user_sfi_options = [ '--type','user',
- '--xrn',user_hrn,
- '--email',mail,
- # xxx
- '--extra',"enabled=true",
- '--extra',"first_name=Fake",
- '--extra',"last_name=SFA-style-%s"%rspec_style,
- ]
-
- slice_sfi_options = [ '--type', 'slice',
- '--xrn', hrn,
- '--researchers', user_hrn,
+def test_auth_sfa_spec (options,index,rspec_style):
+ # the auth/site part per se
+ login_base=sfa_login_base(index,rspec_style)
+ hrn_prefix='%s.%s'%(sfa_root(index),login_base)
+ def full_hrn(x): return "%s.%s"%(hrn_prefix,x)
+ def full_mail(x): return "%s@test.%s"%(x,domain)
+
+ # 2 users
+ pi_spec = {
+ 'name': 'pi',
+ 'email': full_mail ('piuser'),
+ 'key_name': 'key_sfapi',
+ }
+ user_hrn = full_hrn ('us')
+ user_spec = {
+ 'name': 'us',
+ 'email': full_mail ('regularuser'),
+ 'key_name': 'key_sfauser',
+ 'sfi_options': [ '--extra',"enabled=true",
+ '--extra',"first_name=Fake",
+ '--extra',"last_name=SFA-style-%s"%rspec_style,
+ ],
+ }
+
+ slice_spec = {
+ 'name': 'sl',
+ 'sfi_options': [ '--researchers', user_hrn,
# xxx
'--extra', "description=SFA-testing-%s"%rspec_style,
'--extra', "url=http://slice%d.test.onelab.eu/"%index,
'--extra', "max_nodes=2",
- ]
+ ],
+ 'key_name': 'key_sfauser',
+ 'nodenames': all_nodenames(options,index),
+ }
+
+ # we're already in a dedicated site/authority so no need to encumber with odd names
- return { 'plc_slicename': '%s_%s'%(the_login_base,slicename),
- 'login_base' : the_login_base,
- 'piuser' : piuser,
- 'pimail' : pimail,
- 'regularuser':regularuser,
+ return { #'hrn_prefix': hrn_prefix,
+ 'login_base' : login_base,
'domain':domain,
- 'slice_key_names' : [ 'key_sfauser' ],
- 'hrn_keys' : { piuser : 'key_sfapi',
- regularuser : 'key_sfauser' },
- 'nodenames' : all_nodenames(options,index),
- 'sitename' : the_login_base,
- 'slicename' : slicename,
'rspec_style':rspec_style,
- 'user_sfi_options': user_sfi_options,
- 'user_hrn': user_hrn,
- 'slice_sfi_options': slice_sfi_options,
+ 'pi_spec': pi_spec,
+ 'user_spec': user_spec,
+ 'slice_spec': slice_spec,
}
'sfa_add_slice',
]
+sequences['sfa_provision'] = [
+ 'sfa-discover',
+ 'sfa-create_slice',
+ 'sfa_check_slice_plc',
+ 'sfa_view_all',
+]
+
# run the whole SFA stuff but from scratch, new vs all reinstalled and all
sequences['sfa_scratch'] = [
'show',