Index: testing/buildbot/manage.py |
diff --git a/testing/buildbot/manage.py b/testing/buildbot/manage.py |
deleted file mode 100755 |
index bc362fd221b1f4578f44b542ba8fb04aff39f8ed..0000000000000000000000000000000000000000 |
--- a/testing/buildbot/manage.py |
+++ /dev/null |
@@ -1,193 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright 2015 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Toolbox to manage all the json files in this directory. |
- |
-It can reformat them in their canonical format or ensures they are well |
-formatted. |
-""" |
- |
-import argparse |
-import collections |
-import glob |
-import json |
-import os |
-import subprocess |
-import sys |
- |
- |
-THIS_DIR = os.path.dirname(os.path.abspath(__file__)) |
-SRC_DIR = os.path.dirname(os.path.dirname(THIS_DIR)) |
-sys.path.insert(0, os.path.join(SRC_DIR, 'third_party', 'colorama', 'src')) |
- |
-import colorama |
- |
- |
-SKIP = { |
- # These are not 'builders'. |
- 'compile_targets', 'gtest_tests', 'filter_compile_builders', |
- 'non_filter_builders', 'non_filter_tests_builders', |
- |
- # These are not supported on Swarming yet. |
- # http://crbug.com/472205 |
- 'Chromium Mac 10.10', |
- # http://crbug.com/441429 |
- 'Linux Trusty (32)', 'Linux Trusty (dbg)(32)', |
- |
- # One off builders. Note that Swarming does support ARM. |
- 'Linux ARM Cross-Compile', |
- 'Site Isolation Linux', |
- 'Site Isolation Win', |
-} |
- |
- |
-def upgrade_test(test): |
- """Converts from old style string to new style dict.""" |
- if isinstance(test, basestring): |
- return {'test': test} |
- assert isinstance(test, dict) |
- return test |
- |
- |
-def get_isolates(): |
- """Returns the list of all isolate files.""" |
- files = subprocess.check_output(['git', 'ls-files'], cwd=SRC_DIR).splitlines() |
- return [os.path.basename(f) for f in files if f.endswith('.isolate')] |
- |
- |
-def main(): |
- colorama.init() |
- parser = argparse.ArgumentParser(description=sys.modules[__name__].__doc__) |
- group = parser.add_mutually_exclusive_group(required=True) |
- group.add_argument( |
- '-c', '--check', action='store_true', help='Only check the files') |
- group.add_argument( |
- '--convert', action='store_true', |
- help='Convert a test to run on Swarming everywhere') |
- group.add_argument( |
- '--remaining', action='store_true', |
- help='Count the number of tests not yet running on Swarming') |
- group.add_argument( |
- '-w', '--write', action='store_true', help='Rewrite the files') |
- parser.add_argument( |
- 'test_name', nargs='?', |
- help='The test name to print which configs to update; only to be used ' |
- 'with --remaining') |
- args = parser.parse_args() |
- |
- if args.convert or args.remaining: |
- isolates = get_isolates() |
- |
- if args.convert: |
- if not args.test_name: |
- parser.error('A test name is required with --convert') |
- if args.test_name + '.isolate' not in isolates: |
- parser.error('Create %s.isolate first' % args.test_name) |
- |
- # Stats when running in --remaining mode; |
- tests_location = collections.defaultdict( |
- lambda: { |
- 'count_run_local': 0, 'count_run_on_swarming': 0, 'local_configs': {} |
- }) |
- |
- result = 0 |
- for filepath in glob.glob(os.path.join(THIS_DIR, '*.json')): |
- filename = os.path.basename(filepath) |
- with open(filepath) as f: |
- content = f.read() |
- try: |
- config = json.loads(content) |
- except ValueError as e: |
- print "Exception raised while checking %s: %s" % (filepath, e) |
- raise |
- for builder, data in sorted(config.iteritems()): |
- if builder in SKIP: |
- # Oddities. |
- continue |
- |
- if not isinstance(data, dict): |
- print('%s: %s is broken: %s' % (filename, builder, data)) |
- continue |
- |
- if 'gtest_tests' in data: |
- config[builder]['gtest_tests'] = sorted( |
- (upgrade_test(l) for l in data['gtest_tests']), |
- key=lambda x: x['test']) |
- |
- if args.remaining: |
- for test in data['gtest_tests']: |
- name = test['test'] |
- if test.get('swarming', {}).get('can_use_on_swarming_builders'): |
- tests_location[name]['count_run_on_swarming'] += 1 |
- else: |
- tests_location[name]['count_run_local'] += 1 |
- tests_location[name]['local_configs'].setdefault( |
- filename, []).append(builder) |
- elif args.convert: |
- for test in data['gtest_tests']: |
- if test['test'] != args.test_name: |
- continue |
- test.setdefault('swarming', {}) |
- if not test['swarming'].get('can_use_on_swarming_builders'): |
- print('- %s: %s' % (filename, builder)) |
- test['swarming']['can_use_on_swarming_builders'] = True |
- |
- expected = json.dumps( |
- config, sort_keys=True, indent=2, separators=(',', ': ')) + '\n' |
- if content != expected: |
- result = 1 |
- if args.write or args.convert: |
- with open(filepath, 'wb') as f: |
- f.write(expected) |
- if args.write: |
- print('Updated %s' % filename) |
- else: |
- print('%s is not in canonical format' % filename) |
- |
- if args.remaining: |
- if args.test_name: |
- if args.test_name not in tests_location: |
- print('Unknown test %s' % args.test_name) |
- return 1 |
- for config, builders in sorted( |
- tests_location[args.test_name]['local_configs'].iteritems()): |
- print('%s:' % config) |
- for builder in sorted(builders): |
- print(' %s' % builder) |
- else: |
- l = max(map(len, tests_location)) |
- print('%-*s%sLocal %sSwarming %sMissing isolate' % |
- (l, 'Test', colorama.Fore.RED, colorama.Fore.GREEN, |
- colorama.Fore.MAGENTA)) |
- total_local = 0 |
- total_swarming = 0 |
- for name, location in sorted(tests_location.iteritems()): |
- if not location['count_run_on_swarming']: |
- c = colorama.Fore.RED |
- elif location['count_run_local']: |
- c = colorama.Fore.YELLOW |
- else: |
- c = colorama.Fore.GREEN |
- total_local += location['count_run_local'] |
- total_swarming += location['count_run_on_swarming'] |
- missing_isolate = '' |
- if name + '.isolate' not in isolates: |
- missing_isolate = colorama.Fore.MAGENTA + '*' |
- print('%s%-*s %4d %4d %s' % |
- (c, l, name, location['count_run_local'], |
- location['count_run_on_swarming'], missing_isolate)) |
- |
- total = total_local + total_swarming |
- p_local = 100. * total_local / total |
- p_swarming = 100. * total_swarming / total |
- print('%s%-*s %4d (%4.1f%%) %4d (%4.1f%%)' % |
- (colorama.Fore.WHITE, l, 'Total:', total_local, p_local, |
- total_swarming, p_swarming)) |
- print('%-*s %4d' % (l, 'Total executions:', total)) |
- return result |
- |
- |
-if __name__ == "__main__": |
- sys.exit(main()) |