summaryrefslogtreecommitdiff
path: root/buildscripts/tests/test_fetch_test_lifecycle.py
blob: 25fac72766ba7a3d78fe171fc0068adc8e17e970 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""Unit tests for the fetch_test_lifecycle.py script."""
from __future__ import absolute_import

import unittest

import buildscripts.fetch_test_lifecycle as fetch


class TestFetchTestLifecycle(unittest.TestCase):
    def test_get_metadata_revision(self):
        metadata_repo = MockMetadataRepository(
            [("metadata_revision_05", "mongo_revision_06"),
             ("metadata_revision_04", "mongo_revision_06"), ("metadata_revision_03",
                                                             "mongo_revision_02"),
             ("metadata_revision_02", "mongo_revision_02"), ("metadata_revision_01", None)])

        mongo_repo = MockMongoRepository([
            "mongo_revision_07", "mongo_revision_06", "mongo_revision_05", "mongo_revision_04",
            "mongo_revision_03", "mongo_revision_02", "mongo_revision_01"
        ])

        self._check_metadata_revision(metadata_repo, mongo_repo, "mongo_revision_07",
                                      "metadata_revision_05")

        self._check_metadata_revision(metadata_repo, mongo_repo, "mongo_revision_06",
                                      "metadata_revision_05")

        self._check_metadata_revision(metadata_repo, mongo_repo, "mongo_revision_05",
                                      "metadata_revision_03")

        self._check_metadata_revision(metadata_repo, mongo_repo, "mongo_revision_04",
                                      "metadata_revision_03")

        self._check_metadata_revision(metadata_repo, mongo_repo, "mongo_revision_03",
                                      "metadata_revision_03")

        self._check_metadata_revision(metadata_repo, mongo_repo, "mongo_revision_02",
                                      "metadata_revision_03")

        self._check_metadata_revision(metadata_repo, mongo_repo, "mongo_revision_01", None)

    def _check_metadata_revision(self, metadata_repo, mongo_repo, mongo_revision,
                                 expected_metadata_revision):
        metadata_revision = fetch._get_metadata_revision(metadata_repo, mongo_repo, "project",
                                                         mongo_revision)
        self.assertEqual(expected_metadata_revision, metadata_revision)


class MockMongoRepository(object):
    def __init__(self, revisions):
        self.revisions = revisions

    def is_ancestor(self, parent, child):
        return (parent in self.revisions and child in self.revisions
                and self.revisions.index(parent) >= self.revisions.index(child))


class MockMetadataRepository(object):
    def __init__(self, references_revisions):
        self.references_revisions = references_revisions

    def list_revisions(self):
        return [r[0] for r in self.references_revisions]

    def get_reference(self, revision, project):
        for (metadata_revision, mongo_revision) in self.references_revisions:
            if metadata_revision == revision:
                return mongo_revision
        return None