Merge branch 'master' into senslab2
[sfa.git] / sfa / senslab / tests / TestSuite.py
1 ###########################################################################
2 #    Copyright (C) 2012 by                                       
3 #    <savakian@sfa2.grenoble.senslab.info>                                                             
4 #
5 # Copyright: See COPYING file that comes with this distribution
6 #
7 ###########################################################################
8 #LDAP import 
9 from sfa.senslab.LDAPapi import *
10 import ldap.modlist as modlist
11 import ldap as L
12
13 #logger sfa
14 from sfa.util.sfalogging import logger
15
16 #OAR imports
17 from datetime import datetime
18 from dateutil import tz 
19 from time import strftime,gmtime
20 from sfa.senslab.OARrestapi import OARrestapi
21
22 #Test slabdriver
23 from sfa.senslab.slabdriver import SlabDriver
24 from sfa.util.config import Config
25
26 import sys
27
28
29         
30 def parse_options():
31     
32     #arguments supplied
33     if len(sys.argv) > 1 :
34         options_list = sys.argv[1:]
35         #For each valid option, execute the associated function
36         #(defined in the dictionnary supported_options)
37         job_id = 1
38         valid_options_dict = {}
39         value_list = []
40         #Passing options to the script should be done like this :
41         #-10 OAR -2 SlabDriver
42         for option in options_list:
43             if option in supported_options:
44                 #update the values used for the fonctions associated 
45                 #with the options
46                 
47                 valid_options_dict[option] = value_list
48                 #empty the values list for next option
49                 value_list = []
50                 print valid_options_dict
51             else:
52                 if option[0] == '-':
53                     value_list.append(option[1:])
54                     print "value_list",value_list
55
56
57     return valid_options_dict     
58     
59 def TestLdap(job_id = None):
60     logger.setLevelDebug()
61
62     ldap = LDAPapi()
63     ret = ldap.conn.connect(bind=True)
64     ldap.conn.close() 
65     print "TEST ldap.conn.connect(bind=True)" , ret
66     
67     ret = ldap.conn.connect(bind=False)
68     ldap.conn.close()
69     print "TEST ldap.conn.connect(bind=False)", ret
70
71
72     ret = ldap.LdapSearch()
73     print "TEST ldap.LdapSearch ALL",ret
74     
75     ret = ldap.LdapSearch('(uid=avakian)', [])
76     print "\r\n TEST ldap.LdapSearch ids = avakian",ret
77
78
79     password = ldap.generate_password()
80     print "\r\n TEST generate_password ",password 
81     
82     maxi = ldap.find_max_uidNumber()
83     print "\r\n TEST find_max_uidNumber " , maxi
84
85     data = {}
86     data['last_name'] = "Drake"
87     data['first_name']="Tim"
88     data['givenName']= data['first_name']
89     data['mail'] = "robin@arkham.fr"
90     
91     record={}
92     record['hrn'] = 'senslab2.drake'
93     record['last_name'] = "Drake"
94     record['first_name']="Tim"
95     record['mail'] = "robin@arkham.fr"
96     
97     
98     
99     #login = ldap.generate_login(data)
100     #print "\r\n Robin \tgenerate_login  ", ret 
101     
102     #ret = ldap.LdapAddUser(data)
103     #print "\r\n Robin  \tLdapAddUser ", ret 
104
105     #req_ldap = '(uid=' + login + ')'
106     #ret = ldap.LdapSearch(req_ldap, [])
107     #print "\r\n Robin \tldap.LdapSearch ids = %s %s"%(login,ret )
108     
109     #password = "Thridrobin"
110     #enc = ldap.encrypt_password(password)
111     #print "\r\n Robin \tencrypt_password ", enc
112     
113     #ret = ldap.LdapModifyUser(record, {'userPassword':enc})
114     #print "\r\n Robin \tChange password LdapModifyUser ", ret 
115     
116     #dn = 'uid=' + login + ',' + ldap.baseDN
117     #ret = ldap.LdapDelete(dn)
118     #print "\r\n Robin  \tLdapDelete ", ret 
119     
120     datanight = {}
121     datanight['last_name'] = "Grayson"
122     datanight['first_name']="Dick"
123     datanight['givenName']= datanight['first_name']
124     datanight['mail'] = "nightwing@arkham.fr"
125     
126     
127     record_night = {}
128     record_night['hrn'] = 'senslab2.grayson'
129     record_night['last_name'] = datanight['last_name']
130     record_night['first_name'] = datanight['first_name']
131     record_night['mail'] = datanight['mail']
132     
133     ret = ldap.LdapFindUser(record_night)
134     print "\r\n Nightwing \tldap.LdapFindHrn %s : %s"%(record_night,ret)
135     
136     ret = ldap.LdapSearch('(uid=grayson)', [])
137     print "\r\n Nightwing \tldap.LdapSearch ids = %s %s"%('grayson',ret )
138
139     ret = ldap.LdapAddUser(datanight)
140     print "\r\n Nightwing \tLdapAddUser ", ret 
141     
142     ret = ldap.LdapResetPassword(record_night)
143     print "\r\n Nightwing  \tLdapResetPassword de %s : %s "%(record_night,ret)
144     
145     ret = ldap.LdapDeleteUser(record_night)
146     print "\r\n Nightwing   \tLdapDeleteUser ", ret 
147     
148     
149     record_avakian = {}
150     record_avakian['hrn']= 'senslab2.avakian'
151     record_avakian['last_name'] = 'avakian'
152     record_avakian['first_name'] = 'sandrine'
153     record_avakian['mail'] = 'sandrine.avakian@inria.fr'
154     pubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwSUkJ+cr3xM47h8lFkIXJoJhg4wHakTaLJmgTXkzvUmQsQeFB2MjUZ6WAelMXj/EFz2+XkK+bcWNXwfbrLptJQ+XwGpPZlu9YV/kzO63ghVrAyEg0+p7Pn1TO9f1ZYg4R6JfP/3qwH1AsE+X3PNpIewsuEIKwd2wUCJDf5RXJTpl39GizcBFemrRqgs0bdqAN/vUT9YvtWn8fCYR5EfJHVXOK8P1KmnbuGZpk7ryz21pDMlgw13+8aYB+LPkxdv5zG54A5c6o9N3zOCblvRFWaNBqathS8y04cOYWPmyu+Q0Xccwi7vM3Ktm8RoJw+raQNwsmneJOm6KXKnjoOQeiQ== savakian@sfa2.grenoble.senslab.info"
155     ret = ldap.LdapModifyUser(record_avakian, {'sshPublicKey':pubkey})
156     print "\r\n Sandrine \tChange pubkey LdapModifyUser ", ret 
157     
158     #record_myslice = {}
159     #record_myslice['hrn']= 'senslab2.myslice'
160     #record_myslice['last_name'] = 'myslice'
161     #record_myslice['first_name'] = 'myslice'
162     #record_myslice['mail'] = 'nturro@inria.fr'
163     #pubkeymyslice = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuyRPwn8PZxjdhu+ciRuPyM0eVBn7XS7i3tym9F30UVhaCd09a/UEmGn7WJZdfsxV3hXqG1Wc766FEst97NuzHzELSuvy/rT96J0UHG4wae4pnzOLd6NwFdZh7pkPsgHMHxK9ALVE68Puu+EDSOB5bBZ9Q624wCIGxEpmuS/+X+dDBTKgG5Hi0WA1uKJwhLSbbXb38auh4FlYgXPsdpljTIJatt+zGL0Zsy6fdrsVRc5W8kr3/SmE4OMNyabKBNyxioSEuYhRSjoQAHnYoevEjZniP8IzscKK7qwelzGUfnJEzexikhsQamhAFti2ReiFfoHBRZxnSc49ioH7Kaci5w== root@rhoecos3.ipv6.lip6.fr"
164     
165     #pubkeytestuser = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYS8tzufciTm6GdNUGHQc64OfTxFebMYUwh/Jl04IPTvjjr26uakbM0M2v33HxZ5Q7PnmPN9pB/w+a+f7a7J4cNs/tApOMg2hb6UrLaOrdnDMOs4KZlfElyDsF3Zx5QwxPYvzsKADAbDVoX4NF9PttuDLdm2l3nLSvm89jfla00GBg+K8grdOCHyYZVX/Wt7kxhXDK3AidQhKJgn+iD5GxvtWMBE+7S5kJGdRW1W10lSLBW3+VNsCrKJB2s8L55Xz/l2HNBScU7T0VcMQJrFxEXKzLPagZsMz0lfLzHESoGHIZ3Tz85DfECbTtMxLts/4KoAEc3EE+PYr2VDeAggDx testuser@myslice"
166     
167
168     
169     #password = "ReptileFight"
170     #enc = ldap.encrypt_password(password)
171     #print "\r\n sandrine \tencrypt_password ", enc
172     
173     #ret = ldap.LdapModifyUser(record_avakian, {'userPassword':enc})
174     #print "\r\n sandrine \tChange password LdapModifyUser ", ret 
175     return
176
177
178 def get_stuff(oar, uri):
179     import httplib
180     import json    
181     headers = {}
182     data = json.dumps({})   
183   
184     headers['X-REMOTE_IDENT'] = 'avakian' 
185       
186     headers['content-length'] = '0' #seems that it does not work if we don't add this
187             
188
189     conn = httplib.HTTPConnection(oar.oarserver['ip'],oar.oarserver['port'])
190     conn.request("GET",uri,data , headers )
191     resp = ( conn.getresponse()).read()
192             #logger.debug("OARrestapi: \t  GETRequestToOARRestAPI  resp %s" %( resp))
193     conn.close()
194       
195
196     js = json.loads(resp)
197     return js
198             
199
200
201   
202 def TestOAR(job_id = '1'):
203     
204     if isinstance(job_id,list) and len(job_id) == 1:
205        job_id = job_id[0]
206         
207     oar = OARrestapi()
208     jobs = oar.parser.SendRequest("GET_reserved_nodes", username = 'avakian') 
209     print "\r\n OAR GET_reserved_nodes ",jobs
210     
211    
212     
213     jobs = oar.parser.SendRequest("GET_jobs") 
214     print "\r\n OAR GET_jobs ",jobs
215     
216  
217     jobs = oar.parser.SendRequest("GET_jobs_id", job_id, 'avakian')
218     print "\r\n OAR  GET_jobs_id ",jobs
219     
220     uri = '/oarapi/jobs/details.json?state=Running,Waiting,Launching&user=avakian'      
221     raw_json = get_stuff(oar,uri)
222     print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
223     
224     uri = '/oarapi/jobs/' + job_id +'.json'
225     raw_json = get_stuff(oar,uri)  
226     print "\r\n OAR  ",uri,raw_json, "\r\n KKK \t",raw_json.keys()
227     
228     uri = '/oarapi/jobs/' + job_id + '/resources.json'
229     raw_json = get_stuff(oar,uri)
230     print "\r\n OAR  ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
231     
232     time_format = "%Y-%m-%d %H:%M:%S"
233    
234     server_timestamp,server_tz = oar.parser.SendRequest("GET_timezone")
235     
236     print "\r\n OAR  GetTimezone ",server_timestamp, server_tz
237     print(datetime.fromtimestamp(int(server_timestamp)).strftime('%Y-%m-%d %H:%M:%S'))
238
239     uri = '/oarapi/resources/full.json'
240     raw_json = get_stuff(oar,uri)
241     print "\r\n OAR  ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
242     
243     uri = '/oarapi/jobs.json?user=avakian'      
244     raw_json = get_stuff(oar,uri)
245     print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
246     return
247     
248 def TestSlabDriver(job_id = '1'):
249     if isinstance(job_id,list) and len(job_id) == 1:
250        job_id = job_id[0]
251     slabdriver = SlabDriver(Config())
252     nodes = slabdriver.GetReservedNodes(username='avakian')
253     print "\r\n \r\n" ,nodes
254     
255     l = slabdriver.GetSlices(slice_filter = '29', slice_filter_type = 'record_id_user')
256     
257     
258     print "\r\n \r\nGetSlices" ,l
259     
260     persons = slabdriver.GetPersons()
261     print "\r\n \r\n  GetPersons" ,persons
262     #slabdriver.DeleteJobs(job_id,'senslab2.avakian_slice')
263   
264   
265 def  TestSfi(arg = None):
266     import os
267     print " =================    SFI.PY RESOURCES            ============="
268     listing = os.system("sfi.py list senslab2")
269     
270     print 
271     resources = os.system("sfi.py resources")
272
273     print
274     slab = os.system("sfi.py resources -r slab")
275
276     print
277     resourcesall = os.system("sfi.py resources -l all")
278     
279     
280     print "================= SFI.PY RESOURCES -R SLAB -L ALL ============="
281     slaball = os.system("sfi.py resources -r slab -l all")
282     filename = "/home/savakian/flab-sfa/avakian_adv.rspec"
283     rspecfile = open(filename,"w")
284     r = os.popen("sfi.py resources -l all") 
285     for i in r.readlines():
286         rspecfile.write(i)
287     rspecfile.close()
288     
289     print " =================    SFI.PY SHOW SLICE   ============="
290     slices_rec = os.system("sfi.py resources senslab2.avakian_slice")
291     
292     print  " =================    SFI.PY SHOW USER   ============="
293     show_slice = os.system("sfi.py show senslab2.avakian_slice")
294
295     print " =================    SFI.PY SHOW NODE   ============="
296     show = os.system("sfi.py show senslab2.avakian")
297
298     print " =================    SFI.PY SLICES       ============="
299     show_node  = os.system("sfi.py show senslab2.node7.grenoble.senslab.info")
300
301     print " =================    SFI.PY LIST SLICE   ============="
302     slices = os.system("sfi.py slices")
303
304     print " =================    SFI.PY STATUS SLICE   ============="
305     status_slice = os.system("sfi.py status senslab2.avakian_slice")
306
307     print " =================    SFI.PY CREATE SLICE   ============="
308     create = os.system("sfi.py create senslab2.avakian_slice /home/savakian/flab-sfa/avakian_adv.rspec")
309       
310       
311 def RunAll():
312     TestLdap()
313     TestOAR()
314     
315    
316 supported_options = {
317         'OAR' : TestOAR,
318         'LDAP': TestLdap,
319         'driver': TestSlabDriver,
320         'sfi':TestSfi,
321         'all' : RunAll }
322         
323 def main():
324     opts = parse_options()
325     print opts
326     for opt in opts:
327         supported_options[opt](opts[opt])
328
329     
330 if __name__ == "__main__":
331     main()