summaryrefslogtreecommitdiffstats
path: root/taskcluster/test/test_generate_params.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /taskcluster/test/test_generate_params.py
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'taskcluster/test/test_generate_params.py')
-rw-r--r--taskcluster/test/test_generate_params.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/taskcluster/test/test_generate_params.py b/taskcluster/test/test_generate_params.py
new file mode 100644
index 0000000000..3fb479879b
--- /dev/null
+++ b/taskcluster/test/test_generate_params.py
@@ -0,0 +1,62 @@
+import json
+import os
+import subprocess
+
+import pytest
+from gecko_taskgraph import GECKO
+from mozunit import main
+from taskgraph.taskgraph import TaskGraph
+
+pytestmark = pytest.mark.slow
+PARAMS_DIR = os.path.join(GECKO, "taskcluster", "test", "params")
+
+
+@pytest.fixture(scope="module")
+def get_graph_from_spec(tmpdir_factory):
+ outdir = tmpdir_factory.mktemp("graphs")
+
+ # Use a mach subprocess to leverage the auto parallelization of
+ # parameters when specifying a directory.
+ cmd = [
+ "./mach",
+ "taskgraph",
+ "morphed",
+ "--json",
+ f"--parameters={PARAMS_DIR}",
+ f"--output-file={outdir}/graph.json",
+ ]
+ # unset MOZ_AUTOMATION so we don't attempt to optimize out the graph
+ # entirely as having already run
+ env = os.environ.copy()
+ env.pop("MOZ_AUTOMATION", None)
+ subprocess.run(cmd, cwd=GECKO, env=env)
+ assert len(outdir.listdir()) > 0
+
+ def inner(param_spec):
+ outfile = f"{outdir}/graph_{param_spec}.json"
+ with open(outfile) as fh:
+ output = fh.read()
+ try:
+ return TaskGraph.from_json(json.loads(output))[1]
+ except ValueError:
+ return output
+
+ return inner
+
+
+@pytest.mark.parametrize(
+ "param_spec",
+ [os.path.splitext(p)[0] for p in os.listdir(PARAMS_DIR) if p.endswith(".yml")],
+)
+def test_generate_graphs(get_graph_from_spec, param_spec):
+ ret = get_graph_from_spec(param_spec)
+ if isinstance(ret, str):
+ print(ret)
+ pytest.fail("An exception was raised during graph generation!")
+
+ assert isinstance(ret, TaskGraph)
+ assert len(ret.tasks) > 0
+
+
+if __name__ == "__main__":
+ main()