| #!/usr/bin/python |
| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| import json |
| |
| from argparse import ArgumentParser |
| |
| ALL_HARNESSES = [ |
| 'common', # Harnesses without a specific package will look here. |
| 'mochitest', |
| 'reftest', |
| 'webapprt', |
| 'xpcshell', |
| 'cppunittest', |
| 'jittest', |
| 'mozbase', |
| 'web-platform', |
| 'talos', |
| ] |
| |
| PACKAGE_SPECIFIED_HARNESSES = [ |
| 'cppunittest', |
| 'mochitest', |
| 'reftest', |
| 'xpcshell', |
| 'web-platform', |
| 'talos', |
| ] |
| |
| |
| def parse_args(): |
| parser = ArgumentParser(description='Generate a test_packages.json file to tell automation which harnesses require which test packages.') |
| parser.add_argument("--common", required=True, |
| action="store", dest="tests_common", |
| help="Name of the \"common\" archive, a package to be used by all harnesses.") |
| parser.add_argument("--jsshell", required=True, |
| action="store", dest="jsshell", |
| help="Name of the jsshell zip.") |
| parser.add_argument("--use-short-names", action="store_true", |
| help="Use short names for packages (target.$name.tests.zip " |
| "instead of $(PACKAGE_BASENAME).$name.tests.zip)") |
| for harness in PACKAGE_SPECIFIED_HARNESSES: |
| parser.add_argument("--%s" % harness, required=True, |
| action="store", dest=harness, |
| help="Name of the %s zip." % harness) |
| parser.add_argument("--dest-file", required=True, |
| action="store", dest="destfile", |
| help="Path to the output file to be written.") |
| return parser.parse_args() |
| |
| def generate_package_data(args): |
| # Generate a dictionary mapping test harness names (exactly as they're known to |
| # mozharness and testsuite-targets.mk, ideally) to the set of archive names that |
| # harness depends on to run. |
| # mozharness will use this file to determine what test zips to download, |
| # which will be an optimization once parts of the main zip are split to harness |
| # specific zips. |
| tests_common = args.tests_common |
| if args.use_short_names: |
| tests_common = 'target.common.tests.zip' |
| |
| jsshell = args.jsshell |
| |
| harness_requirements = dict([(k, [tests_common]) for k in ALL_HARNESSES]) |
| harness_requirements['jittest'].append(jsshell) |
| for harness in PACKAGE_SPECIFIED_HARNESSES: |
| pkg_name = getattr(args, harness) |
| if args.use_short_names: |
| pkg_name = 'target.%s.tests.zip' % harness |
| harness_requirements[harness].append(pkg_name) |
| return harness_requirements |
| |
| if __name__ == '__main__': |
| args = parse_args() |
| packages_data = generate_package_data(args) |
| with open(args.destfile, 'w') as of: |
| json.dump(packages_data, of, indent=4) |