# values like 'hostname', 'ip' and the like are rewritten later with a TestPool object
-domain="onelab.eu"
+# so that sfa users get different mails whether they are based on pl or pg
+pldomain="onelab.eu"
+pgdomain="emulab.eu"
### for the sfa dual setup
def login_base (index):
'user_fields' : {'first_name':'Admin',
'last_name':'Admin',
'enabled':'true',
- 'email':'admin@%s'%domain,
+ 'email':'admin@%s'%pldomain,
'password':'testuseradmin'},
'roles':['admin']},
{'name' : 'pi', 'key_names' : [ 'key_pi' ],
'user_fields' : {'first_name':'PI', 'last_name':'PI',
'enabled':'True',
- 'email':'fake-pi1@%s'%domain,
+ 'email':'fake-pi1@%s'%pldomain,
'password':'testpi'},
'roles':['pi']},
'user_fields' : {'first_name':'PiTech',
'last_name':'PiTech',
'enabled':'true',
- 'email':'fake-pi2@%s'%domain,
+ 'email':'fake-pi2@%s'%pldomain,
'password':'testusertech'},
'roles':['pi','tech']},
{'name' : 'tech', 'key_names' : [ 'key_user' ],
'user_fields' : {'first_name':'Tech', 'last_name':'Tech',
'enabled':'true',
- 'email':'fake-tech1@%s'%domain,
+ 'email':'fake-tech1@%s'%pldomain,
'password':'testtech'},
'roles':['tech']},
{'name':'user', 'key_names' : [ 'key_user' ],
'user_fields' : {'first_name':'User', 'last_name':'User',
'enabled':'true',
- 'email':'fake-user1@%s'%domain,
+ 'email':'fake-user1@%s'%pldomain,
'password':'testuser'},
'roles':['user']},
{'name':'techuser', 'key_names' : [ 'key_user' ],
'user_fields' : {'first_name':'UserTech', 'last_name':'UserTech',
'enabled':'true',
- 'email':'fake-tech2@%s'%domain,
+ 'email':'fake-tech2@%s'%pldomain,
'password':'testusertech'},
'roles':['tech','user']},
'login_base':login_base(index),
'abbreviated_name':'PlanetTest%d'%index,
'max_slices':100,
- 'url':'http://test.onelab.eu',
+ 'url':'http://test.%s'%pldomain,
'latitude':float(latitude),
'longitude':float(longitude),
},
initscript_by_name="""#!/bin/bash
command=$1; shift
slicename=$1; shift
-stamp="the_script_name"
-stampfile=/tmp/$stamp.stamp
+stamp="initscript_by_name"
+stampfile=/var/tmp/$stamp.stamp
+date=$(date)
-echo "Running initscript with command=$command and slicename=$slicename"
+echo $date "Running initscript with command=$command and slicename=$slicename"
function start () {
- (echo Starting test initscript: $stamp on slicename $slicename ; date) >> $stampfile
- echo "This is the stdout of the sliver $slicename initscript $command (exp. start) pid=$$"
- echo "This is the stderr of the sliver $slicename initscript $command (exp. start) pid=$$" 1>&2
+ (echo $date Starting test initscript: $stamp on slicename $slicename ; date) >> $stampfile
+ echo $date "This is the stdout of the sliver $slicename initscript $command (exp. start) pid=$$"
+ echo $date "This is the stderr of the sliver $slicename initscript $command (exp. start) pid=$$" 1>&2
}
function stop () {
- echo "Removing stamp $stampfile"
+ echo $date "Removing stamp $stampfile"
rm -f $stampfile
}
function restart () {
esac
"""
-initscript_by_code=initscript_by_name.replace("the_script_name","the_script_code")
+initscript_by_code=initscript_by_name.replace("initscript_by_name","initscript_by_code")
# one single initscript in the InitScripts table
def initscripts(options,index):
return [ { 'initscript_fields' : { 'enabled' : True,
- 'name':'the_script_name',
+ 'name':'initscript_by_name',
'script' : initscript_by_name,
}},
]
-# always return 2 slices
-# one has an initscript code, the other one an initscript name
+# returns 3 slices
+# 1 has an initscript code
+# 2 has an initscript name
+# 3 is an omf-friendly slice
def slices (options,index):
def theslice (i):
slice_spec = { 'slice_fields': {'name':'%s_sl%d'%(login_base(index),i),
'sitename' : login_base(index),
'owner' : 'pi',
}
- # odd one has an initscript_code
- if i%2==1:
+ # 1st one has an initscript by code
+ if i%3==1:
slice_spec['initscriptcode']=initscript_by_code
- slice_spec['initscriptstamp']='the_script_code'
- # even one has an initscript (name)
+ slice_spec['initscriptstamp']='initscript_by_code'
+ # 2nd one has an initscript by name
+ elif i%3==2:
+ slice_spec['initscriptname']='initscript_by_name'
+ slice_spec['initscriptstamp']='initscript_by_name'
+ # 3rd one is omf-friendly
else:
- slice_spec['initscriptname']='the_script_name'
- slice_spec['initscriptstamp']='the_script_name'
+ # potentially turned off with config_no_omf
+ slice_spec ['omf-friendly'] = True
return slice_spec
- return [ theslice(i) for i in range (2*index-1,2*index+1) ]
+ # usual index is 1, additional plc's then get 2...
+ # so index=1 -> 1 - 2 - 3
+ # index=2 -> 4 - 5 - 6
+ # 3 * (index-1) + 1 = 3*index-2 .. same+3 = 3*index+1
+ return [ theslice(i) for i in range (3*index-2,3*index+1) ]
def all_slicenames (options,index):
return [ slice['slice_fields']['name'] for slice in slices(options,index)]
-def tcp_tests (options,index):
- if index == 1:
- return [
- # local test
- { 'server_node': 'node1',
- 'server_slice' : '%s_sl1'%login_base(index),
- 'client_node' : 'node1',
- 'client_slice' : '%s_sl1'%login_base(index),
- 'port' : 2000,
- }]
- elif index == 2:
- return [
- # remote test
- { 'server_node': 'node2',
- 'server_slice' : '%s_sl3'%login_base(index),
- 'client_node' : 'node2',
- 'client_slice' : '%s_sl4'%login_base(index),
- 'port' : 4000,
- },
- ]
- else:
- return []
+# the logic here is to try:
+# . client and server on the same slice/node
+# . client and server on the same node but 2 different slices
+# if at least 2 plcs, we have 2 nodes, so again on diff. nodes
+def tcp_specs (options,index):
+ # only run the test on the first plc
+ if index != 1: return None
+ #
+ slice1='%s_sl1'%login_base(1)
+ slice2='%s_sl2'%login_base(1)
+ # with the addition of omf-friendly slices..
+ slice3='%s_sl4'%login_base(2)
+ slice4='%s_sl5'%login_base(2)
+# bind on 0.0.0.0 and try to reach this on localhost
+# not expected to work
+ same_node_same_slice_lo = { 'server_node': 'node1', 'server_slice': slice1,
+ 'client_node': 'node1', 'client_slice': slice1,
+ 'client_connect' : 'localhost',
+ 'port': 10000}
+ same_node_same_slice = { 'server_node': 'node1', 'server_slice': slice1,
+ 'client_node': 'node1', 'client_slice': slice1,
+ 'port': 10001}
+# this does not work on vs-nodes....
+ same_node_2_slices = { 'server_node': 'node1', 'server_slice': slice1,
+ 'client_node': 'node1', 'client_slice': slice2,
+ 'port': 10002}
+ two_nodes_same_slice = { 'server_node': 'node1', 'server_slice': slice1,
+ 'client_node': 'node2', 'client_slice': slice3,
+ 'port': 10003}
+ two_nodes_2_slices = { 'server_node': 'node1', 'server_slice': slice1,
+ 'client_node': 'node2', 'client_slice': slice4,
+ 'port': 10004}
+ specs = []
+# specs += [ same_node_same_slice_lo ]
+ specs += [ same_node_same_slice ]
+# worth another try
+ specs += [ same_node_2_slices ]
+ if options.size >1 :
+ specs += [ two_nodes_same_slice, two_nodes_2_slices ]
+ return specs
# the semantic for 't_from' and 't_until' here is:
# if they are smaller than one year, they are relative to the current time, expressed in grains
'vservername': 'deferred-vservername',
'vserverip': 'deferred-vserverip',
'role' : 'root',
- 'PLC_NAME' : 'Regression TestLab',
- 'PLC_ROOT_USER' : 'root@test.onelab.eu',
- 'PLC_ROOT_PASSWORD' : 'test++',
- 'PLC_SLICE_PREFIX' : 'auto',
- 'PLC_SHORTNAME' : 'Rlab',
- 'PLC_MAIL_ENABLED':'false',
- 'PLC_MAIL_SUPPORT_ADDRESS' : 'thierry.parmentelat@inria.fr',
- 'PLC_DB_HOST' : 'deferred-myplc-hostname',
-# 'PLC_DB_PASSWORD' : 'mnbvcxzlkjhgfdsapoiuytrewq',
- 'PLC_API_HOST' : 'deferred-myplc-hostname',
- 'PLC_WWW_HOST' : 'deferred-myplc-hostname',
- 'PLC_BOOT_HOST' : 'deferred-myplc-hostname',
- 'PLC_NET_DNS1' : 'deferred-dns-1',
- 'PLC_NET_DNS2' : 'deferred-dns-2',
- 'PLC_RESERVATION_GRANULARITY':1800,
+ # these go to plc-config-tty
+ 'settings': {
+ 'PLC_NAME' : 'Regression TestLab',
+ 'PLC_ROOT_USER' : 'root@test.onelab.eu',
+ 'PLC_ROOT_PASSWORD' : 'test++',
+ 'PLC_SLICE_PREFIX' : 'auto',
+ 'PLC_HRN_ROOT': sfa_root(index),
+ 'PLC_SHORTNAME' : 'Rlab',
+ 'PLC_MAIL_ENABLED':'false',
+ 'PLC_MAIL_SUPPORT_ADDRESS' : 'thierry.parmentelat@inria.fr',
+ 'PLC_DB_HOST' : 'deferred-myplc-hostname',
+# 'PLC_DB_PASSWORD' : 'mnbvcxzlkjhgfdsapoiuytrewq',
+ 'PLC_API_HOST' : 'deferred-myplc-hostname',
+ 'PLC_WWW_HOST' : 'deferred-myplc-hostname',
+ 'PLC_BOOT_HOST' : 'deferred-myplc-hostname',
+ 'PLC_NET_DNS1' : 'deferred-dns-1',
+ 'PLC_NET_DNS2' : 'deferred-dns-2',
+ 'PLC_RESERVATION_GRANULARITY':1800,
+ 'PLC_VSYS_DEFAULTS':' , vif_up, vif_down, fd_tuntap, promisc, ',
+ 'PLC_OMF_ENABLED' : 'true',
+ 'PLC_OMF_XMPP_SERVER': 'deferred-myplc-hostname',
+ },
+ 'expected_vsys_tags': [ 'vif_up', 'vif_down', 'fd_tuntap', 'promisc', ],
# minimal config so the omf plugins actually trigger
- 'PLC_OMF_ENABLED' : 'true',
- 'PLC_OMF_XMPP_SERVER': 'deferred-myplc-hostname',
'sites' : sites(options,index),
'keys' : keys(options,index),
'initscripts': initscripts(options,index),
'slices' : slices(options,index),
- 'tcp_test' : tcp_tests(options,index),
+ 'tcp_specs' : tcp_specs(options,index),
'sfa' : sfa(options,index),
'leases' : leases (options, index),
+ # big distros need more time to install nodes
+ 'ssh_node_boot_timers': (40,38),
+ 'ssh_node_debug_timers': (10,8),
}
-# NOTE: SFA currently has SFA_AGGREGATE_API_VERSION=2 baked into the code
def sfa (options,index) :
return {
# the default is to use AMs in the various aggregates.xml
# stack config_sfamesh to point to SMs instead
'neighbours-port':12346,
## global sfa-config-tty stuff
- 'SFA_REGISTRY_ROOT_AUTH' : sfa_root(index),
- 'SFA_INTERFACE_HRN' : sfa_root(index),
- 'SFA_REGISTRY_HOST' : 'deferred-myplc-hostname',
- 'SFA_AGGREGATE_HOST': 'deferred-myplc-hostname',
- 'SFA_SM_HOST': 'deferred-myplc-hostname',
- 'SFA_PLC_URL' : 'deferred-myplc-api-url',
- 'SFA_PLC_USER' : 'root@test.onelab.eu',
- 'SFA_PLC_PASSWORD' : 'test++',
+ 'settings': {
+ 'SFA_REGISTRY_ROOT_AUTH' : sfa_root(index),
+ 'SFA_INTERFACE_HRN' : sfa_root(index),
+ 'SFA_REGISTRY_HOST' : 'deferred-myplc-hostname',
+ 'SFA_AGGREGATE_HOST': 'deferred-myplc-hostname',
+ 'SFA_SM_HOST': 'deferred-myplc-hostname',
+ 'SFA_PLC_URL' : 'deferred-myplc-api-url',
+ 'SFA_PLC_USER' : 'root@test.onelab.eu',
+ 'SFA_PLC_PASSWORD' : 'test++',
# use -c sfadebug to increment this one
- 'SFA_API_LOGLEVEL': 1,
+ 'SFA_API_LOGLEVEL': 1,
# use -c sfavoid to set this to 'void'
- 'SFA_GENERIC_FLAVOUR' : 'pl',
- 'SFA_AGGREGATE_ENABLED' : 'true',
+ '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,
+# rspec_style is 'pl' for sfav1 or 'pg' for pgv2
+def test_auth_sfa_spec (options,index,rspec_style):
+ domain=pldomain if rspec_style=='pl' else pgdomain
+ # 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; we use dashes on purpose, as it might show up in email addresses
+ pi_alias = 'pi-user'
+ user_alias = 'regular-user'
+# pi_alias = 'pi'
+# user_alias = 'user'
+ #
+ pi_spec = {
+ 'name': pi_alias,
+ 'email': full_mail (pi_alias),
+ 'key_name': 'key_sfapi',
+ }
+ user_spec = {
+ 'name': user_alias,
+ 'email': full_mail (user_alias),
+ 'key_name': 'key_sfauser',
+ 'register_options': [ '--extra',"first_name=Fake",
+ '--extra',"last_name=SFA-style-%s"%rspec_style,
+ ],
+ 'update_options': [ '--extra',"enabled=true",
+ ],
+ }
+
+ slice_spec = {
+ 'name': 'sl',
+ 'register_options': [ '--researchers', full_hrn (user_alias),
# 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,
}
def config (plc_specs,options):
result=plc_specs
+ # plc 'index' starts with 1
for i in range (options.size):
result.append(plc(options,i+1))
return result