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', |
Andy Doan | 58e9001 | 2012-06-08 12:13:53 -0500 | [diff] [blame] | 19 | 'vexpress': 'vexpress', |
Ricardo Salveti de Araujo | 58cc784 | 2012-06-23 15:04:25 -0300 | [diff] [blame] | 20 | 'mx53loco': 'mx53loco', |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 21 | } |
| 22 | |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 23 | tests_nano = [ |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 24 | 'gatortests', |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 25 | 'pwrmgmt', |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 26 | 'perf', |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 27 | ] |
| 28 | |
Ricardo Salveti de Araujo | 6ad9433 | 2012-06-29 02:48:18 -0300 | [diff] [blame^] | 29 | tests_alip = [ |
| 30 | 'bootchart', |
| 31 | ] |
| 32 | |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 33 | tests_desktop = [ |
| 34 | 'e2eaudiotest', |
| 35 | 'bluetooth-enablement', |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 36 | 'wifi-enablement', |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 37 | 'leb-basic-graphics', |
| 38 | ] |
| 39 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 40 | def get_install_action(tests): |
| 41 | return { |
| 42 | 'command': 'lava_test_install', |
| 43 | 'parameters': { |
| 44 | 'tests': tests |
| 45 | } |
| 46 | } |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 47 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 48 | def get_test_actions(tests): |
| 49 | actions = [] |
| 50 | for t in tests: |
| 51 | actions.append( { |
| 52 | 'command': 'lava_test_run', |
Fathi Boudra | 73d3b83 | 2012-06-15 17:49:14 +0300 | [diff] [blame] | 53 | 'parameters': { 'test_name': t } |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 54 | }) |
| 55 | return actions |
Andy Doan | 7fb9f7c | 2012-05-03 22:49:02 -0500 | [diff] [blame] | 56 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 57 | def get_job(jobname, device_type, img_url, tests): |
Andy Doan | ea529ba | 2012-05-21 18:49:05 -0500 | [diff] [blame] | 58 | stream = '/private/team/linaro/pre-built-%s/' % DEVICE_STREAM[device_type] |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 59 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 60 | job = collections.OrderedDict() |
| 61 | job['job_name'] = jobname |
| 62 | job['device_type'] = device_type |
| 63 | job['timeout'] = 18000 |
| 64 | job['actions'] = [ |
Fathi Boudra | 73d3b83 | 2012-06-15 17:49:14 +0300 | [diff] [blame] | 65 | { |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 66 | 'command': "deploy_linaro_image", |
| 67 | 'parameters': { |
Fathi Boudra | 73d3b83 | 2012-06-15 17:49:14 +0300 | [diff] [blame] | 68 | 'image': img_url |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 69 | } |
| 70 | }, |
Fathi Boudra | 73d3b83 | 2012-06-15 17:49:14 +0300 | [diff] [blame] | 71 | { |
| 72 | 'command': 'boot_linaro_image' |
| 73 | } |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 74 | ] |
| 75 | job['actions'].append(get_install_action(tests)) |
| 76 | job['actions'].extend(get_test_actions(tests)) |
| 77 | job['actions'].append( |
| 78 | { |
| 79 | 'command': 'submit_results', |
| 80 | 'parameters': { |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 81 | 'stream': stream, |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 82 | 'server': 'http://validation.linaro.org/lava-server/RPC2/' |
| 83 | } |
| 84 | } |
| 85 | ) |
| 86 | return json.dumps(job, indent=4) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 87 | |
| 88 | def obfuscate_credentials(s): |
| 89 | return re.sub(r"([^ ]:).+?(@)", r"\1xxx\2", s) |
| 90 | |
| 91 | def main(): |
| 92 | p = argparse.ArgumentParser(description='submits a benchmark job to lava') |
| 93 | p.add_argument('-j', dest='job_name', required=True, |
| 94 | help='name of job for LAVA') |
| 95 | p.add_argument('-u', dest='img_url', required=True, |
| 96 | help='URL of image') |
| 97 | p.add_argument('-d', dest='device_type', required=True, |
| 98 | help='The device type to execute on. ie "panda"') |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 99 | p.add_argument('-t', dest='image_type', default='nano', |
| 100 | help='The image type to execute on, nano (default) or ubuntu-desktop') |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 101 | args = p.parse_args() |
| 102 | |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 103 | # test sets specific to images and boards |
Fathi Boudra | c51e091 | 2012-06-15 18:18:41 +0300 | [diff] [blame] | 104 | tests = tests_nano |
| 105 | |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 106 | # if ubuntu-desktop, cover more test cases (LEB) |
Ricardo Salveti de Araujo | 070048a | 2012-05-31 00:30:14 +0800 | [diff] [blame] | 107 | if args.image_type == 'ubuntu-desktop': |
Fathi Boudra | c51e091 | 2012-06-15 18:18:41 +0300 | [diff] [blame] | 108 | tests += tests_desktop |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 109 | |
Ricardo Salveti de Araujo | 6ad9433 | 2012-06-29 02:48:18 -0300 | [diff] [blame^] | 110 | # if alip, specific tests like bootchart (which should be first) |
| 111 | if args.image_type == 'alip': |
| 112 | tests = tests_alip + tests |
| 113 | |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 114 | # removing bluetooth and wifi for devices that don't support it |
| 115 | if args.device_type in ['beaglexm', 'vexpress', 'mx53loco']: |
| 116 | tests.remove('bluetooth-enablement') |
| 117 | tests.remove('wifi-enablement') |
| 118 | |
| 119 | # vexpress doesn't support PM, so disable pwrmgmt |
| 120 | if args.device_type in ['vexpress']: |
| 121 | tests.remove('pwrmgmt') |
Andy Doan | e9bf215 | 2012-06-12 15:42:10 -0500 | [diff] [blame] | 122 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 123 | 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] | 124 | |
| 125 | user = os.environ.get('LAVA_USER') |
| 126 | token = os.environ.get('LAVA_TOKEN') |
| 127 | if user is None or token is None: |
Ricardo Salveti de Araujo | ba7dacf | 2012-06-23 01:08:24 -0300 | [diff] [blame] | 128 | print "ERROR: LAVA_USER and LAVA_TOKEN environment variables are required" |
Andy Doan | 35ee9dc | 2012-05-11 01:10:12 -0500 | [diff] [blame] | 129 | sys.exit(1) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 130 | server = xmlrpclib.ServerProxy("https://%s:%s@%s" % (user, token, SERVER)) |
| 131 | try: |
| 132 | lava_job_id = server.scheduler.submit_job(job) |
Andy Doan | 35ee9dc | 2012-05-11 01:10:12 -0500 | [diff] [blame] | 133 | print lava_job_id |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 134 | except xmlrpclib.ProtocolError, e: |
Ricardo Salveti de Araujo | ba7dacf | 2012-06-23 01:08:24 -0300 | [diff] [blame] | 135 | print "ERROR: Error making a LAVA request:", obfuscate_credentials(str(e)) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 136 | sys.exit(1) |
| 137 | |
| 138 | if __name__ == "__main__": |
| 139 | main() |