saves vmplayer stdout and stderr in vmplayer.log
[tests.git] / system / TestSite.py
1 import os
2 import sys
3 import datetime
4 import time
5 from TestConfig import *
6 import xmlrpclib
7
8 class TestSite:
9
10     def __init__ (self,test_plc,site_spec):
11         self.test_plc=test_plc
12         self.site_spec=site_spec
13         self.timset=time.strftime("%H:%M:%S", time.localtime())
14         
15     def create_site (self):
16         try:
17             print self.test_plc.auth_root()
18             self.site_id = self.test_plc.server.AddSite(self.test_plc.auth_root(),
19                                                         self.site_spec['site_fields'])
20             self.test_plc.server.AddSiteAddress(self.test_plc.auth_root(),self.site_id,
21                                        self.site_spec['site_address'])
22             
23             return self.site_id
24         except Exception, e:
25             print str(e)
26             
27     def site_id(self):
28         return self.site_id()
29
30     def create_user (self, user_spec):
31         try:
32             i=0
33             print '========>Adding user at '+self.timset+ ': ',user_spec
34             self.person_id=self.test_plc.server.AddPerson(self.test_plc.auth_root(),
35                                                           user_spec)
36             self.test_plc.server.UpdatePerson(self.test_plc.auth_root(),
37                                               self.person_id,{'enabled': True})
38             for role in user_spec['roles']:
39                 self.test_plc.server.AddRoleToPerson(self.test_plc.auth_root(),
40                                                      role,user_spec['email'])
41             self.test_plc.server.AddPersonToSite(self.test_plc.auth_root(),
42                                                  user_spec['email'],
43                                                  self.site_spec['site_fields']['login_base'])
44         except Exception,e:
45             print str(e)
46             
47     def enable_user (self, user_spec):
48         try:
49             persones=self.test_plc.server.GetPersons(self.test_plc.auth_root())
50             for person in persones:
51                 if (person['enabled']!="True"):
52                     self.test_plc.server.UpdatePerson(self.test_plc.auth_root(),
53                                                       person['person_id'],
54                                                       {'enabled': True})
55         except Exception,e:
56             print str(e)
57             
58     def add_key_user(self,user_spec):
59         try:
60             auth=""
61             for userspec in self.site_spec['users']:
62                 if(user_spec == userspec):
63                     for role in userspec['roles']:
64                         auth=auth+role
65                     print auth
66                     self.test_plc.server.AddPersonKey(self.anyuser_auth(auth),
67                                                       user_spec['email'], key)
68         except Exception, e:
69             print str(e)
70             
71     def anyuser_auth (self,key):
72         for person in self.site_spec['users']:
73             if person['auth_meth']== key :
74                 return {'Username':person['email'],
75                         'AuthMethod':'password',
76                         'AuthString':person['password'],
77                         'Role':person['roles'][0],
78                         }
79
80     def node_check_status(self,liste_nodes,bool):
81         try:
82             ret_value=True    
83             filter=['boot_state']
84             bt={'boot_state':'boot'}
85             dbg={'boot_state':'dbg'}
86             secondes=15
87             start_time = datetime.datetime.now() ##geting the current time
88             dead_time=datetime.datetime.now()+ datetime.timedelta(minutes=10)##adding 10minutes
89             start=time.strftime("%H:%M:%S", time.localtime())
90             print "time in the begining  is :",start
91             
92             for l in liste_nodes :
93                 while (bool):
94                     node_status=self.test_plc.server.GetNodes(self.test_plc.auth_root(),
95                                                               l['hostname'], filter)
96                     timset=time.strftime("%H:%M:%S", time.localtime())
97                     print 'the actual status for the node '+l['hostname']+' at '+str(timset)+' is :',node_status
98                     try:
99                         if (node_status[0] == bt):
100                             test_name='\nTest Installation Node hosted: '+l['hostname']
101                             self.test_plc.affiche_results(test_name, 'Successful', '')##printing out the result
102                             break ##for exsiting and renaming virtual file to just installed
103                         elif (node_status[0] ==dbg):
104                             test_name='\nTest Installation Node hosted: '+l['hostname']
105                             self.test_plc.affiche_results(test_name, 'En Debug', '')##printing out the result
106                             bool=False
107                             break ##for exsiting and renaming virtual file to just installed
108                         elif ( start_time  <= dead_time ) :
109                             start_time=datetime.datetime.now()+ datetime.timedelta(minutes=2)
110                             time.sleep(secondes)
111                         else: bool=False
112                     except OSError ,e :
113                         bool=False
114                         str(e)
115                 if (bool):
116                     print "Node correctly instaled and booted "
117                 else :
118                     print "Node not fully booted "##cheek if configuration file already exist
119                     ret_value=False
120                     test_name='\nTest Installation Node Hosted: ',l['hostname']
121                     self.test_plc.affiche_results(test_name, 'Failure', '')##printing out the result
122             
123             end=time.strftime("%H:%M:%S", time.localtime())
124             print "time at the end is :",end  ##converting time to secondes
125             return ret_value
126         except Exception, e:
127             print str(e)
128             print "vmware killed if problems occur  "
129             time.sleep(10)
130             self.kill_all_vmwares()
131             sys.exit(1)
132             
133     def kill_all_vmwares(self):
134         os.system('pgrep vmware | xargs -r kill')
135         os.system('pgrep vmplayer | xargs -r kill ')
136         os.system('pgrep vmware | xargs -r kill -9')
137         os.system('pgrep vmplayer | xargs -r kill -9')
138         
139     def run_vmware(self,liste_nodes,display):
140         path=os.path.dirname(sys.argv[0])
141         print "* Killing any running vmware or vmplayer instance"
142         self.kill_all_vmwares()
143         print "* Displaying vmplayer on DISPLAY=",display
144         for l in liste_nodes :
145             print "* Starting vmplayer for node %s -- see vmplayer.log",l['hostname']
146             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))
147
148     def delete_known_hosts(self):
149         try:
150             file1=open('/root/.ssh/known_hosts','r')
151             file2=open('/root/.ssh/known_hosts_temp','w')
152             while 1:
153                 txt = file1.readline()
154                 if txt=='':
155                     file1.close()
156                     file2.close()
157                     break
158                 if txt[0:4]!='test' :
159                     file2.write(txt)
160             
161                 
162             os.system('mv -f /root/.ssh/known_hosts_temp  /root/.ssh/known_hosts')
163         except Exception, e:
164             print str(e)
165
166     def slice_access(self,liste_nodes):
167         try:
168             bool=True
169             bool1=True
170             secondes=15
171             self.delete_known_hosts()
172             start_time = datetime.datetime.now()
173             dead_time=start_time + datetime.timedelta(minutes=3)##adding 3minutes
174             for slice in slices_specs:
175                 for slicenode in slice['slice_nodes']:
176                     timset=time.strftime("%H:%M:%S", time.localtime())
177                     while(bool):
178                         print '=========>Try to Restart the Node Manager on %s at %s:'%(slicenode['hostname'],str(timset))
179                         access=os.system('set -x; ssh -i /etc/planetlab/root_ssh_key.rsa  root@%s service nm restart'%slicenode['hostname'] )
180                         if (access==0):
181                             print '=========>Node Manager Restarted on %s at %s:'%(slicenode['hostname'] ,str(timset))
182                             while(bool1):
183                                 print '=========>Try to connect to the %s@%s at %s '%(slice['slice_spec']['name'],slicenode['hostname'],str(time.strftime("%H:%M:%S", time.localtime())))
184                                 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']))
185                                 if (Date==0):
186                                     break
187                                 elif ( start_time  <= dead_time ) :
188                                     start_time=datetime.datetime.now()+ datetime.timedelta(seconds=30)
189                                     time.sleep(secondes)
190                                 else:
191                                     bool1=False
192                             if(bool1):
193                                 print '=========>connected to the '+slice['slice_spec']['name']+'@'+slicenode['hostname'] +'--->'
194                             else:
195                                 print '=========>access to one slice is denied but last chance'
196                                 print '=========>Retry to Restart the Node Manager on %s at %s:'%(slicenode['hostname'],str(timset))
197                                 access=os.system('set -x; ssh -i /etc/planetlab/root_ssh_key.rsa  root@%s service nm restart'%slicenode['hostname'] )
198                                 if (access==0):
199                                     print '=========>Retry to connect to the %s@%s at %s '%(slice['slice_spec']['name'],slicenode['hostname'],str(time.strftime("%H:%M:%S", time.localtime())))
200                                     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'] ))
201                                     if (Date==0):
202                                         print '=========>connected to the '+slice['slice_spec']['name']+'@'+slicenode['hostname']+'--->'
203                                     else:
204                                         print '=========>the Access is finaly denied'
205                                         sys.exit(1)
206                                 else :"=========>Last try failed"
207                             break
208                         elif ( start_time  <= dead_time ) :
209                             start_time=datetime.datetime.now()+ datetime.timedelta(minutes=1)
210                             time.sleep(secondes)
211                         else:
212                             bool=False
213                                 
214                     if (not bool):
215                         print 'Node manager problems'
216                         sys.exit(1)
217                     
218         except Exception, e:
219             print str(e)
220             sys.exit(1)
221