Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | |
| 3 | import argparse |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 4 | import collections |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 5 | import json |
| 6 | import os |
| 7 | import re |
| 8 | import string |
| 9 | import sys |
| 10 | import xmlrpclib |
| 11 | |
| 12 | SERVER='validation.linaro.org/lava-server/RPC2/' |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 13 | |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 14 | DEVICE_STREAM = { |
| 15 | 'panda': 'leb-panda-4430', |
| 16 | 'origen': 'leb-origen', |
| 17 | 'snowball_sd': 'leb-snowball', |
| 18 | 'beaglexm': 'beaglexm', |
| 19 | } |
| 20 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 21 | def get_install_action(tests): |
| 22 | return { |
| 23 | 'command': 'lava_test_install', |
| 24 | 'parameters': { |
| 25 | 'tests': tests |
| 26 | } |
| 27 | } |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 28 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 29 | def 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 Doan | 7fb9f7c | 2012-05-03 22:49:02 -0500 | [diff] [blame] | 37 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 38 | def get_job(jobname, device_type, img_url, tests): |
Andy Doan | ea529ba | 2012-05-21 18:49:05 -0500 | [diff] [blame] | 39 | stream = '/private/team/linaro/pre-built-%s/' % DEVICE_STREAM[device_type] |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 40 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 41 | 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 Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 62 | 'stream': stream, |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 63 | 'server': 'http://validation.linaro.org/lava-server/RPC2/' |
| 64 | } |
| 65 | } |
| 66 | ) |
| 67 | return json.dumps(job, indent=4) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 68 | |
| 69 | def obfuscate_credentials(s): |
| 70 | return re.sub(r"([^ ]:).+?(@)", r"\1xxx\2", s) |
| 71 | |
| 72 | def 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 Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 82 | 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 Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 92 | |
| 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 Doan | 35ee9dc | 2012-05-11 01:10:12 -0500 | [diff] [blame] | 97 | sys.exit(1) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 98 | server = xmlrpclib.ServerProxy("https://%s:%s@%s" % (user, token, SERVER)) |
| 99 | try: |
| 100 | lava_job_id = server.scheduler.submit_job(job) |
Andy Doan | 35ee9dc | 2012-05-11 01:10:12 -0500 | [diff] [blame] | 101 | print lava_job_id |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 102 | except xmlrpclib.ProtocolError, e: |
| 103 | print "Error making a LAVA request:", obfuscate_credentials(str(e)) |
| 104 | sys.exit(1) |
| 105 | |
| 106 | if __name__ == "__main__": |
| 107 | main() |
| 108 | |