a few more tweaks
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 1 Jun 2012 21:03:41 +0000 (23:03 +0200)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 1 Jun 2012 21:03:41 +0000 (23:03 +0200)
system/TestPlc.py
system/TestSlice.py
system/TestSliceSfa.py
system/TestSliver.py
system/TestUserSfa.py

index 5b5efe4..0f78c84 100644 (file)
@@ -269,6 +269,19 @@ class TestPlc:
                 return key
         raise Exception,"Cannot locate key %s"%key_name
 
+    def locate_private_key_from_key_names (self, key_names):
+        # locate the first avail. key
+        found=False
+        for key_name in key_names:
+            key_spec=self.locate_key(key_name)
+            test_key=TestKey(self,key_spec)
+            publickey=test_key.publicpath()
+            privatekey=test_key.privatepath()
+            if os.path.isfile(publickey) and os.path.isfile(privatekey):
+                found=True
+        if found: return privatekey
+        else:     return None
+
     def locate_slice (self, slicename):
         for slice in self.plc_spec['slices']:
             if slice['slice_fields']['name'] == slicename:
index 3b37d62..f062884 100644 (file)
@@ -90,20 +90,12 @@ class TestSlice:
                           (len(node_ids),slice_name))
         self.test_plc.apiserver.DeleteSliceFromNodes (auth,slice_name, node_ids)
 
-    def locate_key(self):
-        # locate the first avail. key
-        found=False
+    def locate_private_key(self):
+        key_names=[]
         for username in self.slice_spec['usernames']:
             user_spec=self.test_site.locate_user(username)
-            for key_name in user_spec['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)
-
+            key_names += user_spec['key_names']
+        return self.test_plc.locate_private_key_from_key_names (key_names)
 
     # trying to reach the slice through ssh - expected to answer
     def ssh_slice (self, options, *args, **kwds):
@@ -119,8 +111,8 @@ class TestSlice:
         timeout = datetime.datetime.now()+datetime.timedelta(minutes=timeout_minutes)
         graceout = datetime.datetime.now()+datetime.timedelta(minutes=silent_minutes)
         # locate a key
-        (found,remote_privatekey)=self.locate_key()
-        if not found :
+        private_key=self.locate_private_key()
+        if not private_key :
             utils.header("WARNING: Cannot find a valid key for slice %s"%self.name())
             return False
 
@@ -141,7 +133,7 @@ class TestSlice:
         while tocheck:
             for hostname in tocheck:
                 (site_spec,node_spec) = self.test_plc.locate_hostname(hostname)
-                date_test_ssh = TestSsh (hostname,key=remote_privatekey,username=self.name())
+                date_test_ssh = TestSsh (hostname,key=private_key,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
index c9fd2ab..125eb59 100644 (file)
@@ -68,12 +68,13 @@ class TestSliceSfa:
             if self.test_plc.run_in_guest(command)!=0: return False
         return True
 
+    def plc_name (self):
+        return "%s_%s"%(self.test_auth_sfa.login_base,self.slice_spec['name'])
+
     # 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"
-        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]
+        slice=self.test_plc.apiserver.GetSlices(self.test_plc.auth_root(), self.plc_name())[0]
         nodes=self.test_plc.apiserver.GetNodes(self.test_plc.auth_root(), {'peer_id':None})
         result=True
         for node in nodes: 
@@ -95,21 +96,24 @@ class TestSliceSfa:
        self.test_plc.run_in_guest(self.sfi_pi("delete %s"%(self.hrn(),)))
        return self.test_plc.run_in_guest(self.sfi_pi("remove -t slice %s"%(self.hrn(),)))==0
 
+    def locate_private_key(self):
+        return self.test_plc.locate_private_key_from_key_names ( [ self.slice_spec['key_name'] ] )
+
     # check the resulting sliver
     def ssh_slice_sfa(self,options,timeout_minutes=40,silent_minutes=30,period=15):
        "tries to ssh-enter the SFA slice"
         timeout = datetime.datetime.now()+datetime.timedelta(minutes=timeout_minutes)
         graceout = datetime.datetime.now()+datetime.timedelta(minutes=silent_minutes)
         # locate a key
-        (found,remote_privatekey)=self.locate_key()
-        if not found :
-            utils.header("WARNING: Cannot find a valid key for slice %s"%self.plc_name())
+        private_key=self.locate_private_key()
+        if not private_key :
+            utils.header("WARNING: Cannot find a valid key for slice %s"%self.name())
             return False
 
         # convert nodenames to real hostnames
         restarted=[]
         tocheck=[]
-        for nodename in self.auth_sfa_spec['nodenames']:
+        for nodename in self.slice_spec['nodenames']:
             (site_spec,node_spec) = self.test_plc.locate_node(nodename)
             tocheck.append(node_spec['node_fields']['hostname'])
 
@@ -119,7 +123,7 @@ class TestSliceSfa:
         while tocheck:
             for hostname in tocheck:
                 (site_spec,node_spec) = self.test_plc.locate_hostname(hostname)
-                date_test_ssh = TestSsh (hostname,key=remote_privatekey,username=self.plc_name())
+                date_test_ssh = TestSsh (hostname,key=private_key,username=self.plc_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 date==0:
index c4b3fb8..b1e68ca 100644 (file)
@@ -24,10 +24,10 @@ class TestSliver:
             print str(e)
             
     def create_test_ssh(self):
-        (found,privatekey) = self.get_privateKey()
-        if not found:
+        private_key = self.test_slice.locate_private_key()
+        if not private_key:
             raise Exception,"Cannot find the private key for slice %s"%self.test_slice.name()
-        return TestSsh (self.test_node.name(),key=privatekey,username=self.test_slice.name(),
+        return TestSsh (self.test_node.name(),key=private_key,username=self.test_slice.name(),
                         # so that copies end up in the home dir
                         buildname=".")
 
index 49eb7eb..d0bf3c8 100644 (file)
@@ -17,13 +17,15 @@ class TestUserSfa:
 
     def sfi_path(self): return self.test_auth_sfa.sfi_path()
     def qualified(self,name): return self.test_auth_sfa.qualified(name)
+    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)
 
     # xxx todo - not the right place any longer - or is it ?
     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="%s add"%(self.sfi_path())
         command += " --type user"
         command += " --xrn %s"%user_hrn
         command += " --email %s"%self.user_spec['email']
@@ -32,7 +34,7 @@ class TestUserSfa:
         # handle key separately because of embedded whitespace
         # hack - the user's pubkey is avail from his hrn
         command += " -k %s/%s.pub"%(self.sfi_path(),user_hrn)
-       return self.test_plc.run_in_guest(command)==0
+       return self.test_plc.run_in_guest(self.sfi_pi(command))==0
 
     def sfa_update_user (self,options):
         "update a user record using sfi update"
@@ -42,7 +44,7 @@ class TestUserSfa:
 
     def sfa_delete_user(self,options):
        "run sfi delete on user record"
-       auth=self.test_auth_sfa.root_hrn()
+        user_hrn = self.qualified(self.user_spec['name'])
+        command="remove -t user %s"%user_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
+            self.test_plc.run_in_guest(self.sfi_pi(command))==0