1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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)
|