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