/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2006 Canonical Ltd
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Test read_bundle works properly across various transports."""
18
19
import cStringIO
20
import os
21
22
import bzrlib.bundle
23
from bzrlib.bundle.serializer import write_bundle
24
import bzrlib.bzrdir
25
import bzrlib.errors as errors
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
26
from bzrlib.symbol_versioning import deprecated_in
3251.4.11 by Aaron Bentley
Fix wrong local lookups
27
from bzrlib import tests
1871.1.2 by Robert Collins
Reduce code duplication in transport-parameterised tests.
28
from bzrlib.tests.test_transport import TestTransportImplementation
3302.9.22 by Vincent Ladeuil
bzrlib.tests.test_read_bundle use load_tests.
29
from bzrlib.tests.test_transport_implementations import TransportTestProviderAdapter
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
30
import bzrlib.transport
31
from bzrlib.transport.memory import MemoryTransport
32
import bzrlib.urlutils
33
34
3302.9.22 by Vincent Ladeuil
bzrlib.tests.test_read_bundle use load_tests.
35
def load_tests(standard_tests, module, loader):
36
    """Multiply tests for tranport implementations."""
37
    result = loader.suiteClass()
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
38
    transport_tests, remaining_tests = tests.split_suite_by_condition(
39
        standard_tests, tests.condition_isinstance((TestReadBundleFromURL)))
40
3302.9.22 by Vincent Ladeuil
bzrlib.tests.test_read_bundle use load_tests.
41
    adapter = TransportTestProviderAdapter()
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
42
    tests.adapt_tests(transport_tests, adapter, result)
43
44
    # No parametrization for the remaining tests
45
    result.addTests(remaining_tests)
46
3302.9.22 by Vincent Ladeuil
bzrlib.tests.test_read_bundle use load_tests.
47
    return result
48
49
3251.4.11 by Aaron Bentley
Fix wrong local lookups
50
def create_bundle_file(test_case):
51
    test_case.build_tree(['tree/', 'tree/a', 'tree/subdir/'])
52
53
    format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
54
55
    bzrdir = format.initialize('tree')
56
    repo = bzrdir.create_repository()
57
    branch = repo.bzrdir.create_branch()
58
    wt = branch.bzrdir.create_workingtree()
59
60
    wt.add(['a', 'subdir/'])
61
    wt.commit('new project', rev_id='commit-1')
62
63
    out = cStringIO.StringIO()
64
    rev_ids = write_bundle(wt.branch.repository,
65
                           wt.get_parent_ids()[0], 'null:', out)
66
    out.seek(0)
67
    return out, wt
68
69
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
70
class TestDeprecations(tests.TestCaseInTempDir):
71
72
    def create_test_bundle(self):
73
        out, wt = create_bundle_file(self)
74
        f = open('test_bundle', 'wb')
3988.2.4 by Vincent Ladeuil
Fixed as per Martin's review.
75
        try:
76
            f.write(out.getvalue())
77
        finally:
78
            f.close()
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
79
        return wt
80
81
    def test_read_bundle_from_url_deprecated(self):
82
        wt = self.create_test_bundle()
83
        t = bzrlib.transport.get_transport(self.test_dir)
84
        url = t.abspath('test_bundle')
85
        self.callDeprecated([deprecated_in((1, 12, 0))
86
                             % 'bzrlib.bundle.read_bundle_from_url'],
87
                            bzrlib.bundle.read_bundle_from_url,
88
                            url)
89
90
1871.1.2 by Robert Collins
Reduce code duplication in transport-parameterised tests.
91
class TestReadBundleFromURL(TestTransportImplementation):
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
92
    """Test that read_bundle works properly across multiple transports"""
93
94
    def get_url(self, relpath=''):
95
        return bzrlib.urlutils.join(self._server.get_url(), relpath)
96
97
    def create_test_bundle(self):
3251.4.11 by Aaron Bentley
Fix wrong local lookups
98
        out, wt = create_bundle_file(self)
1752.2.26 by Martin Pool
test_read_bundle doesn't need to specially hold a connection open anymore
99
        if self.get_transport().is_readonly():
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
100
            f = open('test_bundle', 'wb')
3988.2.4 by Vincent Ladeuil
Fixed as per Martin's review.
101
            try:
102
                f.write(out.getvalue())
103
            finally:
104
                f.close()
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
105
        else:
1752.2.83 by Andrew Bennetts
Merge from bzr.dev
106
            self.get_transport().put_file('test_bundle', out)
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
107
            self.log('Put to: %s', self.get_url('test_bundle'))
108
        return wt
109
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
110
    def test_read_mergeable_from_url(self):
2402.1.2 by Andrew Bennetts
Deal with review comments.
111
        self._captureVar('BZR_NO_SMART_VFS', None)
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
112
        wt = self.create_test_bundle()
113
        if wt is None:
114
            return
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
115
        # read_mergeable_from_url will invoke get_transport which may *not*
116
        # respect self._transport (i.e. returns a transport that is different
117
        # from the one we want to test, so we must inject a correct transport
118
        # into possible_transports first.
119
        t = self.get_transport('test_bundle')
120
        possible_transports = [t]
121
        info = bzrlib.bundle.read_mergeable_from_url(
122
                    unicode(self.get_url('test_bundle')),
123
                    possible_transports=possible_transports)
2520.4.82 by Aaron Bentley
Fix tests to stop expecting bundles to build trees
124
        revision = info.real_revisions[-1]
125
        self.assertEqual('commit-1', revision.revision_id)
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
126
127
    def test_read_fail(self):
128
        # Trying to read from a directory, or non-bundle file
129
        # should fail with NotABundle
2402.1.2 by Andrew Bennetts
Deal with review comments.
130
        self._captureVar('BZR_NO_SMART_VFS', None)
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
131
        wt = self.create_test_bundle()
132
        if wt is None:
133
            return
134
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
135
        self.assertRaises(errors.NotABundle,
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
136
            bzrlib.bundle.read_mergeable_from_url,
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
137
            self.get_url('tree'))
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
138
        self.assertRaises(errors.NotABundle,
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
139
            bzrlib.bundle.read_mergeable_from_url,
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
140
            self.get_url('tree/a'))
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
141
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
142
    def test_read_mergeable_respects_possible_transports(self):
143
        t = self.get_transport('test_bundle')
144
        if not isinstance(t, bzrlib.transport.ConnectedTransport):
145
            # There is no point testing transport reuse for not connected
146
            # transports (the test will fail even).
147
            return
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
148
        self._captureVar('BZR_NO_SMART_VFS', None)
149
        wt = self.create_test_bundle()
150
        if wt is None:
151
            return
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
152
        # read_mergeable_from_url will invoke get_transport which may *not*
153
        # respect self._transport (i.e. returns a transport that is different
154
        # from the one we want to test, so we must inject a correct transport
155
        # into possible_transports first.
156
        possible_transports = [t]
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
157
        url = unicode(self.get_url('test_bundle'))
158
        info = bzrlib.bundle.read_mergeable_from_url(url,
159
            possible_transports=possible_transports)
160
        self.assertEqual(1, len(possible_transports))