forked from mirrors/gecko-dev
Future commits will tease this apart a bit more, but for now this helps crystallize the order in which transforms are applied. The flow of the overall test transforms goes something like this: 1. Enter 'transforms/test/__init__.py' 2. Validate all tasks against the test_description_schema 3. Run sibling transforms (starting with 'variant.py' and ending with 'other.py' for now) 4. Make the job description As we pull more transforms out of 'other.py' and into their own smaller transform files, it will be clear that the order in which these smaller files run is important. Adding new transforms will no longer involve picking some random spot to insert it. Differential Revision: https://phabricator.services.mozilla.com/D132409
71 lines
2.1 KiB
Python
71 lines
2.1 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
|
|
|
|
pytestmark = pytest.mark.slow
|
|
PARAMS = {
|
|
"head_repository": "https://hg.mozilla.org/mozilla-central",
|
|
"project": "central",
|
|
}
|
|
|
|
|
|
def test_generate_graph(optimized_task_graph):
|
|
"""Simply tests that generating the graph does not fail."""
|
|
assert len(optimized_task_graph.tasks) > 0
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"func,min_expected",
|
|
(
|
|
pytest.param(
|
|
lambda t: t.kind == "build" and "fuzzing" in t.attributes["build_platform"],
|
|
5,
|
|
id="fuzzing builds",
|
|
),
|
|
),
|
|
)
|
|
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)]
|
|
print(tasks)
|
|
assert len(tasks) >= min_expected
|
|
|
|
|
|
def test_test_setting(full_task_graph, filter_tasks):
|
|
"""Verify that all test tasks' ``test-setting`` object conforms to the schema."""
|
|
from gecko_taskgraph.transforms.test.other import test_setting_description_schema
|
|
from gecko_taskgraph.util.schema import validate_schema
|
|
|
|
tasks = filter_tasks(full_task_graph, lambda t: t.kind == "test")
|
|
|
|
failures = []
|
|
for task in tasks:
|
|
try:
|
|
validate_schema(
|
|
test_setting_description_schema,
|
|
dict(task.task["extra"]["test-setting"]),
|
|
task.label,
|
|
)
|
|
except Exception as e:
|
|
failures.append(e)
|
|
|
|
if failures:
|
|
more = None
|
|
# Only display a few failures at once.
|
|
if len(failures) > 10:
|
|
more = len(failures) - 10
|
|
failures = failures[:10]
|
|
|
|
failstr = "\n\n" + "\n\n".join(str(e) for e in failures)
|
|
if more:
|
|
failstr += "\n\n" + f"... and {more} more"
|
|
|
|
pytest.fail(f"Task validation errors:{failstr}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|