# 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/. """ Tests for the 'job' transform subsystem. """ import os from copy import deepcopy import pytest from mozunit import main from taskgraph.config import load_graph_config from taskgraph.transforms.base import TransformConfig from gecko_taskgraph import GECKO from gecko_taskgraph.test.conftest import FakeParameters from gecko_taskgraph.transforms import job from gecko_taskgraph.transforms.job import run_task # noqa: F401 from gecko_taskgraph.transforms.task import group_name_variant here = os.path.abspath(os.path.dirname(__file__)) TASK_DEFAULTS = { "description": "fake description", "label": "fake-task-label", "run": { "using": "run-task", }, } @pytest.fixture(scope="module") def config(): graph_config = load_graph_config(os.path.join(GECKO, "taskcluster")) params = FakeParameters( { "base_repository": "http://hg.example.com", "head_repository": "http://hg.example.com", "head_rev": "abcdef", "level": 1, "project": "example", } ) return TransformConfig( "job_test", here, {}, params, {}, graph_config, write_artifacts=False ) @pytest.fixture() def transform(monkeypatch, config): """Run the job transforms on the specified task but return the inputs to `configure_taskdesc_for_run` without executing it. This gives test functions an easy way to generate the inputs required for many of the `run_using` subsystems. """ def inner(task_input): task = deepcopy(TASK_DEFAULTS) task.update(task_input) frozen_args = [] def _configure_taskdesc_for_run(*args): frozen_args.extend(args) monkeypatch.setattr( job, "configure_taskdesc_for_run", _configure_taskdesc_for_run ) for _ in job.transforms(config, [task]): # This forces the generator to be evaluated pass return frozen_args return inner @pytest.mark.parametrize( "groupSymbol,description", [ pytest.param("M", "Mochitests", id="no_variants"), pytest.param( "M-spi-nw", "Mochitests with networking on socket process enabled", id="spi-nw variant", ), pytest.param( "M-spi-nw-http3", "Mochitests with networking on socket process enabled with http3 server", id="spi-nw and http3 variants", ), pytest.param("M-fake", "", id="invalid group name"), ], ids=lambda t: t["worker-type"], ) def test_group_name(config, groupSymbol, description): group_names = config.graph_config["treeherder"]["group-names"] generated_description = group_name_variant(group_names, groupSymbol) assert description == generated_description if __name__ == "__main__": main()