gecko-dev/taskcluster/taskgraph/test/test_taskgraph.py
Mike Hommey f6f42d4f18 Bug 1334401 - Prefer docker images from higher levels. r=jonasfj
Considering docker images contents depend very much on the moment they
were built, it is possible that two images with the same hash in the
taskcluster index (at different levels) have different contents. When
this happens, the build or test results could be significantly
different between e.g. try and mozilla-central, possibly leading to
misleading results at landing time.

So if for some reason multiple levels have images for the same hash, the
one used at the highest level should be prefered, such that try uses the
same as mozilla-central once mozilla-central generates the image for
that hash, even if there is an image previously generated for try.

--HG--
extra : rebase_source : 57f593a530da02f9f576872404915c26af544688
2017-01-27 16:18:02 +09:00

55 lines
1.8 KiB
Python

# 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/.
from __future__ import absolute_import, print_function, unicode_literals
import unittest
from ..graph import Graph
from ..task.docker_image import DockerImageTask
from ..task.transform import TransformTask
from ..taskgraph import TaskGraph
from mozunit import main
from taskgraph.util.docker import INDEX_PREFIX
class TestTargetTasks(unittest.TestCase):
def test_from_json(self):
task = {
"routes": [],
"extra": {
"imageMeta": {
"contextHash": "<hash>",
"imageName": "<image>",
"level": "1"
}
}
}
index_paths = ["{}.level-{}.<image>.hash.<hash>".format(INDEX_PREFIX, level)
for level in reversed(range(1, 4))]
graph = TaskGraph(tasks={
'a': TransformTask(
kind='fancy',
task={
'label': 'a',
'attributes': {},
'dependencies': {},
'when': {},
'task': {'task': 'def'},
}),
'b': DockerImageTask(kind='docker-image',
label='b',
attributes={},
task=task,
index_paths=index_paths),
}, graph=Graph(nodes={'a', 'b'}, edges=set()))
tasks, new_graph = TaskGraph.from_json(graph.to_json())
self.assertEqual(graph.tasks['a'], new_graph.tasks['a'])
self.assertEqual(graph, new_graph)
if __name__ == '__main__':
main()