/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5557.1.7 by John Arbash Meinel
Merge in the bzr.dev 5582
1
# Copyright (C) 2006-2011 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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
16
17
"""Test read_bundle works properly across various transports."""
18
7143.20.1 by Jelmer Vernooij
Move mergeable functions to breezy.mergeable.
19
import breezy.mergeable
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
20
from ..bundle.serializer import write_bundle
6670.4.1 by Jelmer Vernooij
Update imports.
21
import breezy.bzr.bzrdir
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
22
from .. import errors
23
from ..sixish import (
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
24
    BytesIO,
6973.6.2 by Jelmer Vernooij
Fix more tests.
25
    text_type,
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
26
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
27
from .. import tests
28
from .test_transport import TestTransportImplementation
29
from .per_transport import transport_test_permutations
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
30
import breezy.transport
31
import breezy.urlutils
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
32
from .scenarios import load_tests_apply_scenarios
5559.2.2 by Martin Pool
Change to using standard load_tests_apply_scenarios.
33
34
35
load_tests = load_tests_apply_scenarios
3302.9.22 by Vincent Ladeuil
bzrlib.tests.test_read_bundle use load_tests.
36
37
3251.4.11 by Aaron Bentley
Fix wrong local lookups
38
def create_bundle_file(test_case):
39
    test_case.build_tree(['tree/', 'tree/a', 'tree/subdir/'])
40
6670.4.1 by Jelmer Vernooij
Update imports.
41
    format = breezy.bzr.bzrdir.BzrDirFormat.get_default_format()
3251.4.11 by Aaron Bentley
Fix wrong local lookups
42
43
    bzrdir = format.initialize('tree')
44
    repo = bzrdir.create_repository()
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
45
    branch = repo.controldir.create_branch()
46
    wt = branch.controldir.create_workingtree()
3251.4.11 by Aaron Bentley
Fix wrong local lookups
47
48
    wt.add(['a', 'subdir/'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
49
    wt.commit('new project', rev_id=b'commit-1')
3251.4.11 by Aaron Bentley
Fix wrong local lookups
50
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
51
    out = BytesIO()
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
52
    write_bundle(wt.branch.repository, wt.get_parent_ids()[0], b'null:', out)
3251.4.11 by Aaron Bentley
Fix wrong local lookups
53
    out.seek(0)
54
    return out, wt
55
56
5346.1.3 by Vincent Ladeuil
Delete bzrlib.bundle.read_bundle_from_url.
57
class TestReadMergeableBundleFromURL(TestTransportImplementation):
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
58
    """Test that read_bundle works properly across multiple transports"""
59
5559.2.2 by Martin Pool
Change to using standard load_tests_apply_scenarios.
60
    scenarios = transport_test_permutations()
61
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
62
    def setUp(self):
5346.1.3 by Vincent Ladeuil
Delete bzrlib.bundle.read_bundle_from_url.
63
        super(TestReadMergeableBundleFromURL, self).setUp()
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
64
        self.bundle_name = 'test_bundle'
65
        # read_mergeable_from_url will invoke get_transport which may *not*
66
        # respect self._transport (i.e. returns a transport that is different
67
        # from the one we want to test, so we must inject a correct transport
4512.1.2 by Vincent Ladeuil
lifeless said: try harder :)
68
        # into possible_transports first).
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
69
        self.possible_transports = [self.get_transport(self.bundle_name)]
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
70
        self.overrideEnv('BRZ_NO_SMART_VFS', None)
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
71
        self.create_test_bundle()
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
72
73
    def read_mergeable_from_url(self, url):
7143.20.1 by Jelmer Vernooij
Move mergeable functions to breezy.mergeable.
74
        return breezy.mergeable.read_mergeable_from_url(
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
75
            url, possible_transports=self.possible_transports)
76
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
77
    def get_url(self, relpath=''):
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
78
        return breezy.urlutils.join(self._server.get_url(), relpath)
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
79
80
    def create_test_bundle(self):
3251.4.11 by Aaron Bentley
Fix wrong local lookups
81
        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
82
        if self.get_transport().is_readonly():
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
83
            self.build_tree_contents([(self.bundle_name, out.getvalue())])
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
84
        else:
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
85
            self.get_transport().put_file(self.bundle_name, out)
86
            self.log('Put to: %s', self.get_url(self.bundle_name))
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
87
        return wt
88
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
89
    def test_read_mergeable_from_url(self):
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
90
        info = self.read_mergeable_from_url(
6973.6.2 by Jelmer Vernooij
Fix more tests.
91
            text_type(self.get_url(self.bundle_name)))
2520.4.82 by Aaron Bentley
Fix tests to stop expecting bundles to build trees
92
        revision = info.real_revisions[-1]
6973.14.12 by Jelmer Vernooij
Merge trunk.
93
        self.assertEqual(b'commit-1', revision.revision_id)
1711.3.2 by John Arbash Meinel
Add the read_bundle_from_url command, which handles lots of exceptions
94
95
    def test_read_fail(self):
96
        # Trying to read from a directory, or non-bundle file
97
        # should fail with NotABundle
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
98
        self.assertRaises(errors.NotABundle,
99
                          self.read_mergeable_from_url, self.get_url('tree'))
100
        self.assertRaises(errors.NotABundle,
101
                          self.read_mergeable_from_url, self.get_url('tree/a'))
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
102
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
103
    def test_read_mergeable_respects_possible_transports(self):
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
104
        if not isinstance(self.get_transport(self.bundle_name),
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
105
                          breezy.transport.ConnectedTransport):
3988.2.1 by Vincent Ladeuil
Workaround SSLFile wrong readline prototype and fix bogus tests.
106
            # There is no point testing transport reuse for not connected
107
            # transports (the test will fail even).
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
108
            raise tests.TestSkipped(
109
                'Need a ConnectedTransport to test transport reuse')
6973.6.2 by Jelmer Vernooij
Fix more tests.
110
        url = text_type(self.get_url(self.bundle_name))
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
111
        self.read_mergeable_from_url(url)
4512.1.1 by Vincent Ladeuil
Fix bug #383920 by inserting the missing Content-Length header.
112
        self.assertEqual(1, len(self.possible_transports))