# 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/.
import pytest
from mozunit
import main
from taskgraph.graph
import Graph
from taskgraph.parameters
import Parameters
from taskgraph.task
import Task
from taskgraph.taskgraph
import TaskGraph
from gecko_taskgraph
import morph
@pytest.fixture
def make_taskgraph():
def inner(tasks):
label_to_taskid = {k: k +
"-tid" for k
in tasks}
for label, task_id
in label_to_taskid.items():
tasks[label].task_id = task_id
graph = Graph(nodes=set(tasks), edges=set())
taskgraph = TaskGraph(tasks, graph)
return taskgraph, label_to_taskid
return inner
@pytest.mark.parametrize(
"params,expected" ,
(
pytest.param(
{
"try_mode" :
"try_task_config" ,
"try_task_config" : {
"rebuild" :
10 ,
"tasks" : [
"b" ],
},
"project" :
"try" ,
},
{
"b" :
10 },
id=
"duplicates no chunks" ,
),
pytest.param(
{
"try_mode" :
"try_task_config" ,
"try_task_config" : {
"rebuild" :
10 ,
"tasks" : [
"a-*" ],
},
"project" :
"try" ,
},
{
"a-1" :
10 ,
"a-2" :
10 },
id=
"duplicates with chunks" ,
),
pytest.param(
{
"try_mode" :
"try_task_config" ,
"try_task_config" : {
"rebuild" :
10 ,
"tasks" : [
"a-*" ,
"b" ],
},
"project" :
"try" ,
},
{
"a-1" :
10 ,
"a-2" :
10 ,
"b" :
10 },
id=
"duplicates with and without chunks" ,
),
pytest.param(
{
"try_mode" :
"try_task_config" ,
"try_task_config" : {
"tasks" : [
"a-*" ],
},
"project" :
"try" ,
},
{
"a-1" : -
1 ,
"a-2" : -
1 },
id=
"no rebuild, no duplicates" ,
),
pytest.param(
{
"try_mode" :
"try_task_config" ,
"try_task_config" : {
"rebuild" :
0 ,
"tasks" : [
"a-*" ],
},
"project" :
"try" ,
},
{
"a-1" : -
1 ,
"a-2" : -
1 },
id=
"rebuild of zero" ,
),
pytest.param(
{
"try_mode" :
"try_task_config" ,
"try_task_config" : {
"rebuild" :
100 ,
"tasks" : [
"a-*" ],
},
"project" :
"try" ,
},
{
"a-1" :
100 ,
"a-2" :
100 },
id=
"rebuild 100" ,
),
),
)
def test_try_task_duplicates(make_taskgraph, graph_config, params, expected):
taskb = Task(kind=
"test" , label=
"b" , attributes={}, task={})
task1 = Task(kind=
"test" , label=
"a-1" , attributes={}, task={})
task2 = Task(kind=
"test" , label=
"a-2" , attributes={}, task={})
taskgraph, label_to_taskid = make_taskgraph({
taskb.label: taskb,
task1.label: task1,
task2.label: task2,
})
taskgraph, label_to_taskid = morph.add_try_task_duplicates(
taskgraph, label_to_taskid, params, graph_config
)
for label
in expected:
task = taskgraph.tasks[label]
assert task.attributes.get(
"task_duplicates" , -
1 ) == expected[label]
def test_make_index_tasks(make_taskgraph, graph_config):
task_def = {
"routes" : [
"index.gecko.v2.mozilla-central.latest.firefox-l10n.linux64-opt.es-MX" ,
"index.gecko.v2.mozilla-central.latest.firefox-l10n.linux64-opt.fy-NL" ,
"index.gecko.v2.mozilla-central.latest.firefox-l10n.linux64-opt.sk" ,
"index.gecko.v2.mozilla-central.latest.firefox-l10n.linux64-opt.sl" ,
"index.gecko.v2.mozilla-central.latest.firefox-l10n.linux64-opt.uk" ,
"index.gecko.v2.mozilla-central.latest.firefox-l10n.linux64-opt.zh-CN" ,
"index.gecko.v2.mozilla-central.pushdate."
"2017.04.04.20170404100210.firefox-l10n.linux64-opt.es-MX" ,
"index.gecko.v2.mozilla-central.pushdate."
"2017.04.04.20170404100210.firefox-l10n.linux64-opt.fy-NL" ,
"index.gecko.v2.mozilla-central.pushdate."
"2017.04.04.20170404100210.firefox-l10n.linux64-opt.sk" ,
"index.gecko.v2.mozilla-central.pushdate."
"2017.04.04.20170404100210.firefox-l10n.linux64-opt.sl" ,
"index.gecko.v2.mozilla-central.pushdate."
"2017.04.04.20170404100210.firefox-l10n.linux64-opt.uk" ,
"index.gecko.v2.mozilla-central.pushdate."
"2017.04.04.20170404100210.firefox-l10n.linux64-opt.zh-CN" ,
"index.gecko.v2.mozilla-central.revision."
"b5d8b27a753725c1de41ffae2e338798f3b5cacd.firefox-l10n.linux64-opt.es-MX" ,
"index.gecko.v2.mozilla-central.revision."
"b5d8b27a753725c1de41ffae2e338798f3b5cacd.firefox-l10n.linux64-opt.fy-NL" ,
"index.gecko.v2.mozilla-central.revision."
"b5d8b27a753725c1de41ffae2e338798f3b5cacd.firefox-l10n.linux64-opt.sk" ,
"index.gecko.v2.mozilla-central.revision."
"b5d8b27a753725c1de41ffae2e338798f3b5cacd.firefox-l10n.linux64-opt.sl" ,
"index.gecko.v2.mozilla-central.revision."
"b5d8b27a753725c1de41ffae2e338798f3b5cacd.firefox-l10n.linux64-opt.uk" ,
"index.gecko.v2.mozilla-central.revision."
"b5d8b27a753725c1de41ffae2e338798f3b5cacd.firefox-l10n.linux64-opt.zh-CN" ,
],
"deadline" :
"soon" ,
"metadata" : {
"description" :
"desc" ,
"owner" :
"owner@foo.com" ,
"source" :
"https://source " ,
},
"extra" : {
"index" : {
"rank" :
1540722354 },
},
}
task = Task(kind=
"test" , label=
"a" , attributes={}, task=task_def)
docker_task = Task(
kind=
"docker-image" , label=
"docker-image-index-task" , attributes={}, task={}
)
taskgraph, label_to_taskid = make_taskgraph({
task.label: task,
docker_task.label: docker_task,
})
index_paths = [
r.split(
"." ,
1 )[
1 ]
for r
in task_def[
"routes" ]
if r.startswith(
"index." )
]
index_task = morph.make_index_task(
task,
taskgraph,
label_to_taskid,
Parameters(strict=
False ),
graph_config,
index_paths=index_paths,
index_rank=
1540722354 ,
purpose=
"index-task" ,
dependencies={},
)
assert index_task.task[
"payload" ][
"command" ][
0 ] ==
"insert-indexes.js"
assert index_task.task[
"payload" ][
"env" ][
"TARGET_TASKID" ] ==
"a-tid"
assert index_task.task[
"payload" ][
"env" ][
"INDEX_RANK" ] ==
"1540722354"
# check the scope summary
assert index_task.task[
"scopes" ] == [
"index:insert-task:gecko.v2.mozilla-central.*" ]
@pytest.mark.parametrize(
"has_ccov,expected_task_added" ,
(
pytest.param(True , True , id="with ccov tasks" ),
pytest.param(False , False , id="without ccov tasks" ),
),
)
def test_add_code_coverage_task(
make_taskgraph, graph_config, has_ccov, expected_task_added
):
tasks = {}
if has_ccov:
tasks["ccov-test-1" ] = Task(
kind="test" ,
label="ccov-test-1" ,
attributes={"ccov" : True },
task={},
)
tasks["ccov-test-2" ] = Task(
kind="test" ,
label="ccov-test-2" ,
attributes={"ccov" : True },
task={},
)
tasks["non-ccov" ] = Task(
kind="test" ,
label="non-ccov" ,
attributes={},
task={},
)
taskgraph, label_to_taskid = make_taskgraph(tasks)
params = Parameters(
strict=False ,
owner="test@example.com" ,
head_repository="https://hg.mozilla.org/mozilla-central " ,
)
taskgraph, label_to_taskid = morph.add_code_coverage_task(
taskgraph, label_to_taskid, params, graph_config
)
assert ("code-coverage-artifacts" in label_to_taskid) == expected_task_added
if expected_task_added:
task = taskgraph.tasks[label_to_taskid["code-coverage-artifacts" ]]
assert task.task["routes" ] == ["project.codecoverage.v1.tasks_done" ]
assert task.task["requires" ] == "all-resolved"
assert set(task.dependencies.keys()) == {"ccov-test-1" , "ccov-test-2" }
if __name__ == "__main__" :
main()
Messung V0.5 in Prozent C=99 H=84 G=91
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-08-22)
¤
*© Formatika GbR, Deutschland