first draft for vserver-based native myplc
[tests.git] / system / TestSite.py
index 9357d5f..d01e349 100644 (file)
@@ -1,13 +1,12 @@
-import os
-import sys
+import os.path
 import datetime
 import time
-import xmlrpclib
 import traceback
 
 import utils
 from TestNode import TestNode
 from TestUser import TestUser
+from TestKey import TestKey
 
 class TestSite:
 
@@ -20,19 +19,16 @@ class TestSite:
 
     def create_site (self):
         print self.test_plc.auth_root()
-        self.site_id = self.test_plc.server.AddSite(self.test_plc.auth_root(),
+        self.test_plc.server.AddSite(self.test_plc.auth_root(),
                                                     self.site_spec['site_fields'])
-        self.test_plc.server.AddSiteAddress(self.test_plc.auth_root(),self.site_id,
+        self.test_plc.server.AddSiteAddress(self.test_plc.auth_root(),self.name(),
                                             self.site_spec['address_fields'])
             
-        return self.site_id
-            
     def create_users (self):
         for user_spec in self.site_spec['users']:
             test_user=TestUser(self.test_plc,self,user_spec)
             test_user.create_user()
             test_user.add_keys()            
-        
 
     def delete_site (self):
         print self.test_plc.auth_root()
@@ -80,14 +76,12 @@ class TestSite:
                     utils.header('Actual status for node %s is [%s]'%(hostname,node_status))
                     try:
                         if (node_status[0] == bt):
-                            test_name='Test Installation Node hosted: '+hostname
-                            self.test_plc.display_results(test_name, 'Successful', '')
-                            break ##for existing and renaming virtual file to just installed
+                            utils.header('%s has reached boot state'%hostname)
+                            break 
                         elif (node_status[0] ==dbg):
-                            test_name='Test Installation Node hosted: '+hostname
-                            self.test_plc.display_results(test_name, 'En Debug', '')
+                            utils.header('%s has reached debug state'%hostname)
                             bool=False
-                            break ##for existing and renaming virtual file to just installed
+                            break 
                         elif ( start_time  <= dead_time ) :
                             start_time=datetime.datetime.now()+ datetime.timedelta(minutes=2)
                             time.sleep(secondes)
@@ -100,8 +94,6 @@ class TestSite:
                 else :
                     utils.header("Node %s not fully booted"%hostname)
                     ret_value=False
-                    test_name='Test Installation Node Hosted: ',hostname
-                    self.test_plc.display_results(test_name, 'Failure', '')
             
             utils.header("End checking for nodes in site %s"%self.name())
             return ret_value
@@ -120,7 +112,7 @@ class TestSite:
     def delete_known_hosts(self):
         utils.header("Messing with known_hosts (cleaning hostnames starting with 'test[0-9]')")
         sed_command="sed -i -e '/^test[0-9]/d' /root/.ssh/known_hosts"
-        os.system("set -x ; " + sed_command)
+        utils.system(sed_command)
 
     # xxx should be attached to TestPlc
     def check_slices(self):
@@ -134,14 +126,29 @@ class TestSite:
         for slice_spec in self.test_plc.plc_spec['slices']:
             for hostname in slice_spec['nodenames']:
                 slicename=slice_spec['slice_fields']['name']
+                # locate the first avail. key
+                found=False
+                for username in slice_spec['usernames']:
+                    user_spec=self.locate_user(username)
+                    for keyname in user_spec['keynames']:
+                        key_spec=self.test_plc.locate_key(keyname)
+                        publickey=TestKey(self.test_plc,key_spec).publicpath()
+                        privatekey=TestKey(self.test_plc,key_spec).privatepath()
+                        if os.path.isfile(publickey) and os.path.isfile(privatekey):
+                            found=True
+                            break
+                if not found:
+                    raise Exception,"Cannot find a valid key for slice %s"%slicename
+
                 while(bool):
                     utils.header('restarting nm on %s'%hostname)
-                    access=os.system('set -x; ssh -i /etc/planetlab/root_ssh_key.rsa  root@%s service nm restart'%hostname )
+                    access=utils.system('ssh -i /etc/planetlab/root_ssh_key.rsa root@%s service nm restart'%hostname )
                     if (access==0):
                         utils.header('nm restarted on %s'%hostname)
                         while(bool1):
                             utils.header('trying to connect to %s@%s'%(slicename,hostname))
-                            Date=os.system('set -x; ssh -i ~/.ssh/slices.rsa %s@%s date'%(slicename,hostname))
+                            ### should use saved keys instead of this hard-coded stuff
+                            Date=utils.system('ssh -i %s %s@%s date'%(privatekey,slicename,hostname))
                             if (Date==0):
                                 break
                             elif ( start_time  <= dead_time ) :
@@ -153,15 +160,15 @@ class TestSite:
                             utils.header('connected to %s@%s -->'%(slicename,hostname))
                         else:
                             utils.header('%s@%s : last chance - restarting nm on %s'%(slicename,hostname,hostname))
-                            access=os.system('set -x; ssh -i /etc/planetlab/root_ssh_key.rsa  root@%s service nm restart'%hostname)
+                            access=utils.system('ssh -i /etc/planetlab/root_ssh_key.rsa  root@%s service nm restart'%hostname)
                             if (access==0):
                                 utils.header('trying to connect (2) to %s@%s'%(slicename,hostname))
-                                Date=os.system('set -x; ssh -i ~/.ssh/slices.rsa %s@%s date'%(slicename,hostname))
+                                Date=utils.system('ssh -i ~/.ssh/slices.rsa %s@%s date'%(slicename,hostname))
                                 if (Date==0):
                                     utils.header('connected to %s@%s -->'%(slicename,hostname))
                                 else:
                                     utils.header('giving up with to %s@%s -->'%(slicename,hostname))
-                                    sys.exit(1)
+                                    return False
                             else :
                                 utils.header('Last chance failed on %s@%s -->'%(slicename,hostname))
                         break