fune/taskcluster/test/test_mach_try_auto.py
Andrew Halberstadt 95449daa6d Bug 1732723 - Rename "taskgraph" Python module to "gecko_taskgraph". r=jmaher
For a long time two copies of the 'taskgraph' module have existed in parallel.
We've attempted to keep them in sync, but over time they have diverged and the
maintenance burden has increased.

In order to reduce this burden, we'd like to re-join the two code bases. The
canonical repo will be the one that lives outside of mozilla-central, and this
module will depend on it. Since they both have the same module name (taskgraph)
we need to rename the version in mozilla-central to avoid collisions.

Other consumers of 'taskgraph' (like mobile repos) have standardized on
'<project>_taskgraph' as their module names. So replicating that here as well.

Differential Revision: https://phabricator.services.mozilla.com/D127118
2021-09-30 09:50:08 -04:00

117 lines
3.6 KiB
Python

# Any copyright is dedicated to the public domain.
# http://creativecommons.org/publicdomain/zero/1.0/
from __future__ import absolute_import, print_function, unicode_literals
import pytest
from mozunit import main
from tryselect.selectors.auto import TRY_AUTO_PARAMETERS
from gecko_taskgraph.util.bugbug import push_schedules
from gecko_taskgraph.util.chunking import BugbugLoader
pytestmark = pytest.mark.slow
PARAMS = TRY_AUTO_PARAMETERS.copy()
PARAMS.update(
{
"head_repository": "https://hg.mozilla.org/try",
"project": "try",
"target_kind": "test",
# These ensure this isn't considered a backstop. The pushdate must
# be slightly higher than the one in data/pushes.json, and
# pushlog_id must not be a multiple of 10.
"pushdate": 1593029536,
"pushlog_id": "2",
}
)
def test_generate_graph(optimized_task_graph):
"""Simply tests that generating the graph does not fail."""
assert len(optimized_task_graph.tasks) > 0
def test_only_important_manifests(params, full_task_graph, filter_tasks):
data = push_schedules(params["project"], params["head_rev"])
important_manifests = {
m
for m, c in data.get("groups", {}).items()
if c >= BugbugLoader.CONFIDENCE_THRESHOLD
}
# Ensure we don't schedule unimportant manifests.
for task in filter_tasks(full_task_graph, lambda t: t.kind == "test"):
attr = task.attributes.get
if "test_manifests" in task.attributes:
unimportant = [
t for t in attr("test_manifests") if t not in important_manifests
]
# Manifest scheduling is disabled for mochitest-ally.
if attr("unittest_suite") == "mochitest-a11y":
assert len(unimportant) > 0
else:
assert unimportant == []
@pytest.mark.parametrize(
"func,min_expected",
(
pytest.param(
lambda t: (
t.kind == "test"
and t.attributes["unittest_suite"] == "mochitest-browser-chrome"
),
5,
id="mochitest-browser-chrome",
),
),
)
def test_tasks_are_scheduled(optimized_task_graph, filter_tasks, func, min_expected):
"""Ensure the specified tasks are scheduled on mozilla-central."""
tasks = [t.label for t in filter_tasks(optimized_task_graph, func)]
assert len(tasks) >= min_expected
@pytest.mark.parametrize(
"func",
(
pytest.param(
lambda t: t.kind == "build"
and "shippable" in t.attributes["build_platform"],
id="no shippable builds",
),
pytest.param(
lambda t: t.kind == "build" and "fuzzing" in t.attributes["build_platform"],
id="no fuzzing builds",
),
pytest.param(
lambda t: t.kind == "build" and "ccov" in t.attributes["build_platform"],
id="no ccov builds",
),
# We should only assert that we have no signed builds on platforms that don't run
# xpcshell tests.
pytest.param(
lambda t: t.kind == "build-signing",
id="no build-signing",
marks=pytest.mark.xfail(reason="some xpcshell tests require signed builds"),
),
pytest.param(
lambda t: t.kind == "upload-symbols",
id="no upload-symbols",
),
),
)
def test_tasks_are_not_scheduled(
optimized_task_graph, filter_tasks, print_dependents, func
):
tasks = [t.label for t in filter_tasks(optimized_task_graph, func)]
for t in tasks:
print_dependents(optimized_task_graph, t)
assert tasks == []
if __name__ == "__main__":
main()