~bzr-pqm/bzr/bzr.dev

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
                           BranchTestProviderAdapter,
33
                           _legacy_formats,
34
                           )
2418.5.11 by John Arbash Meinel
[merge] bzr.dev 2447
35
from bzrlib.remote import RemoteBranchFormat, RemoteBzrDirFormat
2018.5.167 by Andrew Bennetts
Various changes in response to John's review.
36
from bzrlib.smart.server import (
37
    SmartTCPServer_for_testing,
38
    ReadonlySmartTCPServer_for_testing,
39
    )
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
40
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
2018.5.167 by Andrew Bennetts
Various changes in response to John's review.
41
from bzrlib.transport.memory import MemoryServer
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
42
43
44
class TestCaseWithBranch(TestCaseWithBzrDir):
45
    """This helper will be adapted for each branch_implementation test."""
46
47
    def setUp(self):
48
        super(TestCaseWithBranch, self).setUp()
49
        self.branch = None
50
51
    def get_branch(self):
52
        if self.branch is None:
53
            self.branch = self.make_branch('')
54
        return self.branch
55
56
    def make_branch(self, relpath, format=None):
57
        repo = self.make_repository(relpath, format=format)
58
        # fixme RBC 20060210 this isnt necessarily a fixable thing,
59
        # Skipped is the wrong exception to raise.
60
        try:
61
            return self.branch_format.initialize(repo.bzrdir)
62
        except errors.UninitializableFormat:
63
            raise tests.TestSkipped('Uninitializable branch format')
64
65
    def make_repository(self, relpath, shared=False, format=None):
66
        made_control = self.make_bzrdir(relpath, format=format)
67
        return made_control.create_repository(shared=shared)
68
69
    def create_tree_with_merge(self):
70
        """Create a branch with a simple ancestry.
71
72
        The graph should look like:
73
            digraph H {
74
                "rev-1" -> "rev-2" -> "rev-3";
75
                "rev-1" -> "rev-1.1.1" -> "rev-3";
76
            }
77
78
        Or in ASCII:
2418.5.14 by John Arbash Meinel
clean up ASCII revision graph art.
79
            1
80
            |\
81
            2 1.1.1
82
            |/
83
            3
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
84
        """
85
        tree = self.make_branch_and_memory_tree('tree')
86
        tree.lock_write()
87
        try:
88
            tree.add('')
89
            tree.commit('first', rev_id='rev-1')
2418.5.3 by John Arbash Meinel
Use a more straightforward implementation of generating 'tree_with_merge'
90
            tree.commit('second', rev_id='rev-1.1.1')
2418.5.10 by John Arbash Meinel
fix typo
91
            # 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
92
            tree.branch.set_last_revision_info(1, 'rev-1')
93
            tree.set_parent_ids(['rev-1'])
2418.5.3 by John Arbash Meinel
Use a more straightforward implementation of generating 'tree_with_merge'
94
            tree.commit('alt-second', rev_id='rev-2')
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
95
            tree.set_parent_ids(['rev-2', 'rev-1.1.1'])
96
            tree.commit('third', rev_id='rev-3')
97
        finally:
98
            tree.unlock()
99
100
        return tree
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
101
1534.4.24 by Robert Collins
update (C) on branch_implementations/__init__.py
102
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
103
def test_suite():
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
104
    result = tests.TestSuite()
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
105
    test_branch_implementations = [
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
106
        'bzrlib.tests.branch_implementations.test_bound_sftp',
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
107
        'bzrlib.tests.branch_implementations.test_branch',
1687.1.8 by Robert Collins
Teach Branch about break_lock.
108
        'bzrlib.tests.branch_implementations.test_break_lock',
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.
109
        '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
110
        'bzrlib.tests.branch_implementations.test_commit',
2418.5.7 by John Arbash Meinel
Move the revision_id=>map generation to be a public function.
111
        '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
112
        '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
113
        'bzrlib.tests.branch_implementations.test_http',
2249.4.1 by Wouter van Heyst
New Branch.last_revision_info method, this is being done to allow
114
        '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.
115
        'bzrlib.tests.branch_implementations.test_locking',
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
116
        '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.
117
        'bzrlib.tests.branch_implementations.test_permissions',
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
118
        'bzrlib.tests.branch_implementations.test_pull',
2375.1.5 by Andrew Bennetts
Deal with review comments from Robert:
119
        'bzrlib.tests.branch_implementations.test_push',
120
        'bzrlib.tests.branch_implementations.test_revision_history',
2418.5.1 by John Arbash Meinel
Make a Branch helper which can create a very basic MemoryTree with history.
121
        'bzrlib.tests.branch_implementations.test_revision_id_to_revno',
2524.1.1 by Aaron Bentley
Revert broken changes
122
        'bzrlib.tests.branch_implementations.test_sprout',
2220.2.13 by mbp at sourcefrog
reconnect and fix up lower-level tests for tags
123
        'bzrlib.tests.branch_implementations.test_tags',
2246.1.3 by Robert Collins
New branch hooks: post_push, post_pull, post_commit, post_uncommit. These
124
        'bzrlib.tests.branch_implementations.test_uncommit',
1587.1.10 by Robert Collins
update updates working tree and branch together.
125
        'bzrlib.tests.branch_implementations.test_update',
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
126
        ]
2018.11.2 by Andrew Bennetts
Hookup RemoteBranch for testing by bzrlib/tests/branch_implementations tests.
127
    # Generate a list of branch formats and their associated bzrdir formats to
128
    # use.
1752.2.31 by Martin Pool
[broken] some support for write operations over hpss
129
    combinations = [(format, format._matchingbzrdir) for format in 
130
         BranchFormat._formats.values() + _legacy_formats]
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
131
    adapter = BranchTestProviderAdapter(
2018.5.114 by Robert Collins
Commit current test pass improvements.
132
        # None here will cause the default vfs transport server to be used.
133
        None,
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
134
        # None here will cause a readonly decorator to be created
135
        # by the TestCaseWithTransport.get_readonly_transport method.
136
        None,
1752.2.31 by Martin Pool
[broken] some support for write operations over hpss
137
        combinations)
2418.5.2 by John Arbash Meinel
Move TestCaseWithBranch into branch_implementations from test_branch.py
138
    loader = tests.TestLoader()
139
    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.
140
141
    adapt_to_smart_server = BranchTestProviderAdapter(
142
        SmartTCPServer_for_testing,
143
        ReadonlySmartTCPServer_for_testing,
144
        [(RemoteBranchFormat(), RemoteBzrDirFormat())],
145
        MemoryServer
146
        )
2418.5.11 by John Arbash Meinel
[merge] bzr.dev 2447
147
    tests.adapt_modules(test_branch_implementations,
148
                        adapt_to_smart_server,
149
                        loader,
150
                        result)
2018.11.2 by Andrew Bennetts
Hookup RemoteBranch for testing by bzrlib/tests/branch_implementations tests.
151
1534.4.23 by Robert Collins
Move branch implementations tests into a package.
152
    return result