X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FTestSite.py;h=f4d6cf296777aeb4d03f4fe83d6131dfbd96ceeb;hb=c8e2f4e3a327181b29521583770a6f0ff68ca6eb;hp=817e21d3037f80f523ee276877a8687f19b28a43;hpb=e18304ed026c9f39e509ca8a19ce85ea10b2b236;p=tests.git diff --git a/system/TestSite.py b/system/TestSite.py index 817e21d..f4d6cf2 100644 --- a/system/TestSite.py +++ b/system/TestSite.py @@ -1,221 +1,62 @@ -import os -import sys +# Thierry Parmentelat +# Copyright (C) 2010 INRIA +# +import os.path import datetime import time -from TestConfig import * -import xmlrpclib +import traceback + +import utils +from TestNode import TestNode +from TestUser import TestUser +from TestKey import TestKey class TestSite: - def __init__ (self,test_plc,site_spec): - self.test_plc=test_plc - self.site_spec=site_spec - self.timset=time.strftime("%H:%M:%S", time.localtime()) + def __init__ (self, test_plc, site_spec): + self.test_plc = test_plc + self.site_spec = site_spec + def name(self): + return self.site_spec['site_fields']['login_base'] + def create_site (self): - try: - print self.test_plc.auth_root() - self.site_id = 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.site_spec['site_address']) - - return self.site_id - except Exception, e: - print str(e) - - def site_id(self): - return self.site_id() + print self.test_plc.auth_root() + self.test_plc.apiserver.AddSite(self.test_plc.auth_root(), + self.site_spec['site_fields']) + self.test_plc.apiserver.AddSiteAddress(self.test_plc.auth_root(), + self.name(), + self.site_spec['address_fields']) + + 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 create_user (self, user_spec): - try: - i=0 - print '========>Adding user at '+self.timset+ ': ',user_spec - self.person_id=self.test_plc.server.AddPerson(self.test_plc.auth_root(), - user_spec) - self.test_plc.server.UpdatePerson(self.test_plc.auth_root(), - self.person_id,{'enabled': True}) - for role in user_spec['roles']: - self.test_plc.server.AddRoleToPerson(self.test_plc.auth_root(), - role,user_spec['email']) - self.test_plc.server.AddPersonToSite(self.test_plc.auth_root(), - user_spec['email'], - self.site_spec['site_fields']['login_base']) - except Exception,e: - print str(e) - - def enable_user (self, user_spec): - try: - persones=self.test_plc.server.GetPersons(self.test_plc.auth_root()) - for person in persones: - if (person['enabled']!="True"): - self.test_plc.server.UpdatePerson(self.test_plc.auth_root(), - person['person_id'], - {'enabled': True}) - except Exception,e: - print str(e) - - def add_key_user(self,user_spec): - try: - auth="" - for userspec in self.site_spec['users']: - if(user_spec == userspec): - for role in userspec['roles']: - auth=auth+role - print auth - self.test_plc.server.AddPersonKey(self.anyuser_auth(auth), - user_spec['email'], key) - except Exception, e: - print str(e) - - def anyuser_auth (self,key): - for person in self.site_spec['users']: - if person['auth_meth']== key : - return {'Username':person['email'], - 'AuthMethod':'password', - 'AuthString':person['password'], - 'Role':person['roles'][0], - } + def delete_site (self): + print self.test_plc.auth_root() + self.test_plc.apiserver.DeleteSite(self.test_plc.auth_root(), self.name()) + return True + + def delete_users(self): + for user_spec in self.site_spec['users']: + test_user = TestUser(self.test_plc, self, user_spec) + test_user.delete_user() - def node_check_status(self,liste_nodes,bool): - try: - ret_value=True - filter=['boot_state'] - bt={'boot_state':'boot'} - dbg={'boot_state':'dbg'} - secondes=15 - start_time = datetime.datetime.now() ##geting the current time - dead_time=datetime.datetime.now()+ datetime.timedelta(minutes=10)##adding 10minutes - start=time.strftime("%H:%M:%S", time.localtime()) - print "time in the begining is :",start - - for l in liste_nodes : - while (bool): - node_status=self.test_plc.server.GetNodes(self.test_plc.auth_root(), - l['hostname'], filter) - timset=time.strftime("%H:%M:%S", time.localtime()) - print 'the actual status for the node '+l['hostname']+' at '+str(timset)+' is :',node_status - try: - if (node_status[0] == bt): - test_name='\nTest Installation Node hosted: '+l['hostname'] - self.test_plc.affiche_results(test_name, 'Successful', '')##printing out the result - break ##for exsiting and renaming virtual file to just installed - elif (node_status[0] ==dbg): - test_name='\nTest Installation Node hosted: '+l['hostname'] - self.test_plc.affiche_results(test_name, 'En Debug', '')##printing out the result - bool=False - break ##for exsiting and renaming virtual file to just installed - elif ( start_time <= dead_time ) : - start_time=datetime.datetime.now()+ datetime.timedelta(minutes=2) - time.sleep(secondes) - else: bool=False - except OSError ,e : - bool=False - str(e) - if (bool): - print "Node correctly instaled and booted " - else : - print "Node not fully booted "##cheek if configuration file already exist - ret_value=False - test_name='\nTest Installation Node Hosted: ',l['hostname'] - self.test_plc.affiche_results(test_name, 'Failure', '')##printing out the result - - end=time.strftime("%H:%M:%S", time.localtime()) - print "time at the end is :",end ##converting time to secondes - return ret_value - except Exception, e: - print str(e) - print "vmware killed if problems occur " - time.sleep(10) - self.kill_all_vmwares() - sys.exit(1) - - def kill_all_vmwares(self): - os.system('pgrep vmware | xargs -r kill') - os.system('pgrep vmplayer | xargs -r kill ') - os.system('pgrep vmware | xargs -r kill -9') - os.system('pgrep vmplayer | xargs -r kill -9') + def locate_user (self, username): + for user in self.site_spec['users']: + if user['name'] == username: + return user + if user['user_fields']['email'] == username: + return user + raise Exception,"Cannot locate user {}".format(username) - def run_vmware(self,liste_nodes,display): - path=os.path.dirname(sys.argv[0]) - print "* Killing any running vmware or vmplayer instance" - self.kill_all_vmwares() - print "* Displaying vmplayer on DISPLAY=",display - for l in liste_nodes : - print "* Starting vmplayer for node %s -- see vmplayer.log",l['hostname'] - os.system('set -x; cd %s/VirtualFile-%s ; DISPLAY=%s vmplayer My_Virtual_Machine.vmx < /dev/null 2>&1 >> vmplayer.log &'%(path,l['hostname'],display)) - - def delete_known_hosts(self): - try: - file1=open('/root/.ssh/known_hosts','r') - file2=open('/root/.ssh/known_hosts_temp','w') - while 1: - txt = file1.readline() - if txt=='': - file1.close() - file2.close() - break - if txt[0:4]!='test' : - file2.write(txt) - - - os.system('mv -f /root/.ssh/known_hosts_temp /root/.ssh/known_hosts') - except Exception, e: - print str(e) - - def slice_access(self,liste_nodes): - try: - bool=True - bool1=True - secondes=15 - self.delete_known_hosts() - start_time = datetime.datetime.now() - dead_time=start_time + datetime.timedelta(minutes=3)##adding 3minutes - for slice in slices_specs: - for slicenode in slice['slice_nodes']: - timset=time.strftime("%H:%M:%S", time.localtime()) - while(bool): - print '=========>Try to Restart the Node Manager on %s at %s:'%(slicenode['hostname'],str(timset)) - access=os.system('set -x; ssh -i /etc/planetlab/root_ssh_key.rsa root@%s service nm restart'%slicenode['hostname'] ) - if (access==0): - print '=========>Node Manager Restarted on %s at %s:'%(slicenode['hostname'] ,str(timset)) - while(bool1): - print '=========>Try to connect to the %s@%s at %s '%(slice['slice_spec']['name'],slicenode['hostname'],str(time.strftime("%H:%M:%S", time.localtime()))) - Date=os.system('set -x; ssh -i ~/.ssh/slices.rsa %s@%s echo "The Actual Time here is;" date'%(slice['slice_spec']['name'],slicenode['hostname'])) - if (Date==0): - break - elif ( start_time <= dead_time ) : - start_time=datetime.datetime.now()+ datetime.timedelta(seconds=30) - time.sleep(secondes) - else: - bool1=False - if(bool1): - print '=========>connected to the '+slice['slice_spec']['name']+'@'+slicenode['hostname'] +'--->' - else: - print '=========>access to one slice is denied but last chance' - print '=========>Retry to Restart the Node Manager on %s at %s:'%(slicenode['hostname'],str(timset)) - access=os.system('set -x; ssh -i /etc/planetlab/root_ssh_key.rsa root@%s service nm restart'%slicenode['hostname'] ) - if (access==0): - print '=========>Retry to connect to the %s@%s at %s '%(slice['slice_spec']['name'],slicenode['hostname'],str(time.strftime("%H:%M:%S", time.localtime()))) - Date=os.system('set -x; ssh -i ~/.ssh/slices.rsa %s@%s echo "The Actual Time here is;" date'%(slice['slice_spec']['name'],slicenode['hostname'] )) - if (Date==0): - print '=========>connected to the '+slice['slice_spec']['name']+'@'+slicenode['hostname']+'--->' - else: - print '=========>the Access is finaly denied' - sys.exit(1) - else :"=========>Last try failed" - break - elif ( start_time <= dead_time ) : - start_time=datetime.datetime.now()+ datetime.timedelta(minutes=1) - time.sleep(secondes) - else: - bool=False - - if (not bool): - print 'Node manager problems' - sys.exit(1) - - except Exception, e: - print str(e) - sys.exit(1) - + def locate_node (self, nodename): + for node in self.site_spec['nodes']: + if node['name'] == nodename: + return node + raise Exception,"Cannot locate node {}".format(nodename) + + +