summaryrefslogtreecommitdiff
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.py84
1 files changed, 84 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..1e2a7c3bba
--- /dev/null
+++ b/build/gen_test_packages_manifest.py
@@ -0,0 +1,84 @@
+#!/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',
+ 'xpcshell',
+ 'cppunittest',
+ 'jittest',
+ 'mozbase',
+ 'web-platform',
+ 'talos',
+ 'gtest',
+]
+
+PACKAGE_SPECIFIED_HARNESSES = [
+ 'cppunittest',
+ 'mochitest',
+ 'reftest',
+ 'xpcshell',
+ 'web-platform',
+ 'talos',
+]
+
+# 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)
+ 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)