~bzr-pqm/bzr/bzr.dev

6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2006-2011, 2016 Canonical Ltd
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
2
# Authors: Robert Collins <robert.collins@canonical.com>
3
# -*- coding: utf-8 -*-
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
4
#
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
9
#
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
14
#
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
17
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
18
19
20
"""InterRepository implementation tests for bzr.
21
22
These test the conformance of all the interrepository variations to the
23
expected API including generally applicable corner cases.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
24
Specific tests for individual formats are in the tests/test_repository.py file
4523.1.3 by Martin Pool
Rename to per_interrepository
25
rather than in tests/per_interrepository/*.py.
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
26
"""
27
3380.1.4 by Aaron Bentley
Split interrepository fetch tests into their own file
28
5676.1.9 by Jelmer Vernooij
Fix existing implementation.
29
from bzrlib import (
30
    pyutils,
31
    transport,
32
    )
3380.1.4 by Aaron Bentley
Split interrepository fetch tests into their own file
33
from bzrlib.errors import (
34
    FileExists,
35
    UninitializableFormat,
36
    )
37
2241.1.4 by Martin Pool
Moved old weave-based repository formats into bzrlib.repofmt.weaverepo.
38
from bzrlib.repository import (
5676.1.6 by Jelmer Vernooij
Add _ObjGetter.get_module.
39
    format_registry,
4257.3.8 by Andrew Bennetts
Fix TestCase.make_branch_builder to make a branch in the specified format. Also add an interrepo test scenario for KnitPack1 -> KnitPack6RichRoot, which fails.
40
    InterRepository,
41
    )
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
42
from bzrlib.tests import (
5651.3.1 by Jelmer Vernooij
Add RepositoryFormatRegistry.
43
    TestSkipped,
44
    default_transport,
45
    multiply_tests,
46
    )
5363.2.18 by Jelmer Vernooij
Rename TestCaseWithBzrDir -> TestCaseWithControlDir.
47
from bzrlib.tests.per_controldir.test_controldir import TestCaseWithControlDir
5815.4.1 by Jelmer Vernooij
Split versionedfile-specific stuff out into VersionedFileRepository.
48
from bzrlib.vf_repository import (
49
    InterDifferingSerializer,
50
    )
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
51
52
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
53
def make_scenarios(transport_server, transport_readonly_server, formats):
54
    """Transform the input formats to a list of scenarios.
2553.2.4 by Robert Collins
Treat InterRepositoryTestProviderAdapter like RepositoryTestProviderAdapter
55
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
56
    :param formats: A list of tuples:
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
57
        (label, repository_format, repository_format_to).
2553.2.4 by Robert Collins
Treat InterRepositoryTestProviderAdapter like RepositoryTestProviderAdapter
58
    """
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
59
    result = []
5050.32.1 by Andrew Bennetts
Fix fetching more than 100 revisions from non-rich-root to rich-root repositories.
60
    for label, repository_format, repository_format_to, extra_setup in formats:
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
61
        id = '%s,%s,%s' % (label, repository_format.__class__.__name__,
62
                           repository_format_to.__class__.__name__)
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
63
        scenario = (id,
64
            {"transport_server": transport_server,
65
             "transport_readonly_server": transport_readonly_server,
66
             "repository_format": repository_format,
67
             "repository_format_to": repository_format_to,
5050.32.1 by Andrew Bennetts
Fix fetching more than 100 revisions from non-rich-root to rich-root repositories.
68
             "extra_setup": extra_setup,
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
69
             })
70
        result.append(scenario)
71
    return result
72
73
74
def default_test_list():
75
    """Generate the default list of interrepo permutations to test."""
4476.3.4 by Andrew Bennetts
Network serialisation, and most tests passing with InterDifferingSerializer commented out.
76
    from bzrlib.repofmt import (
4597.1.3 by John Arbash Meinel
Add a conversion to 2a format to make sure things get tested, see that it is now failing the inventories test.
77
        groupcompress_repo,
78
        knitrepo,
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
79
        knitpack_repo,
4476.3.4 by Andrew Bennetts
Network serialisation, and most tests passing with InterDifferingSerializer commented out.
80
        )
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
81
    result = []
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
82
    def add_combo(interrepo_cls, from_format, to_format, extra_setup=None,
83
                  label=None):
84
        if label is None:
85
            label = interrepo_cls.__name__
5050.32.1 by Andrew Bennetts
Fix fetching more than 100 revisions from non-rich-root to rich-root repositories.
86
        result.append((label, from_format, to_format, extra_setup))
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
87
    # test the default InterRepository between format 6 and the current
88
    # default format.
89
    # XXX: robertc 20060220 reinstate this when there are two supported
90
    # formats which do not have an optimal code path between them.
91
    #result.append((InterRepository,
92
    #               RepositoryFormat6(),
93
    #               RepositoryFormatKnit1()))
94
    for optimiser_class in InterRepository._optimisers:
95
        format_to_test = optimiser_class._get_repo_format_to_test()
96
        if format_to_test is not None:
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
97
            add_combo(optimiser_class, format_to_test, format_to_test)
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
98
    # if there are specific combinations we want to use, we can add them
99
    # here. We want to test rich root upgrading.
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
100
    # XXX: although we attach InterRepository class names to these scenarios,
4476.3.83 by Andrew Bennetts
Fix typo in comment.
101
    # there's nothing asserting that these labels correspond to what is
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
102
    # actually used.
5050.32.1 by Andrew Bennetts
Fix fetching more than 100 revisions from non-rich-root to rich-root repositories.
103
    def force_known_graph(testcase):
104
        from bzrlib.fetch import Inter1and2Helper
105
        testcase.overrideAttr(Inter1and2Helper, 'known_graph_threshold', -1)
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
106
    # Gather extra scenarios from the repository implementations,
107
    # as InterRepositories can be used by Repository implementations
108
    # they aren't aware of.
5676.1.9 by Jelmer Vernooij
Fix existing implementation.
109
    for module_name in format_registry._get_all_modules():
110
        module = pyutils.get_named_object(module_name)
5676.1.3 by Jelmer Vernooij
Move interrepo extra combinations function to module level.
111
        try:
5676.1.9 by Jelmer Vernooij
Fix existing implementation.
112
            get_extra_interrepo_test_combinations = getattr(
113
                module,
5676.1.3 by Jelmer Vernooij
Move interrepo extra combinations function to module level.
114
                "get_extra_interrepo_test_combinations")
115
        except AttributeError:
116
            continue
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
117
        for (interrepo_cls, from_format, to_format) in (
5676.1.3 by Jelmer Vernooij
Move interrepo extra combinations function to module level.
118
            get_extra_interrepo_test_combinations()):
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
119
            add_combo(interrepo_cls, from_format, to_format)
120
    add_combo(InterRepository,
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
121
              knitrepo.RepositoryFormatKnit1(),
122
              knitrepo.RepositoryFormatKnit3())
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
123
    add_combo(knitrepo.InterKnitRepo,
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
124
              knitrepo.RepositoryFormatKnit1(),
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
125
              knitpack_repo.RepositoryFormatKnitPack1())
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
126
    add_combo(knitrepo.InterKnitRepo,
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
127
              knitpack_repo.RepositoryFormatKnitPack1(),
4476.3.10 by Andrew Bennetts
Fix streaming of inventory records in get_stream_for_missing_keys, plus other tweaks.
128
              knitrepo.RepositoryFormatKnit1())
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
129
    add_combo(knitrepo.InterKnitRepo,
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
130
              knitrepo.RepositoryFormatKnit3(),
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
131
              knitpack_repo.RepositoryFormatKnitPack3())
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
132
    add_combo(knitrepo.InterKnitRepo,
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
133
              knitpack_repo.RepositoryFormatKnitPack3(),
4476.3.10 by Andrew Bennetts
Fix streaming of inventory records in get_stream_for_missing_keys, plus other tweaks.
134
              knitrepo.RepositoryFormatKnit3())
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
135
    add_combo(knitrepo.InterKnitRepo,
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
136
              knitpack_repo.RepositoryFormatKnitPack3(),
137
              knitpack_repo.RepositoryFormatKnitPack4())
138
    add_combo(InterDifferingSerializer,
139
              knitpack_repo.RepositoryFormatKnitPack1(),
140
              knitpack_repo.RepositoryFormatKnitPack6RichRoot())
141
    add_combo(InterDifferingSerializer,
142
              knitpack_repo.RepositoryFormatKnitPack1(),
143
              knitpack_repo.RepositoryFormatKnitPack6RichRoot(),
5050.32.1 by Andrew Bennetts
Fix fetching more than 100 revisions from non-rich-root to rich-root repositories.
144
              force_known_graph,
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
145
              label='InterDifferingSerializer+get_known_graph_ancestry')
146
    add_combo(InterDifferingSerializer,
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
147
              knitpack_repo.RepositoryFormatKnitPack6RichRoot(),
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
148
              groupcompress_repo.RepositoryFormat2a())
5676.1.1 by Jelmer Vernooij
Add RepositoryFormat._get_extra_interrepo_test_combinations.
149
    add_combo(InterDifferingSerializer,
4476.3.75 by Andrew Bennetts
Restore InterRepo class names in per_interrepo test ids, but make it clear they are just labels and not actually part of the scenario.
150
              groupcompress_repo.RepositoryFormat2a(),
5757.1.2 by Jelmer Vernooij
Add separate file for knit pack repository formats.
151
              knitpack_repo.RepositoryFormatKnitPack6RichRoot())
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
152
    return result
2553.2.4 by Robert Collins
Treat InterRepositoryTestProviderAdapter like RepositoryTestProviderAdapter
153
154
5363.2.18 by Jelmer Vernooij
Rename TestCaseWithBzrDir -> TestCaseWithControlDir.
155
class TestCaseWithInterRepository(TestCaseWithControlDir):
3380.1.4 by Aaron Bentley
Split interrepository fetch tests into their own file
156
157
    def setUp(self):
158
        super(TestCaseWithInterRepository, self).setUp()
5050.32.1 by Andrew Bennetts
Fix fetching more than 100 revisions from non-rich-root to rich-root repositories.
159
        if self.extra_setup:
160
            self.extra_setup(self)
3380.1.4 by Aaron Bentley
Split interrepository fetch tests into their own file
161
6155.6.9 by Jelmer Vernooij
Remove unnecessary definition of make_branch_and_tree.
162
    def get_default_format(self):
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
163
        self.assertEqual(
6155.6.9 by Jelmer Vernooij
Remove unnecessary definition of make_branch_and_tree.
164
            self.repository_format._matchingbzrdir.repository_format,
165
            self.repository_format)
166
        return self.repository_format._matchingbzrdir
167
3380.1.4 by Aaron Bentley
Split interrepository fetch tests into their own file
168
    def make_branch(self, relpath, format=None):
169
        repo = self.make_repository(relpath, format=format)
170
        return repo.bzrdir.create_branch()
171
172
    def make_bzrdir(self, relpath, format=None):
173
        try:
174
            url = self.get_url(relpath)
175
            segments = url.split('/')
176
            if segments and segments[-1] not in ('', '.'):
177
                parent = '/'.join(segments[:-1])
5273.1.7 by Vincent Ladeuil
No more use of the get_transport imported *symbol*, all uses are through
178
                t = transport.get_transport(parent)
3380.1.4 by Aaron Bentley
Split interrepository fetch tests into their own file
179
                try:
180
                    t.mkdir(segments[-1])
181
                except FileExists:
182
                    pass
183
            if format is None:
184
                format = self.repository_format._matchingbzrdir
185
            return format.initialize(url)
186
        except UninitializableFormat:
187
            raise TestSkipped("Format %s is not initializable." % format)
188
189
    def make_repository(self, relpath, format=None):
190
        made_control = self.make_bzrdir(relpath, format=format)
191
        return self.repository_format.initialize(made_control)
192
193
    def make_to_repository(self, relpath):
194
        made_control = self.make_bzrdir(relpath,
195
            self.repository_format_to._matchingbzrdir)
196
        return self.repository_format_to.initialize(made_control)
197
198
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
199
def load_tests(standard_tests, module, loader):
200
    submod_tests = loader.loadTestsFromModuleNames([
4523.1.3 by Martin Pool
Rename to per_interrepository
201
        'bzrlib.tests.per_interrepository.test_fetch',
202
        'bzrlib.tests.per_interrepository.test_interrepository',
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
203
        ])
204
    scenarios = make_scenarios(
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
205
        default_transport,
206
        # None here will cause a readonly decorator to be created
207
        # by the TestCaseWithTransport.get_readonly_transport method.
208
        None,
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
209
        default_test_list()
1534.1.29 by Robert Collins
Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.
210
        )
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
211
    return multiply_tests(submod_tests, scenarios, standard_tests)