-import os
-import sys
+# Thierry Parmentelat <thierry.parmentelat@inria.fr>
+# 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 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.display_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.display_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 "
- ret_value=False
- test_name='\nTest Installation Node Hosted: ',l['hostname']
- self.test_plc.display_results(test_name, 'Failure', '')
-
- 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 %s"%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 %s"%nodename
+
+
+