#!/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/.importjsonfromargparseimportArgumentParserALL_HARNESSES=["common",# Harnesses without a specific package will look here."condprof","mochitest","reftest","xpcshell","cppunittest","jittest","mozbase","web-platform","talos","raptor","awsy","gtest","updater-dep","jsreftest","perftests","fuzztest",]PACKAGE_SPECIFIED_HARNESSES=["condprof","cppunittest","mochitest","reftest","xpcshell","web-platform","talos","raptor","awsy","updater-dep","jittest","jsreftest","perftests","fuzztest",]# These packages are not present for every build configuration.OPTIONAL_PACKAGES=["gtest",]defparse_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.",)forharnessinPACKAGE_SPECIFIED_HARNESSES:parser.add_argument("--%s"%harness,required=True,action="store",dest=harness,help="Name of the %s zip."%harness,)forharnessinOPTIONAL_PACKAGES:parser.add_argument("--%s"%harness,required=False,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.",)returnparser.parse_args()defgenerate_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_commonjsshell=args.jsshellharness_requirements=dict([(k,[tests_common])forkinALL_HARNESSES])harness_requirements["jittest"].append(jsshell)harness_requirements["jsreftest"].append(args.reftest)harness_requirements["common"].append("target.condprof.tests.tar.gz")forharnessinPACKAGE_SPECIFIED_HARNESSES+OPTIONAL_PACKAGES:pkg_name=getattr(args,harness,None)ifpkg_nameisNone:continueharness_requirements[harness].append(pkg_name)harness_requirements[harness].append("target.condprof.tests.tar.gz")returnharness_requirementsif__name__=="__main__":args=parse_args()packages_data=generate_package_data(args)withopen(args.destfile,"w")asof:json.dump(packages_data,of,indent=4)