/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2220.2.17 by Martin Pool
merge up from bzr.dev to get metadir changes
1
# Copyright (C) 2006, 2007 Canonical Ltd
1534.4.24 by Robert Collins
update (C) on branch_implementations/__init__.py
2
# Authors: Robert Collins <robert.collins@canonical.com>
2220.2.17 by Martin Pool
merge up from bzr.dev to get metadir changes
3
#          and others
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
4
#
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
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.4.23 by Robert Collins
Move branch implementations tests into a package.
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.4.23 by Robert Collins
Move branch implementations tests into a package.
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
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
19
20
"""Branch implementation tests for bzr.
21
22
These test the conformance of all the branch variations to the expected API.
23
Specific tests for individual formats are in the tests/test_branch file 
24
rather than in tests/branch_implementations/*.py.
25
"""
26
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
27
from bzrlib import (
28
    errors,
29
    tests,
30
    )
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
31
from bzrlib.branch import (BranchFormat,
32
                           _legacy_formats,
33
                           )
2418.5.11 by John Arbash Meinel
[merge] bzr.dev 2447
34
from bzrlib.remote import RemoteBranchFormat, RemoteBzrDirFormat
2018.5.167 by Andrew Bennetts
Various changes in response to John's review.
35
from bzrlib.smart.server import (
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
36
    ReadonlySmartTCPServer_for_testing,
37
    ReadonlySmartTCPServer_for_testing_v2_only,
2018.5.167 by Andrew Bennetts
Various changes in response to John's review.
38
    SmartTCPServer_for_testing,
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
39
    SmartTCPServer_for_testing_v2_only,
2018.5.167 by Andrew Bennetts
Various changes in response to John's review.
40
    )
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
41
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
2018.5.167 by Andrew Bennetts
Various changes in response to John's review.
42
from bzrlib.transport.memory import MemoryServer
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
43
44
2553.2.6 by Robert Collins
And overhaul BranchTestProviderAdapter too.
45
class BranchTestProviderAdapter(tests.TestScenarioApplier):
46
    """A tool to generate a suite testing multiple branch formats at once.
47
48
    This is done by copying the test once for each transport and injecting
49
    the transport_server, transport_readonly_server, and branch_format
50
    classes into each copy. Each copy is also given a new id() to make it
51
    easy to identify.
52
    """
53
54
    def __init__(self, transport_server, transport_readonly_server, formats,
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
55
        vfs_transport_factory=None, name_suffix=''):
2553.2.6 by Robert Collins
And overhaul BranchTestProviderAdapter too.
56
        self._transport_server = transport_server
57
        self._transport_readonly_server = transport_readonly_server
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
58
        self._name_suffix = name_suffix
2553.2.6 by Robert Collins
And overhaul BranchTestProviderAdapter too.
59
        self.scenarios = self.formats_to_scenarios(formats)
60
    
61
    def formats_to_scenarios(self, formats):
62
        """Transform the input formats to a list of scenarios.
63
64
        :param formats: A list of (branch_format, bzrdir_format).
65
        """
66
        result = []
67
        for branch_format, bzrdir_format in formats:
68
            # some branches don't have separate format objects.
69
            # so we have a conditional here to handle them.
70
            scenario_name = getattr(branch_format, '__name__',
71
                branch_format.__class__.__name__)
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
72
            scenario_name += self._name_suffix
2553.2.6 by Robert Collins
And overhaul BranchTestProviderAdapter too.
73
            scenario = (scenario_name, {
74
                "transport_server":self._transport_server,
75
                "transport_readonly_server":self._transport_readonly_server,
76
                "bzrdir_format":bzrdir_format,
77
                "branch_format":branch_format,
78
                    })
79
            result.append(scenario)
80
        return result
81
82
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
83
class TestCaseWithBranch(TestCaseWithBzrDir):
84
    """This helper will be adapted for each branch_implementation test."""
85
86
    def setUp(self):
87
        super(TestCaseWithBranch, self).setUp()
88
        self.branch = None
89
90
    def get_branch(self):
91
        if self.branch is None:
92
            self.branch = self.make_branch('')
93
        return self.branch
94
95
    def make_branch(self, relpath, format=None):
96
        repo = self.make_repository(relpath, format=format)
97
        # fixme RBC 20060210 this isnt necessarily a fixable thing,
98
        # Skipped is the wrong exception to raise.
99
        try:
100
            return self.branch_format.initialize(repo.bzrdir)
101
        except errors.UninitializableFormat:
102
            raise tests.TestSkipped('Uninitializable branch format')
103
3904.3.4 by Andrew Bennetts
First cut of a branch_implementations test. It fails.
104
    def make_branch_builder(self, relpath, format=None):
105
        if format is None:
106
            format = self.branch_format._matchingbzrdir
107
        return super(TestCaseWithBranch, self).make_branch_builder(
108
            relpath, format=format)
109
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
110
    def make_repository(self, relpath, shared=False, format=None):
111
        made_control = self.make_bzrdir(relpath, format=format)
112
        return made_control.create_repository(shared=shared)
113
114
    def create_tree_with_merge(self):
115
        """Create a branch with a simple ancestry.
116
117
        The graph should look like:
118
            digraph H {
119
                "rev-1" -> "rev-2" -> "rev-3";
120
                "rev-1" -> "rev-1.1.1" -> "rev-3";
121
            }
122
123
        Or in ASCII:
2418.5.14 by John Arbash Meinel
clean up ASCII revision graph art.
124
            1
125
            |\
126
            2 1.1.1
127
            |/
128
            3
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
129
        """
130
        tree = self.make_branch_and_memory_tree('tree')
131
        tree.lock_write()
132
        try:
133
            tree.add('')
134
            tree.commit('first', rev_id='rev-1')
2418.5.3 by John Arbash Meinel
Use a more straightforward implementation of generating 'tree_with_merge'
135
            tree.commit('second', rev_id='rev-1.1.1')
2418.5.10 by John Arbash Meinel
fix typo
136
            # Uncommit that last commit and switch to the other line
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
137
            tree.branch.set_last_revision_info(1, 'rev-1')
138
            tree.set_parent_ids(['rev-1'])
2418.5.3 by John Arbash Meinel
Use a more straightforward implementation of generating 'tree_with_merge'
139
            tree.commit('alt-second', rev_id='rev-2')
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
140
            tree.set_parent_ids(['rev-2', 'rev-1.1.1'])
141
            tree.commit('third', rev_id='rev-3')
142
        finally:
143
            tree.unlock()
144
145
        return tree
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
146
1534.4.24 by Robert Collins
update (C) on branch_implementations/__init__.py
147
3302.9.7 by Vincent Ladeuil
bzrlib.tests.branch_implementations switched from test_suite() to load_tests().
148
def load_tests(basic_tests, module, loader):
149
    result = loader.suiteClass()
150
    # add the tests for this module
151
    result.addTests(basic_tests)
152
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
153
    test_branch_implementations = [
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
154
        'bzrlib.tests.branch_implementations.test_bound_sftp',
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
155
        'bzrlib.tests.branch_implementations.test_branch',
1687.1.8 by Robert Collins
Teach Branch about break_lock.
156
        'bzrlib.tests.branch_implementations.test_break_lock',
3389.2.1 by John Arbash Meinel
Add code to 'bzr check' to detect when the mainline history is inconsistent.
157
        'bzrlib.tests.branch_implementations.test_check',
2370.3.1 by John Arbash Meinel
(John Arbash Meinel) Fix bug #93854, make 'bzr checkout' create branches in the same format as the source.
158
        'bzrlib.tests.branch_implementations.test_create_checkout',
2246.1.3 by Robert Collins
New branch hooks: post_push, post_pull, post_commit, post_uncommit. These
159
        'bzrlib.tests.branch_implementations.test_commit',
3949.2.2 by Ian Clatworthy
add interface test and NEWS item
160
        'bzrlib.tests.branch_implementations.test_dotted_revno_to_revision_id',
2418.5.7 by John Arbash Meinel
Move the revision_id=>map generation to be a public function.
161
        'bzrlib.tests.branch_implementations.test_get_revision_id_to_revno_map',
2245.1.1 by Robert Collins
New Branch hooks facility, with one initial hook 'set_rh' which triggers
162
        'bzrlib.tests.branch_implementations.test_hooks',
1864.7.3 by John Arbash Meinel
Test that the right thing happens when clone/sprout is done with an invalid parent
163
        'bzrlib.tests.branch_implementations.test_http',
3949.3.2 by Ian Clatworthy
feedback from jam
164
        'bzrlib.tests.branch_implementations.test_iter_merge_sorted_revisions',
2249.4.1 by Wouter van Heyst
New Branch.last_revision_info method, this is being done to allow
165
        'bzrlib.tests.branch_implementations.test_last_revision_info',
1711.8.5 by John Arbash Meinel
Move the new locking tests into their own files, and move the helper functions into a test helper.
166
        'bzrlib.tests.branch_implementations.test_locking',
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
167
        'bzrlib.tests.branch_implementations.test_parent',
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
168
        'bzrlib.tests.branch_implementations.test_permissions',
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
169
        'bzrlib.tests.branch_implementations.test_pull',
2375.1.5 by Andrew Bennetts
Deal with review comments from Robert:
170
        'bzrlib.tests.branch_implementations.test_push',
3389.2.3 by John Arbash Meinel
Add Branch.reconcile() functionality.
171
        'bzrlib.tests.branch_implementations.test_reconcile',
2375.1.5 by Andrew Bennetts
Deal with review comments from Robert:
172
        'bzrlib.tests.branch_implementations.test_revision_history',
3949.2.3 by Ian Clatworthy
add Branch.revision_id_to_dotted_revno()
173
        'bzrlib.tests.branch_implementations.test_revision_id_to_dotted_revno',
2418.5.1 by John Arbash Meinel
Make a Branch helper which can create a very basic MemoryTree with history.
174
        'bzrlib.tests.branch_implementations.test_revision_id_to_revno',
2524.1.1 by Aaron Bentley
Revert broken changes
175
        'bzrlib.tests.branch_implementations.test_sprout',
3221.11.2 by Robert Collins
Create basic stackable branch facility.
176
        'bzrlib.tests.branch_implementations.test_stacking',
2220.2.13 by mbp at sourcefrog
reconnect and fix up lower-level tests for tags
177
        'bzrlib.tests.branch_implementations.test_tags',
2246.1.3 by Robert Collins
New branch hooks: post_push, post_pull, post_commit, post_uncommit. These
178
        'bzrlib.tests.branch_implementations.test_uncommit',
1587.1.10 by Robert Collins
update updates working tree and branch together.
179
        'bzrlib.tests.branch_implementations.test_update',
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
180
        ]
2018.11.2 by Andrew Bennetts
Hookup RemoteBranch for testing by bzrlib/tests/branch_implementations tests.
181
    # Generate a list of branch formats and their associated bzrdir formats to
182
    # use.
1752.2.31 by Martin Pool
[broken] some support for write operations over hpss
183
    combinations = [(format, format._matchingbzrdir) for format in 
184
         BranchFormat._formats.values() + _legacy_formats]
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
185
    adapter = BranchTestProviderAdapter(
2018.5.114 by Robert Collins
Commit current test pass improvements.
186
        # None here will cause the default vfs transport server to be used.
187
        None,
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
188
        # None here will cause a readonly decorator to be created
189
        # by the TestCaseWithTransport.get_readonly_transport method.
190
        None,
1752.2.31 by Martin Pool
[broken] some support for write operations over hpss
191
        combinations)
3302.9.27 by Vincent Ladeuil
Fixed as per Ian's review.
192
    # add the tests for the sub modules
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
193
    tests.adapt_modules(test_branch_implementations, adapter, loader, result)
2018.11.2 by Andrew Bennetts
Hookup RemoteBranch for testing by bzrlib/tests/branch_implementations tests.
194
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
195
    # Add RemoteBranch tests, which need a special server.
3834.5.2 by John Arbash Meinel
Track down the various BranchFormats that weren't setting the branch format as part of the _matchingbzrdir format.
196
    remote_branch_format = RemoteBranchFormat()
2018.11.2 by Andrew Bennetts
Hookup RemoteBranch for testing by bzrlib/tests/branch_implementations tests.
197
    adapt_to_smart_server = BranchTestProviderAdapter(
198
        SmartTCPServer_for_testing,
199
        ReadonlySmartTCPServer_for_testing,
3834.5.2 by John Arbash Meinel
Track down the various BranchFormats that weren't setting the branch format as part of the _matchingbzrdir format.
200
        [(remote_branch_format, remote_branch_format._matchingbzrdir)],
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
201
        MemoryServer,
202
        name_suffix='-default')
203
    tests.adapt_modules(test_branch_implementations,
204
                        adapt_to_smart_server,
205
                        loader,
206
                        result)
207
208
    # Also add tests for RemoteBranch with HPSS protocol v2 (i.e. bzr <1.6)
209
    # server.
210
    adapt_to_smart_server = BranchTestProviderAdapter(
211
        SmartTCPServer_for_testing_v2_only,
212
        ReadonlySmartTCPServer_for_testing_v2_only,
3834.5.2 by John Arbash Meinel
Track down the various BranchFormats that weren't setting the branch format as part of the _matchingbzrdir format.
213
        [(remote_branch_format, remote_branch_format._matchingbzrdir)],
3453.5.1 by Andrew Bennetts
Add {bzrdir,repository,branch}_implementations tests for Remote objects using protocol v2 and pre-1.6 RPCs.
214
        MemoryServer,
215
        name_suffix='-v2')
2418.5.11 by John Arbash Meinel
[merge] bzr.dev 2447
216
    tests.adapt_modules(test_branch_implementations,
217
                        adapt_to_smart_server,
218
                        loader,
219
                        result)
2018.11.2 by Andrew Bennetts
Hookup RemoteBranch for testing by bzrlib/tests/branch_implementations tests.
220
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
221
    return result