1 ###########################################################################
2 # Copyright (C) 2012 by
3 # <savakian@sfa2.grenoble.iotlab.info>
5 # Copyright: See COPYING file that comes with this distribution
7 ###########################################################################
9 from sfa.iotlab.LDAPapi import LDAPapi
10 import ldap.modlist as modlist
13 from sfa.util.sfalogging import logger
16 from datetime import datetime
17 from sfa.util.sfatime import SFATIME_FORMAT
18 from sfa.iotlab.OARrestapi import OARrestapi
21 from sfa.iotlab.iotlabdriver import IotlabDriver
22 from sfa.iotlab.iotlabshell import IotlabShell
23 from sfa.util.config import Config
25 from sfa.generic import Generic
30 def message_and_wait(message):
32 raw_input("Press Enter to continue...")
37 if len(sys.argv) > 1 :
38 options_list = sys.argv[1:]
39 #For each valid option, execute the associated function
40 #(defined in the dictionnary supported_options)
42 valid_options_dict = {}
44 #Passing options to the script should be done like this :
45 #-10 OAR -2 IotlabDriver
46 for option in options_list:
47 if option in supported_options:
48 #update the values used for the fonctions associated
51 valid_options_dict[option] = value_list
52 #empty the values list for next option
54 print valid_options_dict
57 value_list.append(option[1:])
58 print "value_list", value_list
61 return valid_options_dict
63 def TestLdap(uid = None):
64 logger.setLevelDebug()
66 ldap_server = LDAPapi()
67 ret = ldap_server.conn.connect(bind=True)
68 ldap_server.conn.close()
69 print "TEST ldap_server.conn.connect(bind=True)" , ret
71 ret = ldap_server.conn.connect(bind=False)
72 ldap_server.conn.close()
73 print "TEST ldap_server.conn.connect(bind=False)", ret
75 message_and_wait("\r\n \tLdapSeach : Get all users")
76 ret = ldap_server.LdapSearch()
79 message_and_wait("\r\n \tLdapSeach : Get user with uid avakian")
80 ret = ldap_server.LdapSearch('(uid=avakian)', [])
83 message_and_wait("\r\n generate ...")
84 password = ldap_server.login_pwd.generate_password()
85 print "\r\n TEST generate_password ", password
88 data['last_name'] = "Drake"
89 data['first_name'] = "Tim"
90 data['givenName'] = data['first_name']
91 data['mail'] = "robin@arkham.fr"
94 record['hrn'] = 'iotlab.drake'
95 record['last_name'] = "Drake"
96 record['first_name'] = "Tim"
97 record['mail'] = "robin@arkham.fr"
99 login = ldap_server.LdapGenerateUniqueLogin(data)
100 print "\r\n Robin \tgenerate_login ", login
102 message_and_wait("\r\n find_max_uidNumber")
103 maxi = ldap_server.find_max_uidNumber()
108 ret = ldap_server.LdapAddUser(data)
109 print "\r\n Robin \tLdapAddUser ", ret
111 req_ldap = '(uid=' + login + ')'
112 ret = ldap_server.LdapSearch(req_ldap, [])
113 print "\r\n Robin \tldap_server.LdapSearch ids = %s %s" % (login, ret)
115 message_and_wait("Password methods")
116 password = "Thridrobin"
117 enc = ldap_server.login_pwd.encrypt_password(password)
118 print "\r\n Robin \tencrypt_password ", enc
120 ret = ldap_server.LdapModifyUser(record, {'userPassword':enc})
121 print "\r\n Robin \tChange password LdapModifyUser ", ret
126 datanight['last_name'] = "Grayson"
127 datanight['first_name'] = "Dick"
128 datanight['givenName'] = datanight['first_name']
129 datanight['mail'] = "nightwing@arkham.fr"
133 record_night['hrn'] = 'iotlab.grayson'
134 record_night['last_name'] = datanight['last_name']
135 record_night['first_name'] = datanight['first_name']
136 record_night['mail'] = datanight['mail']
138 message_and_wait("\r\n LdapFindUser")
139 ret = ldap_server.LdapFindUser(record_night)
140 print "\r\n Nightwing \tldap_server.LdapFindUser %s : %s" % (record_night,
143 #ret = ldap_server.LdapSearch('(uid=grayson)', [])
144 #print "\r\n Nightwing \tldap_server.LdapSearch ids = %s %s" %('grayson',ret )
145 message_and_wait("Add user then delete user")
146 ret = ldap_server.LdapAddUser(datanight)
147 print "\r\n Nightwing \tLdapAddUser ", ret
149 #ret = ldap_server.LdapResetPassword(record_night)
150 #print "\r\n Nightwing \tLdapResetPassword de %s : %s" % (record_night, ret)
152 ret = ldap_server.LdapDeleteUser(record_night)
153 print "\r\n Nightwing \tLdapDeleteUser ", ret
157 #record_myslice['hrn']= 'iotlab.myslice'
158 #record_myslice['last_name'] = 'myslice'
159 #record_myslice['first_name'] = 'myslice'
160 #record_myslice['mail'] = 'nturro@inria.fr'
161 #pubkeymyslice = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuyRPwn8PZxjdhu+ciRuPyM0eVBn7XS7i3tym9F30UVhaCd09a/UEmGn7WJZdfsxV3hXqG1Wc766FEst97NuzHzELSuvy/rT96J0UHG4wae4pnzOLd6NwFdZh7pkPsgHMHxK9ALVE68Puu+EDSOB5bBZ9Q624wCIGxEpmuS/+X+dDBTKgG5Hi0WA1uKJwhLSbbXb38auh4FlYgXPsdpljTIJatt+zGL0Zsy6fdrsVRc5W8kr3/SmE4OMNyabKBNyxioSEuYhRSjoQAHnYoevEjZniP8IzscKK7qwelzGUfnJEzexikhsQamhAFti2ReiFfoHBRZxnSc49ioH7Kaci5w== root@rhoecos3.ipv6.lip6.fr"
163 #pubkeytestuser = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYS8tzufciTm6GdNUGHQc64OfTxFebMYUwh/Jl04IPTvjjr26uakbM0M2v33HxZ5Q7PnmPN9pB/w+a+f7a7J4cNs/tApOMg2hb6UrLaOrdnDMOs4KZlfElyDsF3Zx5QwxPYvzsKADAbDVoX4NF9PttuDLdm2l3nLSvm89jfla00GBg+K8grdOCHyYZVX/Wt7kxhXDK3AidQhKJgn+iD5GxvtWMBE+7S5kJGdRW1W10lSLBW3+VNsCrKJB2s8L55Xz/l2HNBScU7T0VcMQJrFxEXKzLPagZsMz0lfLzHESoGHIZ3Tz85DfECbTtMxLts/4KoAEc3EE+PYr2VDeAggDx testuser@myslice"
171 def get_stuff(oar, uri):
175 data = json.dumps({})
177 headers['X-REMOTE_IDENT'] = 'avakian'
178 headers['content-length'] = '0' #seems that it does not work if we don't add this
181 conn = httplib.HTTPConnection(oar.oarserver['ip'], oar.oarserver['port'])
182 conn.request("GET", uri, data , headers )
183 resp = (conn.getresponse()).read()
188 js = json.loads(resp)
192 def TestOAR(job_id = None):
193 print "JOB_ID", job_id
194 if isinstance(job_id, list) :
201 print "JOB_ID", job_id
203 print "============USING OAR CLASS PARSING METHODS ================"
205 message_and_wait("\r\nGET_reserved_nodes")
206 nodes = oar.parser.SendRequest("GET_reserved_nodes", username = 'avakian')
207 print "\r\n OAR GET_reserved_nodes ", nodes
209 message_and_wait("GET_jobs")
210 jobs = oar.parser.SendRequest("GET_jobs")
211 print "\r\n OAR GET_jobs ", jobs
213 message_and_wait( "\r\n GET_jobs_id")
214 jobs = oar.parser.SendRequest("GET_jobs_id", job_id, 'avakian')
215 print "\r\n OAR GET_jobs_id ", jobs
217 # Check that the OAR requests are valid
219 print "============RAW JSON FROM OAR ================"
220 message_and_wait("\r\n Get all the jobs in the state Running,Waiting, \
221 Launching of the user ")
222 uri = '/oarapi/jobs/details.json?state=Running,Waiting,Launching&user=avakian'
223 raw_json = get_stuff(oar, uri)
224 print "\r\n OAR uri %s \r\n \t raw_json %s \r\n raw_json_keys %s " %(uri,
225 raw_json, raw_json.keys())
228 message_and_wait("\r\nGet information on the job identified by its job_id")
229 uri = '/oarapi/jobs/' + job_id +'.json'
230 raw_json = get_stuff(oar, uri)
231 print "\r\n OAR uri %s \r\n \t raw_json %s \r\n raw_json_keys %s " %(uri,
232 raw_json, raw_json.keys())
235 message_and_wait(" \r\nGet all the job's resources, \
236 job defined by its job id %s"%(job_id))
237 uri = '/oarapi/jobs/' + job_id + '/resources.json'
238 raw_json = get_stuff(oar, uri)
239 print "\r\n OAR uri %s \r\n \t raw_json %s \r\n raw_json_keys %s " %(uri,
240 raw_json, raw_json.keys())
243 message_and_wait("\r\n Get server's date and timezone")
244 server_timestamp, server_tz = oar.parser.SendRequest("GET_timezone")
245 print "\r\n OAR GetTimezone ", server_timestamp, server_tz
246 print(datetime.fromtimestamp(int(server_timestamp)).strftime(SFATIME_FORMAT))
248 message_and_wait("\r\n Get all the resources with details from OAR")
249 uri = '/oarapi/resources/full.json'
250 raw_json = get_stuff(oar, uri)
251 print "\r\n OAR uri %s \r\n \t raw_json %s \r\n raw_json_keys %s " %(uri,
252 raw_json, raw_json.keys())
254 message_and_wait("\r\n Get all the jobs scheduled by the user")
255 uri = '/oarapi/jobs.json?user=avakian'
256 raw_json = get_stuff(oar, uri)
257 print "\r\n OAR uri %s \r\n \t raw_json %s \r\n raw_json_keys %s " %(uri,
258 raw_json, raw_json.keys())
264 def TestIotlabshell(param = None):
267 shell = IotlabShell(config)
269 message_and_wait("\r\n \r\n GetReservedNodes")
270 nodes = shell.GetReservedNodes()
273 message_and_wait("\r\n GetPersons")
274 persons = shell.GetPersons()
275 print "\r\n \r\n GetPersons", persons
278 message_and_wait("\r\n GetLeases for the login avakian")
279 leases = shell.GetLeases(login='avakian')
282 message_and_wait("\r\n GetLeases for slice iotlab.avakian_slice")
283 leases = shell.GetLeases(lease_filter_dict=
284 {'slice_hrn':'iotlab.avakian_slice'})
287 message_and_wait("\r\n GetLeases t_from 1405070000 ")
288 leases = shell.GetLeases(lease_filter_dict={'t_from':1405070000})
291 def TestIotlabDriver(job_id = None):
295 if isinstance(job_id, list) and len(job_id) == 1:
298 api = Generic.the_flavour().make_api(interface='registry')
299 iotlabdriver = IotlabDriver(api)
301 # Iotlabdriver methods
302 slice_hrn = 'iotlab.avakian_slice'
303 message_and_wait(("\r\n GetSlices slice_hrn %s "%(slice_hrn)))
304 sl = iotlabdriver.GetSlices(
305 slice_filter= slice_hrn, slice_filter_type='slice_hrn')
308 message_and_wait("\r\n GetSlices slice filter 20 (record_id_user) ")
309 sl = iotlabdriver.GetSlices(slice_filter='20',
310 slice_filter_type='record_id_user')
313 message_and_wait("\r\n GetSlices :all slice")
314 sl = iotlabdriver.GetSlices()
322 def TestSQL(arg = None):
323 from sfa.storage.model import make_record, RegSlice, RegRecord
324 from sfa.storage.alchemy import global_dbsession
327 from sqlalchemy.orm import joinedload
329 slice_hrn = 'iotlab.avakian_slice'
330 request = global_dbsession.query(RegSlice).options(joinedload('reg_researchers'))
331 solo_query_slice_list = request.filter_by(hrn=slice_hrn).first()
333 print "\r\n \r\n =========== solo_query_slice_list RegSlice \
334 joinedload('reg_researchers') slice_hrn %s first %s \r\n \t "\
335 %(slice_hrn, solo_query_slice_list.__dict__)
337 query_slice_list = request.all()
338 print "\r\n \r\n =========== query_slice_list RegSlice \
339 joinedload('reg_researchers') ALL \r\n \t", \
340 query_slice_list[0].__dict__
342 return_slicerec_dictlist = []
343 record = query_slice_list[0]
344 print "\r\n \r\n =========== \r\n \t", record
346 tmp = record.__dict__
347 print "\r\n \r\n =========== \r\n \t", tmp
348 tmp['reg_researchers'] = tmp['reg_researchers'][0].__dict__
349 print "\r\n \r\n =========== \r\n \t", tmp
350 #del tmp['reg_researchers']['_sa_instance_state']
351 return_slicerec_dictlist.append(tmp)
353 print "\r\n \r\n =========== \r\n \t", return_slicerec_dictlist
355 all_records = global_dbsession.query(RegRecord).all()
366 supported_options = {
369 'driver': TestIotlabDriver,
370 'shell': TestIotlabshell,
375 opts = parse_options()
378 supported_options[opt](opts[opt])
381 if __name__ == "__main__":