blob: fb84104ac8a4bf9d097eb2e72feaeb53a0cb031d [file] [log] [blame]
Andy Doan61b4d772012-04-24 10:03:28 -05001#!/usr/bin/python
2
3import argparse
Andy Doanbc19b7c2012-05-17 12:08:16 -05004import collections
Andy Doan61b4d772012-04-24 10:03:28 -05005import json
6import os
7import re
8import string
9import sys
10import xmlrpclib
11
12SERVER='validation.linaro.org/lava-server/RPC2/'
Andy Doan61b4d772012-04-24 10:03:28 -050013
Andy Doan3462e4c2012-05-18 10:58:06 -050014DEVICE_STREAM = {
15 'panda': 'leb-panda-4430',
16 'origen': 'leb-origen',
17 'snowball_sd': 'leb-snowball',
18 'beaglexm': 'beaglexm',
19}
20
Andy Doanbc19b7c2012-05-17 12:08:16 -050021def get_install_action(tests):
22 return {
23 'command': 'lava_test_install',
24 'parameters': {
25 'tests': tests
26 }
27 }
Andy Doan61b4d772012-04-24 10:03:28 -050028
Andy Doanbc19b7c2012-05-17 12:08:16 -050029def get_test_actions(tests):
30 actions = []
31 for t in tests:
32 actions.append( {
33 'command': 'lava_test_run',
34 'parameters': { 'test_name': t }
35 })
36 return actions
Andy Doan7fb9f7c2012-05-03 22:49:02 -050037
Andy Doanbc19b7c2012-05-17 12:08:16 -050038def get_job(jobname, device_type, img_url, tests):
Andy Doanea529ba2012-05-21 18:49:05 -050039 stream = '/private/team/linaro/pre-built-%s/' % DEVICE_STREAM[device_type]
Andy Doan3462e4c2012-05-18 10:58:06 -050040
Andy Doanbc19b7c2012-05-17 12:08:16 -050041 job = collections.OrderedDict()
42 job['job_name'] = jobname
43 job['device_type'] = device_type
44 job['timeout'] = 18000
45 job['actions'] = [
46 {
47 'command': "deploy_linaro_image",
48 'parameters': {
49 'image': img_url
50 }
51 },
52 {
53 'command': 'boot_linaro_image'
54 }
55 ]
56 job['actions'].append(get_install_action(tests))
57 job['actions'].extend(get_test_actions(tests))
58 job['actions'].append(
59 {
60 'command': 'submit_results',
61 'parameters': {
Andy Doan3462e4c2012-05-18 10:58:06 -050062 'stream': stream,
Andy Doanbc19b7c2012-05-17 12:08:16 -050063 'server': 'http://validation.linaro.org/lava-server/RPC2/'
64 }
65 }
66 )
67 return json.dumps(job, indent=4)
Andy Doan61b4d772012-04-24 10:03:28 -050068
69def obfuscate_credentials(s):
70 return re.sub(r"([^ ]:).+?(@)", r"\1xxx\2", s)
71
72def main():
73 p = argparse.ArgumentParser(description='submits a benchmark job to lava')
74 p.add_argument('-j', dest='job_name', required=True,
75 help='name of job for LAVA')
76 p.add_argument('-u', dest='img_url', required=True,
77 help='URL of image')
78 p.add_argument('-d', dest='device_type', required=True,
79 help='The device type to execute on. ie "panda"')
80 args = p.parse_args()
81
Andy Doanbc19b7c2012-05-17 12:08:16 -050082 tests = [
83 'pwrmgmt',
84 'gatortests',
85 'perf',
86 'e2eaudiotest',
87 'bluetooth-enablement',
88 'wifi-enablement',
89 ]
90
91 job = get_job(args.job_name, args.device_type, args.img_url, tests)
Andy Doan61b4d772012-04-24 10:03:28 -050092
93 user = os.environ.get('LAVA_USER')
94 token = os.environ.get('LAVA_TOKEN')
95 if user is None or token is None:
96 print "Error LAVA_USER and LAVA_TOKEN environment variables are required"
Andy Doan35ee9dc2012-05-11 01:10:12 -050097 sys.exit(1)
Andy Doan61b4d772012-04-24 10:03:28 -050098 server = xmlrpclib.ServerProxy("https://%s:%s@%s" % (user, token, SERVER))
99 try:
100 lava_job_id = server.scheduler.submit_job(job)
Andy Doan35ee9dc2012-05-11 01:10:12 -0500101 print lava_job_id
Andy Doan61b4d772012-04-24 10:03:28 -0500102 except xmlrpclib.ProtocolError, e:
103 print "Error making a LAVA request:", obfuscate_credentials(str(e))
104 sys.exit(1)
105
106if __name__ == "__main__":
107 main()
108