~bzr/ubuntu/lucid/bzr/beta-ppa

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_branch/__init__.py

  • Committer: Martin Pool
  • Date: 2010-07-02 07:29:40 UTC
  • mfrom: (129.1.7 packaging-karmic)
  • Revision ID: mbp@sourcefrog.net-20100702072940-hpzq5elg8wjve8rh
* PPA rebuild.
* PPA rebuild for Karmic.
* PPA rebuild for Jaunty.
* PPA rebuild for Hardy.
* From postinst, actually remove the example bash completion scripts.
  (LP: #249452)
* New upstream release.
* New upstream release.
* New upstream release.
* Revert change to Build-depends: Dapper does not have python-central.
  Should be python-support..
* Target ppa..
* Target ppa..
* Target ppa..
* Target ppa..
* New upstream release.
* Switch to dpkg-source 3.0 (quilt) format.
* Bump standards version to 3.8.4.
* Remove embedded copy of python-configobj. Closes: #555336
* Remove embedded copy of python-elementtree. Closes: #555343
* Change section from 'Devel' to 'Vcs'..
* Change section from 'Devel' to 'Vcs'..
* Change section from 'Devel' to 'Vcs'..
* Change section from 'Devel' to 'Vcs'..
* Change section from 'Devel' to 'Vcs'..
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* debian/control: Fix obsolete-relation-form-in-source
  lintian warning. 
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Split out docs into bzr-doc package.
* New upstream release.
* Added John Francesco Ferlito to Uploaders.
* Fix install path to quick-reference guide
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Fix FTBFS due to path changes, again.
* Fix FTBFS due to doc paths changing
* New upstream release.
* Fix FTBFS due to path changes, again.
* Fix FTBFS due to doc paths changing
* New upstream release.
* Fix FTBFS due to path changes, again.
* Fix FTBFS due to doc paths changing
* New upstream release.
* Fix FTBFS due to path changes, again, again.
* Fix FTBFS due to path changes, again.
* Fix FTBFS due to path changes.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Bump standards version to 3.8.3.
* Remove unused patch system.
* New upstream release.
* New upstream release.
* New upstream release.
* Fix copy and paste tab error in .install file
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
 + Fixes compatibility with Python 2.4. Closes: #537708
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream version.
* Bump standards version to 3.8.2.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Add python-pyrex to build-deps to ensure C extensions are always build.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Split documentation into bzr-doc package. ((LP: #385074)
* Multiple packaging changes to make us more linitan clean.
* New upstream release.
* Split documentation into bzr-doc package. ((LP: #385074)
* Multiple packaging changes to make us more linitan clean.
* New upstream release.
* Split documentation into bzr-doc package. ((LP: #385074)
* Multiple packaging changes to make us more linitan clean.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Fix API compatibility version. (Closes: #526233)
* New upstream release.
  + Fixes default format for upgrade command. (Closes: #464688)
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Add missing dependency on zlib development library. (Closes:
  #523595)
* Add zlib build-depends.
* Add zlib build-depends.
* Add zlib build-depends.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Move to section vcs.
* Bump standards version to 3.8.1.
* New upstream release.
* Remove temporary patch for missing .c files from distribution
* New upstream release.
* Remove temporary patch for missing .c files from distribution
* New upstream release.
* Remove temporary patch for missing .c files from distribution
* Add temporary patch for missing .c files from distribution
* Add temporary patch for missing .c files from distribution
* Add temporary patch for missing .c files from distribution
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Recommend ca-certificates. (Closes: #452024)
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Update watch file. bazaar now uses launchpad to host its sources.
* Remove patch for inventory root revision copy, applied upstream.
* New upstream release.
* New upstream release.
* New upstream release
* Force removal of files installed in error to /etc/bash_completion.d/
  (LP: #249452)
* New upstream release.
* New upstream release
* New upstream release.
* Bump standards version.
* Include patch for inventory root revision copy, required for bzr-svn.
* New upstream release.
* Remove unused lintian overrides.
* Correct the package version not to be native.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* Final 1.5 release.
* New upstream release.
* New upstream release.
* New upstream release.
* Add myself as a co-maintainer.
* Add a Dm-Upload-Allowed: yes header.
* New upstream bugfix release.
* New upstream release.
* Final 1.3 release.
* New upstream release.
* First release candidate of the upcoming 1.3 release.
* Rebuild to fix the problem caused by a build with a broken python-central.
* New upstream release.
* Rebuild for dapper PPA.
* Apply Lamont's patches to fix build-dependencies on dapper.
  (See: https://bugs.launchpad.net/bzr/+bug/189915)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2006, 2007 Canonical Ltd
 
2
# Authors: Robert Collins <robert.collins@canonical.com>
 
3
#          and others
 
4
#
 
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.
 
9
#
 
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.
 
14
#
 
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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/per_branch/*.py.
 
25
"""
 
26
 
 
27
from bzrlib import (
 
28
    errors,
 
29
    tests,
 
30
    )
 
31
from bzrlib.branch import (BranchFormat,
 
32
                           _legacy_formats,
 
33
                           )
 
34
from bzrlib.remote import RemoteBranchFormat, RemoteBzrDirFormat
 
35
from bzrlib.smart.server import (
 
36
    ReadonlySmartTCPServer_for_testing,
 
37
    ReadonlySmartTCPServer_for_testing_v2_only,
 
38
    SmartTCPServer_for_testing,
 
39
    SmartTCPServer_for_testing_v2_only,
 
40
    )
 
41
from bzrlib.tests.per_bzrdir.test_bzrdir import TestCaseWithBzrDir
 
42
from bzrlib.transport.memory import MemoryServer
 
43
 
 
44
 
 
45
def make_scenarios(transport_server, transport_readonly_server,
 
46
    formats, vfs_transport_factory=None, name_suffix=''):
 
47
    """Transform the input formats to a list of scenarios.
 
48
 
 
49
    :param formats: A list of (branch_format, bzrdir_format).
 
50
    """
 
51
    result = []
 
52
    for branch_format, bzrdir_format in formats:
 
53
        # some branches don't have separate format objects.
 
54
        # so we have a conditional here to handle them.
 
55
        scenario_name = getattr(branch_format, '__name__',
 
56
            branch_format.__class__.__name__)
 
57
        scenario_name += name_suffix
 
58
        scenario = (scenario_name, {
 
59
            "transport_server":transport_server,
 
60
            "transport_readonly_server":transport_readonly_server,
 
61
            "bzrdir_format":bzrdir_format,
 
62
            "branch_format":branch_format,
 
63
                })
 
64
        result.append(scenario)
 
65
    return result
 
66
 
 
67
 
 
68
class TestCaseWithBranch(TestCaseWithBzrDir):
 
69
    """This helper will be parameterised in each branch_implementation test."""
 
70
 
 
71
    def setUp(self):
 
72
        super(TestCaseWithBranch, self).setUp()
 
73
        self.branch = None
 
74
 
 
75
    def get_branch(self):
 
76
        if self.branch is None:
 
77
            self.branch = self.make_branch('')
 
78
        return self.branch
 
79
 
 
80
    def make_branch(self, relpath, format=None):
 
81
        if format is not None:
 
82
            return TestCaseWithBzrDir.make_branch(self, relpath, format)
 
83
        repo = self.make_repository(relpath)
 
84
        # fixme RBC 20060210 this isnt necessarily a fixable thing,
 
85
        # Skipped is the wrong exception to raise.
 
86
        try:
 
87
            return self.branch_format.initialize(repo.bzrdir)
 
88
        except errors.UninitializableFormat:
 
89
            raise tests.TestSkipped('Uninitializable branch format')
 
90
 
 
91
    def make_branch_builder(self, relpath, format=None):
 
92
        if format is None:
 
93
            format = self.branch_format._matchingbzrdir
 
94
        return super(TestCaseWithBranch, self).make_branch_builder(
 
95
            relpath, format=format)
 
96
 
 
97
    def make_repository(self, relpath, shared=False, format=None):
 
98
        made_control = self.make_bzrdir(relpath, format=format)
 
99
        return made_control.create_repository(shared=shared)
 
100
 
 
101
    def create_tree_with_merge(self):
 
102
        """Create a branch with a simple ancestry.
 
103
 
 
104
        The graph should look like:
 
105
            digraph H {
 
106
                "rev-1" -> "rev-2" -> "rev-3";
 
107
                "rev-1" -> "rev-1.1.1" -> "rev-3";
 
108
            }
 
109
 
 
110
        Or in ASCII:
 
111
            1
 
112
            |\
 
113
            2 1.1.1
 
114
            |/
 
115
            3
 
116
        """
 
117
        tree = self.make_branch_and_memory_tree('tree')
 
118
        tree.lock_write()
 
119
        try:
 
120
            tree.add('')
 
121
            tree.commit('first', rev_id='rev-1')
 
122
            tree.commit('second', rev_id='rev-1.1.1')
 
123
            # Uncommit that last commit and switch to the other line
 
124
            tree.branch.set_last_revision_info(1, 'rev-1')
 
125
            tree.set_parent_ids(['rev-1'])
 
126
            tree.commit('alt-second', rev_id='rev-2')
 
127
            tree.set_parent_ids(['rev-2', 'rev-1.1.1'])
 
128
            tree.commit('third', rev_id='rev-3')
 
129
        finally:
 
130
            tree.unlock()
 
131
 
 
132
        return tree
 
133
 
 
134
 
 
135
def branch_scenarios():
 
136
    """ """
 
137
    # Generate a list of branch formats and their associated bzrdir formats to
 
138
    # use.
 
139
    combinations = [(format, format._matchingbzrdir) for format in
 
140
         BranchFormat._formats.values() + _legacy_formats]
 
141
    scenarios = make_scenarios(
 
142
        # None here will cause the default vfs transport server to be used.
 
143
        None,
 
144
        # None here will cause a readonly decorator to be created
 
145
        # by the TestCaseWithTransport.get_readonly_transport method.
 
146
        None,
 
147
        combinations)
 
148
    # Add RemoteBranch tests, which need a special server.
 
149
    remote_branch_format = RemoteBranchFormat()
 
150
    scenarios.extend(make_scenarios(
 
151
        SmartTCPServer_for_testing,
 
152
        ReadonlySmartTCPServer_for_testing,
 
153
        [(remote_branch_format, remote_branch_format._matchingbzrdir)],
 
154
        MemoryServer,
 
155
        name_suffix='-default'))
 
156
    # Also add tests for RemoteBranch with HPSS protocol v2 (i.e. bzr <1.6)
 
157
    # server.
 
158
    scenarios.extend(make_scenarios(
 
159
        SmartTCPServer_for_testing_v2_only,
 
160
        ReadonlySmartTCPServer_for_testing_v2_only,
 
161
        [(remote_branch_format, remote_branch_format._matchingbzrdir)],
 
162
        MemoryServer,
 
163
        name_suffix='-v2'))
 
164
    return scenarios
 
165
 
 
166
 
 
167
def load_tests(standard_tests, module, loader):
 
168
    per_branch_mod_names = [
 
169
        'bound_sftp',
 
170
        'branch',
 
171
        'break_lock',
 
172
        'check',
 
173
        'create_checkout',
 
174
        'create_clone',
 
175
        'commit',
 
176
        'dotted_revno_to_revision_id',
 
177
        'get_revision_id_to_revno_map',
 
178
        'hooks',
 
179
        'http',
 
180
        'iter_merge_sorted_revisions',
 
181
        'last_revision_info',
 
182
        'locking',
 
183
        'parent',
 
184
        'permissions',
 
185
        'pull',
 
186
        'push',
 
187
        'reconcile',
 
188
        'revision_history',
 
189
        'revision_id_to_dotted_revno',
 
190
        'revision_id_to_revno',
 
191
        'sprout',
 
192
        'stacking',
 
193
        'tags',
 
194
        'uncommit',
 
195
        'update',
 
196
        ]
 
197
    sub_tests = loader.loadTestsFromModuleNames(
 
198
        ['bzrlib.tests.per_branch.test_' + name
 
199
         for name in per_branch_mod_names])
 
200
    return tests.multiply_tests(sub_tests, branch_scenarios(), standard_tests)