Set PLC_HRN_ROOT in plc config
[tests.git] / system / config_default.py
index d89dc6b..f2e3b3b 100644 (file)
@@ -69,45 +69,52 @@ def all_nodenames (options,index):
     return [ node['name'] for node in nodes(options,index)]
 
 def users (options) :
-    return [ {'name' : 'pi', 'keynames' : [ 'key1' ],
-              'user_fields' : {'first_name':'PI', 'last_name':'PI',
-                               'enabled':'True',
-                               'email':'fake-pi1@%s'%domain,
-                               'password':'testpi'},
-              'roles':['pi']},
-             {'name' : 'tech', 'keynames' : [ 'key1' ],
-              'user_fields' : {'first_name':'Tech', 'last_name':'Tech',
-                               'enabled':'true',
-                               'email':'fake-tech1@%s'%domain,
-                               'password':'testtech'},
-              'roles':['tech']},
-             {'name':'user', 'keynames' : [ 'key1' ],
-              'user_fields' : {'first_name':'User', 'last_name':'User',
-                               'enabled':'true',
-                               'email':'fake-user1@%s'%domain,
-                               'password':'testuser'},
-              'roles':['user']},
-             {'name':'techuser', 'keynames' : [ 'key1' ],
-              'user_fields' : {'first_name':'UserTech', 'last_name':'UserTech',
-                               'enabled':'true',
-                               'email':'fake-tech2@%s'%domain,
-                               'password':'testusertech'},
-              'roles':['tech','user']},
-             {'name':'pitech', 'keynames' : [ 'key1' ],
-              'user_fields' : {'first_name':'PiTech',
-                               'last_name':'PiTech',
-                               'enabled':'true',
-                               'email':'fake-pi2@%s'%domain,
-                               'password':'testusertech'},
-              'roles':['pi','tech']},
-             {'name':'admin', 'keynames' : [ 'key1' ],
-              'user_fields' : {'first_name':'Admin',
-                               'last_name':'Admin',
-                               'enabled':'true',
-                               'email':'admin@%s'%domain,
-                               'password':'testuseradmin'},
-              'roles':['admin']},
-             ]
+    return [ 
+        {'name':'admin', 'key_names' : [ 'key_admin' ],
+         'user_fields' : {'first_name':'Admin',
+                          'last_name':'Admin',
+                          'enabled':'true',
+                          'email':'admin@%s'%domain,
+                          '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,
+                          'password':'testpi'},
+         'roles':['pi']},
+
+        {'name':'pitech', 'key_names' : [ 'key_pi' ],
+         'user_fields' : {'first_name':'PiTech',
+                          'last_name':'PiTech',
+                          'enabled':'true',
+                          'email':'fake-pi2@%s'%domain,
+                          '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,
+                          '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,
+                          '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,
+                          'password':'testusertech'},
+         'roles':['tech','user']},
+
+        ]
 
 def all_usernames (options):
     return [ user['name'] for user in users(options)]
@@ -119,7 +126,7 @@ def sites (options,index):
                                '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),
                                },
@@ -134,10 +141,43 @@ def sites (options,index):
             }]
 
 ##########
+# key0 -> planetlab admin
 # key1 -> planetlab PI
 # key2 -> planetlab user
 # key3 -> sfa PI
 # key4 -> sfa user
+public_key0="""ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3okOugCBs2j/uur/lBdNUqWG0VdLdrELy85MR6mGOER5ijdbZekEG6KD4zzG2fwXOzdGF99HTQAOXvty02V5/sBN/GbT1Rehwh3cUvZ8i3aJIdN4ku+zbWK6CBsQ8XGXMpCImALDxcvcaoToWJbephDpkgKtcBwmowmOQswO4GTzIdT217J13Z860Jz/QJPIjloS7HpuLmKVlZ/sWCYcuKmR4X7evCXrvbHh+iamSrOHV9sQ6Sf0Wu+VJRaUN92BrxVi9zuJNWZWtWWWjLecyaooOVS0UMBZKUNbnuGXSJ8IFHfQ9wpGGsG+KohvGH4Axh3utaDOlUG641iM5GVBX planetlab-admin@test.onelab.eu
+"""
+
+private_key0="""-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAt6JDroAgbNo/7rq/5QXTVKlhtFXS3axC8vOTEephjhEeYo3W
+2XpBBuig+M8xtn8Fzs3RhffR00ADl77ctNlef7ATfxm09UXocId3FL2fIt2iSHTe
+JLvs21iuggbEPFxlzKQiJgCw8XL3GqE6FiW3qYQ6ZICrXAcJqMJjkLMDuBk8yHU9
+teydd2fOtCc/0CTyI5aEux6bi5ilZWf7FgmHLipkeF+3rwl672x4fompkqzh1fbE
+Okn9FrvlSUWlDfdga8VYvc7iTVmVrVlloy3nMmqKDlUtFDAWSlDW57hl0ifCBR30
+PcKRhrBviqIbxh+AMYd7rWgzpVBuuNYjORlQVwIDAQABAoIBAQCSvuT/SfyfgDme
++TXoOyOKgGFHz13XL5XAuM1Kf9a9xQhXEaoj2QKmFrisnEbJ4/AsN2W8fTH8cydr
+2GZfT2Wo/HhYFZ76cocxhc+vj2jgX+UTqfDrwhGhp9isp+OhqOThCDkRzXOZP5og
+eb8Fe9atbLGNJxXJUQZzCgSu2Z+bOZMhh983DNB7porEhcB21Ja86a6VzIW0ieM0
+WxeVuQfPPGH1U6wGr3rVwKF0tXQHlMg48KNmpvahwS89Ihp1VIBzSNlVXkZ9O5Fc
+wmBQGNoeM32/N+8yHVYkdTHIrvi5mm52KMwhDGg0lXDjrXAIe+rCzuigv5kIsmuA
+fqu6Co8hAoGBAPJF7xDGVYjOObQ/ckdpQ76ntJcNMIVa4XoL0cn9NFBhvV1ooRTn
+KASHH9Wj+sWYkZDm4wmWgaIthnQb2F1Rq/8FmJaPlCVQZtLDydDI7spLF+ixVxCk
+y8nhCr+cad9yPJ8ozYP2vMs9gBheDaL8LBDUdPyuC94e2TQy0fqW0rJFAoGBAMIJ
+yvATDuF4Zssn4gOpRkyP9fjdrnIo5YKF9aCjv/j984XexwRqAwvSMqykmUnwF4Yg
+rWjV+1Jw9lJuAIMUdiIH3fqPGBeOrpvES5Kmi1FFB5ufA1Hcpe9LNJSiuNMYemCB
+rDnfoG2cW1lCwrb5y8ROOUp2OAQ5jJQyPjV08S/rAoGARZ0An1JN23xeKkOcw5Yk
+iBDKHCkHCxpc9WOWCTL/KCWdcsyQlGADKKHm7M0sTkCTew5MqEGdyArKumwR1GaW
+RDXIbWKeD8a1dNQbFinWKzw+h3cFbFvdzokiPIJmDXVWo+jmfIeWIdPvDZFg27cX
+tlJFtyEPeehlQtFjclyJ9/0CgYEAuDht6MJfVWdnSKfj6A/1Q0lGgXGOZqo3RFWE
+n2/4GiCY7NdWYfV4UOfO3qQjONRusRQjLy5BPsMqyZXQfKKXibWoZXMnr23yjsat
+7VybVpxQHcq5byYqkGb5U8it6xUJUsiqSAPtn0NcYwGENg4xDH4r3GsiwbgVpLmS
+4FPXjOMCgYA40bzt7QjKBURj3A9nMrFpbg1dQjNZv7ThnDq2KcLlQxusddSO3Tou
+capLbON5tuaHbiGGVYSiUCHC6HXYWN7JGytpAjAYZhLWmK7ltNMlDQA9FX8LktPE
+UToHxiKAuREDgRP9waHmk16833hNe8tDvX5P9vKWxx1AtZRuJoFozw==
+-----END RSA PRIVATE KEY-----
+"""
+
 public_key1="""ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4jNj8yT9ieEc6nSJz/ESu4fui9WrJ2y/MCfqIZ5WcdVKhBFUYyIenmUaeTduMcSqvoYRQ4QnFR1BFdLG8XR9D6FWZ5zTKUgpkew22EVNeqai4IXeWYKyt1Qf3ehaz9E3o1PG/bmQNIM6aQay6TD1Y4lqXI+eTVXVQev4K2fixySjFQpp9RB4UHbeA8c28yoa/cgAYHqCqlvm9uvpGMjgm/Qa4M+ZeO7NdjowfaF/wF4BQIzVFN9YRhvQ/d8WDz84B5Pr0J7pWpaX7EyC4bvdskxl6kmdNIwIRcIe4OcuIiX5Z9oO+7h/chsEVJWF4vqNIYlL9Zvyhnr0hLLhhuk2bw== planetlab-pi@test.onelab.eu
 """
 private_key1="""-----BEGIN RSA PRIVATE KEY-----
@@ -270,18 +310,31 @@ NhwboXV6u+hSpUHGK+MmqGgKkkZI6KRwTT+NWZY2FTX3UOl8IMymTBk=
 -----END RSA PRIVATE KEY-----
 """
 
+master_key_index = {
+    'key_admin':    {'private':private_key0, 'public':public_key0},
+    'key_pi':       {'private':private_key1, 'public':public_key1},
+    'key_user':     {'private':private_key2, 'public':public_key2},
+    'key_sfapi':    {'private':private_key3, 'public':public_key3},
+    'key_sfauser':  {'private':private_key4, 'public':public_key4},
+}
 
-# the keys for PLC
-def plc_keys (options,index):
-    return [ {'name': 'key1',
-              'private' : private_key1,
-              'key_fields' : {'key_type':'ssh',
-                              'key': public_key1}},
-             {'name': 'key2',
-              'private' : private_key2,
-              'key_fields' : {'key_type':'ssh',
-                              'key': public_key2}}
-             ]
+plc_key_names = [ 'key_admin', 'key_pi', 'key_tech' ]
+
+# expose a list of key_specs
+#  { 'key_name':<>, 'private':<>, 'public':<>, 'in_plc':<bool>, key_fields: <for AddKey>, }
+def keys (options,index):
+    result = []
+    for (key_name, priv_pub) in master_key_index.items():
+        private=priv_pub['private']
+        public=priv_pub['public']
+        result.append( { 'key_name': key_name,
+                         'private':private,
+                         'public':public,
+                         'in_plc': key_name in plc_key_names,
+                         'key_fields' : {'key_type':'ssh',
+                                         'key': public},
+                         } )
+    return result
 
 ############################## initscripts
 initscript_by_name="""#!/bin/bash
@@ -323,8 +376,10 @@ def initscripts(options,index):
                                        }},
              ]
 
-# 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),
@@ -338,42 +393,67 @@ def slices (options,index):
                        'sitename' : login_base(index),
                        'owner' : 'pi',
                        }
-        # odd one has an initscript_code
-        if i%2==1:
+        # 1st one has an initscript_code
+        if i%3==1:
             slice_spec['initscriptcode']=initscript_by_code
             slice_spec['initscriptstamp']='the_script_code'
-        # even one has an initscript (name)
-        else:
+        # 2nd one has an initscript (name)
+        elif i%3==2:
             slice_spec['initscriptname']='the_script_name'
             slice_spec['initscriptstamp']='the_script_name'
+        # 3rd one is omf-friendly
+        else:
+            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
@@ -403,6 +483,7 @@ def plc (options,index) :
         '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',
@@ -414,16 +495,21 @@ def plc (options,index) :
         '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, ',
+        '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' : plc_keys(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
@@ -447,65 +533,63 @@ def sfa (options,index) :
         '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)
+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',
+        'add_options':  [ '--extra',"first_name=Fake",
+                          '--extra',"last_name=SFA-style-%s"%rspec_style,
+                          ],
+        'update_options': [ '--extra',"enabled=true",
+                             ],
+        }
+
+    slice_spec = {
+        'name':          'sl',
+        'add_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
-    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
-    person_options = { '-t': 'user',
-                       '-x': user_hrn,
-                       '-e': mail,
-                       '-f': "Fake",
-                       '-l': "SFA-style-%s"%rspec_style,
-                       }
-                       
-    slice_options = { '-t': 'slice',
-                      '-x': hrn,
-                      '-d': "SFA-testing-%s"%rspec_style,
-                      '-u': "http://test.onelab.eu/",
-                      '-r': user_hrn,
-                      }
-
-    return { 'slice_fields': {'name':'%s_%s'%(the_login_base,slicename),
-                              'url':'http://foo%d@foo.com'%index,
-                              'description':'SFA-testing',
-                              'max_nodes':2,
-                              },
-             'login_base' : the_login_base,
-             'piuser' : piuser,
-             'pimail' : pimail,
-             'regularuser':regularuser,
+
+    return { #'hrn_prefix': hrn_prefix,
+             'login_base' : login_base,
              'domain':domain,
-             'usernames' : [ (regularuser,'key2') ],
-             'nodenames' : all_nodenames(options,index),
-             'sitename' : the_login_base,
-             'slicename' : slicename,
              'rspec_style':rspec_style,
-             'person_sfi_options': person_options,
-             'slice_sfi_options': slice_options,
-             # these get exported under the sfi directory
-             'pi_private_key':private_key3,
-             'pi_public_key':public_key3,
-             'user_private_key':private_key4,
-             'user_public_key':public_key4,
+             '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