# Any copyright is dedicated to the public domain. # http://creativecommons.org/publicdomain/zero/1.0/ import os import gecko_taskgraph import pytest from gecko_taskgraph.util.verify import verifications from mozunit import main from taskgraph.generator import TaskGraphGenerator from taskgraph.parameters import Parameters from taskgraph.taskgraph import TaskGraph from taskgraph.util.taskcluster import get_artifact def pytest_generate_tests(metafunc): if "verification" in metafunc.fixturenames: name = metafunc.function.__name__.split("_", 1)[1] verification_objs = verifications._verifications.get(name, []) ids = [v.func.__name__ for v in verification_objs] metafunc.parametrize("verification", verification_objs, ids=ids) @pytest.fixture(scope="module") def parameters(): if "TASK_GROUP_ID" not in os.environ: pytest.skip(reason="requires a Decision taskId to test against") return Parameters( **get_artifact(os.environ["TASK_GROUP_ID"], "public/parameters.yml") ) @pytest.fixture(scope="module") def tgg(parameters): root = os.path.dirname(os.path.dirname(gecko_taskgraph.__file__)) return TaskGraphGenerator(root, parameters) @pytest.fixture(scope="module") def graph_config(tgg): return tgg.graph_config @pytest.fixture(scope="module") def kinds(tgg): return {kind.name: kind for kind in tgg._load_kinds(tgg.graph_config, [])} @pytest.fixture(scope="module") def full_task_graph(): if "TASK_GROUP_ID" not in os.environ: pytest.skip(reason="requires a Decision taskId to test against") return TaskGraph.from_json( get_artifact(os.environ["TASK_GROUP_ID"], "public/full-task-graph.json") )[1] @pytest.fixture(scope="module") def target_task_graph(): if "TASK_GROUP_ID" not in os.environ: pytest.skip(reason="requires a Decision taskId to test against") return TaskGraph.from_json( get_artifact(os.environ["TASK_GROUP_ID"], "public/target-tasks.json") )[1] @pytest.fixture(scope="module") def morphed_task_graph(): if "TASK_GROUP_ID" not in os.environ: pytest.skip(reason="requires a Decision taskId to test against") return TaskGraph.from_json( get_artifact(os.environ["TASK_GROUP_ID"], "public/task-graph.json") )[1] def test_initial(verification): verification.verify() def test_graph_config(verification, graph_config): verification.verify(graph_config) def test_kinds(verification, kinds): verification.verify(kinds) def test_parameters(verification, parameters): verification.verify(parameters) def test_full_task_set(verification, full_task_graph, graph_config, parameters): # We don't write out the full_task_set as a decision task artifact, but # the full_task_graph is functionally equivalent. verification.verify(full_task_graph, graph_config, parameters) def test_full_task_graph(verification, full_task_graph, graph_config, parameters): verification.verify(full_task_graph, graph_config, parameters) def test_target_task_graph(verification, target_task_graph, graph_config, parameters): verification.verify(target_task_graph, graph_config, parameters) def test_optimized_task_graph( verification, morphed_task_graph, graph_config, parameters ): # We don't write out the optimized graph as a decision task artifact, but # the morphed graph is a good enough stand-in. verification.verify(morphed_task_graph, graph_config, parameters) def test_morphed_task_graph(verification, morphed_task_graph, graph_config, parameters): verification.verify(morphed_task_graph, graph_config, parameters) if __name__ == "__main__": main()