ad more steps to go back and forth in the sfa scenario
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 24 Sep 2010 10:34:28 +0000 (12:34 +0200)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 24 Sep 2010 10:34:28 +0000 (12:34 +0200)
fixed all hard-wired slice/site names

system/TestMain.py
system/TestPlc.py
system/TestSliceSfa.py
system/config_default.py

index cf7df7b..8854624 100755 (executable)
@@ -191,7 +191,7 @@ steps refer to a method in TestPlc or to a step_* module
         if self.options.list_steps:
             self.init_steps()
             self.list_steps()
-            sys.exit(1)
+            return True
 
         # steps
         if not self.options.steps:
index 23afd8b..ea1c68a 100644 (file)
@@ -71,7 +71,7 @@ def slice_mapper_options_sfa (method):
        test_plc=self
         overall=True
         slice_method = TestSliceSfa.__dict__[method.__name__]
-        for slice_spec in self.plc_spec['sfa']['slices_sfa']:
+        for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
             site_spec = self.locate_site (slice_spec['sitename'])
             test_site = TestSite(self,site_spec)
             test_slice=TestSliceSfa(test_plc,test_site,slice_spec)
@@ -96,7 +96,7 @@ class TestPlc:
         # better use of time: do this now that the nodes are taking off
         'plcsh_stress_test', SEP,
        'install_sfa', 'configure_sfa', 'cross_configure_sfa', 'import_sfa', 'start_sfa', SEPSFA,
-        'setup_sfa', 'add_sfa', 'update_sfa', 'view_sfa', SEPSFA,
+        'configure_sfi', 'add_sfa', 'update_sfa', 'view_sfa', SEPSFA,
         'nodes_ssh_debug', 'nodes_ssh_boot', 'check_slice', 'check_initscripts', SEPSFA,
         'check_slice_sfa', 'delete_sfa', 'stop_sfa', SEPSFA,
         'check_tcp',  'check_hooks',  SEP,
@@ -110,6 +110,7 @@ class TestPlc:
         'clean_leases', 'list_leases', SEP,
         'populate' , SEP,
         'list_all_qemus', 'list_qemus', 'kill_qemus', SEP,
+        'plcclean_sfa', 'dbclean_sfa', 'uninstall_sfa', 'clean_sfi', SEP,
         'db_dump' , 'db_restore', SEP,
         'standby_1 through 20',SEP,
         ]
@@ -1061,20 +1062,41 @@ class TestPlc:
     ### install_sfa_rpm
     def install_sfa(self):
         "yum install sfa, sfa-plc and sfa-client"
-        if self.options.personality == "linux32":
-            arch = "i386"
-        elif self.options.personality == "linux64":
-            arch = "x86_64"
-        else:
-            raise Exception, "Unsupported personality %r"%self.options.personality
         return self.run_in_guest("yum -y install sfa sfa-client sfa-plc sfa-sfatables")==0
 
+    def dbclean_sfa(self):
+        "thoroughly wipes off the SFA database"
+        return self.run_in_guest("sfa-nuke-plc.py")==0
+
+    def plcclean_sfa(self):
+        "cleans the PLC entries that were created as a side effect of running the script"
+        # ignore result 
+        sfa_spec=self.plc_spec['sfa']
+
+        slicename='%s_%s'%(sfa_spec['login_base'],sfa_spec['slicename'])
+        try: self.apiserver.DeleteSlice(self.auth_root(),slicename)
+        except: print "Slice %s already absent from PLC db"%slicename
+
+        username="%s@%s"%(sfa_spec['regularuser'],sfa_spec['domain'])
+        try: self.apiserver.DeletePerson(self.auth_root(),username)
+        except: print "User %s already absent from PLC db"%username
+
+        print "REMEMBER TO RUN import_sfa AGAIN"
+        return True
+
+    def uninstall_sfa(self):
+        "uses rpm to uninstall sfa - ignore result"
+        self.run_in_guest("rpm -e sfa sfa-sfatables sfa-client sfa-plc")
+        self.run_in_guest("rm -rf /var/lib/sfa")
+        return True
+
     ###
     def configure_sfa(self):
         "run sfa-config-tty"
         tmpname='%s.sfa-config-tty'%(self.name())
         fileconf=open(tmpname,'w')
         for var in [ 'SFA_REGISTRY_ROOT_AUTH',
+                     'SFA_INTERFACE_HRN',
 #                     'SFA_REGISTRY_LEVEL1_AUTH',
                     'SFA_REGISTRY_HOST',
                     'SFA_AGGREGATE_HOST',
@@ -1135,14 +1157,14 @@ class TestPlc:
         "service sfa start"
         return self.run_in_guest('service sfa start')==0
 
-    def setup_sfa(self):
+    def configure_sfi(self):
         sfa_spec=self.plc_spec['sfa']
         "sfi client configuration"
        dir_name=".sfi"
        if os.path.exists(dir_name):
            utils.system('rm -rf %s'%dir_name)
        utils.system('mkdir %s'%dir_name)
-       file_name=dir_name + os.sep + 'fake-pi1.pkey'
+       file_name=dir_name + os.sep + sfa_spec['piuser'] + '.pkey'
         fileconf=open(file_name,'w')
         fileconf.write (self.plc_spec['keys'][0]['private'])
         fileconf.close()
@@ -1152,7 +1174,7 @@ class TestPlc:
        SFI_AUTH="%s.%s"%(sfa_spec['SFA_REGISTRY_ROOT_AUTH'],sfa_spec['login_base'])
         fileconf.write ("SFI_AUTH='%s'"%SFI_AUTH)
        fileconf.write('\n')
-       SFI_USER=SFI_AUTH+'.fake-pi1'
+       SFI_USER=SFI_AUTH + '.' + sfa_spec['piuser']
         fileconf.write ("SFI_USER='%s'"%SFI_USER)
        fileconf.write('\n')
        SFI_REGISTRY='http://' + sfa_spec['SFA_PLC_DB_HOST'] + ':12345/'
@@ -1196,39 +1218,44 @@ class TestPlc:
         utils.system('rm -rf %s'%dir_name)
         return True
 
+    def clean_sfi (self):
+        self.run_in_guest("rm -rf /root/.sfi")
+        return True
+
     def add_sfa(self):
         "run sfi.py add (on Registry) and sfi.py create (on SM) to form new objects"
        test_plc=self
         test_user_sfa=TestUserSfa(test_plc,self.plc_spec['sfa'])
-        success=test_user_sfa.add_user()
+        if not test_user_sfa.add_user(): return False
 
-       for slice_spec in self.plc_spec['sfa']['slices_sfa']:
+       for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
             site_spec = self.locate_site (slice_spec['sitename'])
             test_site = TestSite(self,site_spec)
            test_slice_sfa=TestSliceSfa(test_plc,test_site,slice_spec)
-           success1=test_slice_sfa.add_slice()
-           success2=test_slice_sfa.create_slice()
-       return success and success1 and success2
+           if not test_slice_sfa.add_slice(): return False
+           if not test_slice_sfa.create_slice(): return False
+        return True
 
     def update_sfa(self):
         "run sfi.py update (on Registry) and sfi.py create (on SM) on existing objects"
        test_plc=self
        test_user_sfa=TestUserSfa(test_plc,self.plc_spec['sfa'])
-       success1=test_user_sfa.update_user()
+       if not test_user_sfa.update_user(): return False
        
-       for slice_spec in self.plc_spec['sfa']['slices_sfa']:
+       for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
            site_spec = self.locate_site (slice_spec['sitename'])
            test_site = TestSite(self,site_spec)
            test_slice_sfa=TestSliceSfa(test_plc,test_site,slice_spec)
-           success2=test_slice_sfa.update_slice()
-       return success1 and success2
+           if not test_slice_sfa.update_slice(): return False
+        return True
 
     def view_sfa(self):
         "run sfi.py list and sfi.py show (both on Registry) and sfi.py slices and sfi.py resources (both on SM)"
-       auth=self.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
+        sfa_spec=self.plc_spec['sfa']
+       auth=sfa_spec['SFA_REGISTRY_ROOT_AUTH']
        return \
-       self.run_in_guest("sfi.py -d /root/.sfi/ list %s.main"%auth)==0 and \
-       self.run_in_guest("sfi.py -d /root/.sfi/ show %s.main"%auth)==0 and \
+       self.run_in_guest("sfi.py -d /root/.sfi/ list %s.%s"%(auth,sfa_spec['login_base']))==0 and \
+       self.run_in_guest("sfi.py -d /root/.sfi/ show %s.%s"%(auth,sfa_spec['login_base']))==0 and \
        self.run_in_guest("sfi.py -d /root/.sfi/ slices")==0 and \
        self.run_in_guest("sfi.py -d /root/.sfi/ resources -o resources")==0
 
@@ -1242,7 +1269,7 @@ class TestPlc:
        test_plc=self
        test_user_sfa=TestUserSfa(test_plc,self.plc_spec['sfa'])
        success1=test_user_sfa.delete_user()
-       for slice_spec in self.plc_spec['sfa']['slices_sfa']:
+       for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
             site_spec = self.locate_site (slice_spec['sitename'])
             test_site = TestSite(self,site_spec)
            test_slice_sfa=TestSliceSfa(test_plc,test_site,slice_spec)
index 281df58..ef8080c 100644 (file)
@@ -19,6 +19,12 @@ class TestSliceSfa:
        #self.slice_spec=plc_spec_sfa['slices_sfa'][0]
        self.slice_spec=slice_spec
         self.test_ssh=TestSsh(self.test_plc.test_ssh)
+        # shortcuts
+        self.sfa_spec=test_plc.plc_spec['sfa']
+        self.piuser=self.sfa_spec['piuser']
+        self.regularuser=self.sfa_spec['regularuser']
+        self.slicename=self.sfa_spec['slicename']
+        self.login_base=self.sfa_spec['login_base']
         
     def name(self):
         return self.slice_spec['slice_fields']['name']
@@ -39,11 +45,12 @@ class TestSliceSfa:
     def create_slice(self):
        auth=self.test_plc.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
         self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ resources -o /root/.sfi/resources_in.rspec")
-        self.test_plc.run_in_guest(
-            "sfiListNodes.py -i /root/.sfi/resources_in.rspec -o /root/.sfi/all_nodes.txt")
-        self.test_plc.run_in_guest(
-            "sfiAddSliver.py -i /root/.sfi/resources_in.rspec -n /root/.sfi/all_nodes.txt -o /root/.sfi/resources_out.rspec")
-       return self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ create %s.main.fslc1 resources_out.rspec"%auth)==0
+        return \
+            self.test_plc.run_in_guest(
+               "sfiListNodes.py -i /root/.sfi/resources_in.rspec -o /root/.sfi/all_nodes.txt")==0 and \
+            self.test_plc.run_in_guest(
+               "sfiAddSliver.py -i /root/.sfi/resources_in.rspec -n /root/.sfi/all_nodes.txt -o /root/.sfi/resources_out.rspec")==0 and \
+            self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ create %s.%s.%s resources_out.rspec"%(auth,self.login_base,self.slicename))==0
 
     def update_slice(self):
        auth=self.test_plc.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
@@ -52,12 +59,12 @@ class TestSliceSfa:
             "sfiListNodes.py -i /root/.sfi/resources_in.rspec -o /root/.sfi/all_nodes.txt")
         self.test_plc.run_in_guest(
             "sfiAddSliver.py -i /root/.sfi/resources_in.rspec -n /root/.sfi/all_nodes.txt -o /root/.sfi/resources_out.rspec")
-       return self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ create %s.main.fslc1 resources_out.rspec"%auth)==0
+       return self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ create %s.%s.%s resources_out.rspec"%(auth,self.login_base,self.slicename))==0
 
     def delete_slice(self):
        auth=self.test_plc.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
-       self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ delete %s.main.fslc1"%auth)
-       return self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ remove -t slice %s.main.fslc1"%auth)==0
+       self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ delete %s.%s.%s"%(auth,self.login_base,self.slicename))
+       return self.test_plc.run_in_guest("sfi.py -d /root/.sfi/ remove -t slice %s.%s.%s"%(auth,self.login_base,self.slicename))==0
 
     def check_slice_sfa(self,options,timeout_minutes=40,silent_minutes=30,period=15):
         timeout = datetime.datetime.now()+datetime.timedelta(minutes=timeout_minutes)
index 6f113c1..9addccc 100644 (file)
@@ -10,6 +10,8 @@
 
 # values like 'hostname', 'ip' and the like are rewritten later with a TestPool object
 
+domain="onelab.eu"
+
 ### for the sfa dual setup
 def login_base (index): 
     if index==1: return 'inria'
@@ -46,7 +48,6 @@ def all_nodenames (options,index):
     return [ node['name'] for node in nodes(options,index)]
 
 def users (options) :
-    domain="onelab.eu"
     return [ {'name' : 'pi', 'keynames' : [ 'key1' ],
               'user_fields' : {'first_name':'PI', 'last_name':'PI',
                                'enabled':'True',
@@ -268,8 +269,12 @@ def plc (options,index) :
     }
 
 def sfa (options,index) :
+    piuser='fake-pi%d'%index
+    regularuser='sfafakeuser%d'%index
+    slicename='fslc%d'%index
     return { 
         'SFA_REGISTRY_ROOT_AUTH' : sfa_root(index),
+        'SFA_INTERFACE_HRN' : sfa_root(index),
 #        'SFA_REGISTRY_LEVEL1_AUTH' : '',
        'SFA_REGISTRY_HOST' : 'deferred-myplc-hostname',
        'SFA_AGGREGATE_HOST': 'deferred-myplc-hostname',
@@ -280,36 +285,42 @@ def sfa (options,index) :
         'SFA_PLC_DB_USER' : 'pgsqluser',
         'SFA_PLC_DB_PASSWORD' : 'mnbvcxzlkjhgfdsapoiuytrewq',
        'SFA_PLC_URL' : 'deferred-myplc-api-url',
-        'slices_sfa' : slices_sfa(options,index),
-       'sfa_slice_xml' : sfa_slice_xml(options,index),
-       'sfa_person_xml' : sfa_person_xml(options,index),
+        'sfa_slice_specs' : sfa_slice_specs(options,index,slicename,regularuser),
+       'sfa_slice_xml' : sfa_slice_xml(options,index,piuser,slicename),
+       'sfa_person_xml' : sfa_person_xml(options,index,regularuser),
        'sfa_slice_rspec' : sfa_slice_rspec(options,index),
         'login_base' : login_base(index),
+        'piuser' : piuser,
+        'regularuser':regularuser,
+        'slicename' : slicename,
+        'domain':domain,
     }
 
-def slices_sfa (options,index):
-    return [ { 'slice_fields': {'name':'%s_fslc1'%login_base(index),
+def sfa_slice_specs (options,index,slicename,regularuser):
+    return [ { 'slice_fields': {'name':'%s_%s'%(login_base(index),slicename),
                                 'url':'http://foo%d@foo.com'%index,
                                 'description':'SFA-testing',
                                 'max_nodes':2,
                                 },
-               'usernames' : [ ('sfafakeuser1','key1') ],
+               'usernames' : [ (regularuser,'key1') ],
                'nodenames' : all_nodenames(options,index),
                'sitename' : login_base(index),
                }]
 
-def sfa_slice_xml(options,index):
+def sfa_slice_xml(options,index,piuser,slicename):
     prefix='%s.%s'%(sfa_root(index),login_base(index))
-    hrn=prefix+'.fslc1'
-    researcher=prefix+'.fake-pi1'
+    hrn=prefix+'.'+slicename
+    researcher=prefix+'.'+piuser
 
     return  ['<record hrn="%s" type="slice" description="SFA-testing" url="http://test.onelab.eu/"><researcher>%s</researcher></record>'%(hrn, researcher)]
 
-def sfa_person_xml(options,index):
+def sfa_person_xml(options,index,regularuser):
     prefix='%s.%s'%(sfa_root(index),login_base(index))
-    hrn=prefix+'.sfafakeuser1'
+    hrn=prefix+'.'+regularuser
+    mail="%s@%s"%(regularuser,domain)
+    key=public_key
 
-    return ['<record email="sfafakeuser1@onelab.eu" enabled="True" first_name="Fake" hrn="%s" last_name="Sfa" name="%s" type="user"><keys>%s</keys><role_ids>20</role_ids><role_ids>10</role_ids><site_ids>1</site_ids><roles>pi</roles><roles>admin</roles><sites>%s</sites></record>'%(hrn,hrn,public_key,prefix)]
+    return ['<record email="%(mail)s" enabled="True" first_name="Fake" hrn="%(hrn)s" last_name="Sfa" name="%(hrn)s" type="user"><keys>%(key)s</keys><role_ids>20</role_ids><role_ids>10</role_ids><site_ids>1</site_ids><roles>pi</roles><roles>admin</roles><sites>%(prefix)s</sites></record>'%locals()]
 
 def sfa_slice_rspec(options,index):
     node_name='deferred'