summaryrefslogtreecommitdiffstats
path: root/build/gen_test_packages_manifest.py
diff options
context:
space:
mode:
Diffstat (limited to 'build/gen_test_packages_manifest.py')
-rw-r--r--build/gen_test_packages_manifest.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/build/gen_test_packages_manifest.py b/build/gen_test_packages_manifest.py
new file mode 100644
index 0000000000..afaae8c56a
--- /dev/null
+++ b/build/gen_test_packages_manifest.py
@@ -0,0 +1,124 @@
+#!/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.
+ "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",
+]
+
+
+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.",
+ )
+ for harness in PACKAGE_SPECIFIED_HARNESSES:
+ parser.add_argument(
+ "--%s" % harness,
+ required=True,
+ action="store",
+ dest=harness,
+ help="Name of the %s zip." % harness,
+ )
+ for harness in OPTIONAL_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.",
+ )
+ 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
+ jsshell = args.jsshell
+
+ harness_requirements = dict([(k, [tests_common]) for k in ALL_HARNESSES])
+ harness_requirements["jittest"].append(jsshell)
+ harness_requirements["jsreftest"].append(args.reftest)
+ for harness in PACKAGE_SPECIFIED_HARNESSES + OPTIONAL_PACKAGES:
+ pkg_name = getattr(args, harness, None)
+ if pkg_name is None:
+ continue
+ 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)