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 |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 8 | import sys |
| 9 | import xmlrpclib |
| 10 | |
| 11 | SERVER='validation.linaro.org/lava-server/RPC2/' |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 12 | |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 13 | DEVICE_STREAM = { |
| 14 | 'panda': 'leb-panda-4430', |
Paul Larson | 2730851 | 2012-08-17 14:09:05 -0500 | [diff] [blame] | 15 | 'panda-es': 'leb-panda-es', |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 16 | 'origen': 'leb-origen', |
| 17 | 'snowball_sd': 'leb-snowball', |
| 18 | 'beaglexm': 'beaglexm', |
Fathi Boudra | 76551e5 | 2012-09-19 17:51:33 +0300 | [diff] [blame^] | 19 | 'vexpress-a9': '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 | |
Michael Hudson-Doyle | afa68ce | 2012-07-16 11:38:16 +1200 | [diff] [blame] | 57 | def get_job(jobname, device_type, img_url, tests, image_name, image_number, |
Paul Larson | eca4449 | 2012-08-17 13:51:48 -0500 | [diff] [blame] | 58 | image_type): |
Andy Doan | ea529ba | 2012-05-21 18:49:05 -0500 | [diff] [blame] | 59 | stream = '/private/team/linaro/pre-built-%s/' % DEVICE_STREAM[device_type] |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 60 | |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 61 | job = collections.OrderedDict() |
| 62 | job['job_name'] = jobname |
| 63 | job['device_type'] = device_type |
| 64 | job['timeout'] = 18000 |
| 65 | job['actions'] = [ |
Fathi Boudra | 73d3b83 | 2012-06-15 17:49:14 +0300 | [diff] [blame] | 66 | { |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 67 | 'command': "deploy_linaro_image", |
| 68 | 'parameters': { |
Fathi Boudra | 73d3b83 | 2012-06-15 17:49:14 +0300 | [diff] [blame] | 69 | 'image': img_url |
Michael Hudson-Doyle | a15402f | 2012-07-12 13:23:27 +1200 | [diff] [blame] | 70 | }, |
| 71 | 'metadata': { |
| 72 | 'ubuntu.name': image_name, |
Michael Hudson-Doyle | afa68ce | 2012-07-16 11:38:16 +1200 | [diff] [blame] | 73 | 'ubuntu.build': image_number, |
| 74 | 'ubuntu.image_type': image_type, |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 75 | } |
| 76 | }, |
Fathi Boudra | 73d3b83 | 2012-06-15 17:49:14 +0300 | [diff] [blame] | 77 | { |
| 78 | 'command': 'boot_linaro_image' |
| 79 | } |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 80 | ] |
| 81 | job['actions'].append(get_install_action(tests)) |
| 82 | job['actions'].extend(get_test_actions(tests)) |
| 83 | job['actions'].append( |
| 84 | { |
| 85 | 'command': 'submit_results', |
| 86 | 'parameters': { |
Andy Doan | 3462e4c | 2012-05-18 10:58:06 -0500 | [diff] [blame] | 87 | 'stream': stream, |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 88 | 'server': 'http://validation.linaro.org/lava-server/RPC2/' |
| 89 | } |
| 90 | } |
| 91 | ) |
| 92 | return json.dumps(job, indent=4) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 93 | |
| 94 | def obfuscate_credentials(s): |
| 95 | return re.sub(r"([^ ]:).+?(@)", r"\1xxx\2", s) |
| 96 | |
| 97 | def main(): |
| 98 | p = argparse.ArgumentParser(description='submits a benchmark job to lava') |
| 99 | p.add_argument('-j', dest='job_name', required=True, |
| 100 | help='name of job for LAVA') |
| 101 | p.add_argument('-u', dest='img_url', required=True, |
| 102 | help='URL of image') |
| 103 | p.add_argument('-d', dest='device_type', required=True, |
| 104 | help='The device type to execute on. ie "panda"') |
Ricardo Salveti de Araujo | 42b0a24 | 2012-05-29 14:07:56 -0300 | [diff] [blame] | 105 | p.add_argument('-t', dest='image_type', default='nano', |
| 106 | help='The image type to execute on, nano (default) or ubuntu-desktop') |
Michael Hudson-Doyle | a15402f | 2012-07-12 13:23:27 +1200 | [diff] [blame] | 107 | p.add_argument('-n', dest='image_name', required=True, |
| 108 | help='The name of the image for QA purposes, e.g. "lt-panda-x11-base"') |
| 109 | p.add_argument('-c', dest='image_number', required=True, |
| 110 | help='The build number for this image') |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 111 | args = p.parse_args() |
| 112 | |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 113 | # test sets specific to images and boards |
Fathi Boudra | c51e091 | 2012-06-15 18:18:41 +0300 | [diff] [blame] | 114 | tests = tests_nano |
| 115 | |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 116 | # if ubuntu-desktop, cover more test cases (LEB) |
Ricardo Salveti de Araujo | 070048a | 2012-05-31 00:30:14 +0800 | [diff] [blame] | 117 | if args.image_type == 'ubuntu-desktop': |
Fathi Boudra | c51e091 | 2012-06-15 18:18:41 +0300 | [diff] [blame] | 118 | tests += tests_desktop |
Andy Doan | bc19b7c | 2012-05-17 12:08:16 -0500 | [diff] [blame] | 119 | |
Ricardo Salveti de Araujo | 6ad9433 | 2012-06-29 02:48:18 -0300 | [diff] [blame] | 120 | # if alip, specific tests like bootchart (which should be first) |
| 121 | if args.image_type == 'alip': |
| 122 | tests = tests_alip + tests |
| 123 | |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 124 | # removing bluetooth and wifi for devices that don't support it |
Fathi Boudra | 76551e5 | 2012-09-19 17:51:33 +0300 | [diff] [blame^] | 125 | if args.device_type in ['beaglexm', 'vexpress-a9', 'mx53loco']: |
Ricardo Salveti de Araujo | dd78097 | 2012-06-29 11:48:47 -0300 | [diff] [blame] | 126 | try: |
| 127 | tests.remove('bluetooth-enablement') |
| 128 | tests.remove('wifi-enablement') |
| 129 | except ValueError: |
| 130 | pass |
Ricardo Salveti de Araujo | acf2854 | 2012-06-27 18:56:00 -0300 | [diff] [blame] | 131 | |
| 132 | # vexpress doesn't support PM, so disable pwrmgmt |
Fathi Boudra | 76551e5 | 2012-09-19 17:51:33 +0300 | [diff] [blame^] | 133 | if args.device_type in ['vexpress-a9']: |
Ricardo Salveti de Araujo | dd78097 | 2012-06-29 11:48:47 -0300 | [diff] [blame] | 134 | try: |
| 135 | tests.remove('pwrmgmt') |
| 136 | except ValueError: |
| 137 | pass |
Andy Doan | e9bf215 | 2012-06-12 15:42:10 -0500 | [diff] [blame] | 138 | |
Michael Hudson-Doyle | a15402f | 2012-07-12 13:23:27 +1200 | [diff] [blame] | 139 | job = get_job(args.job_name, args.device_type, args.img_url, tests, |
Paul Larson | eca4449 | 2012-08-17 13:51:48 -0500 | [diff] [blame] | 140 | args.image_name, args.image_number, args.image_type) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 141 | |
| 142 | user = os.environ.get('LAVA_USER') |
| 143 | token = os.environ.get('LAVA_TOKEN') |
| 144 | if user is None or token is None: |
Ricardo Salveti de Araujo | ba7dacf | 2012-06-23 01:08:24 -0300 | [diff] [blame] | 145 | print "ERROR: LAVA_USER and LAVA_TOKEN environment variables are required" |
Andy Doan | 35ee9dc | 2012-05-11 01:10:12 -0500 | [diff] [blame] | 146 | sys.exit(1) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 147 | server = xmlrpclib.ServerProxy("https://%s:%s@%s" % (user, token, SERVER)) |
| 148 | try: |
| 149 | lava_job_id = server.scheduler.submit_job(job) |
Andy Doan | 35ee9dc | 2012-05-11 01:10:12 -0500 | [diff] [blame] | 150 | print lava_job_id |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 151 | except xmlrpclib.ProtocolError, e: |
Ricardo Salveti de Araujo | ba7dacf | 2012-06-23 01:08:24 -0300 | [diff] [blame] | 152 | print "ERROR: Error making a LAVA request:", obfuscate_credentials(str(e)) |
Andy Doan | 61b4d77 | 2012-04-24 10:03:28 -0500 | [diff] [blame] | 153 | sys.exit(1) |
| 154 | |
| 155 | if __name__ == "__main__": |
| 156 | main() |