/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_read_bundle.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-18 18:18:36 UTC
  • mto: This revision was merged to the branch mainline in revision 4461.
  • Revision ID: john@arbash-meinel.com-20090618181836-biodfkat9a8eyzjz
The new add_inventory_by_delta is returning a CHKInventory when mapping from NULL
Which is completely valid, but 'broke' one of the tests.
So to fix it, changed the test to use CHKInventories on both sides, and add an __eq__
member. The nice thing is that CHKInventory.__eq__ is fairly cheap, since it only
has to check the root keys.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2006 Canonical Ltd
 
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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
 
26
from bzrlib.symbol_versioning import deprecated_in
 
27
from bzrlib import tests
 
28
from bzrlib.tests.test_transport import TestTransportImplementation
 
29
from bzrlib.tests.test_transport_implementations import transport_test_permutations
 
30
import bzrlib.transport
 
31
from bzrlib.transport.memory import MemoryTransport
 
32
import bzrlib.urlutils
 
33
 
 
34
 
 
35
def load_tests(standard_tests, module, loader):
 
36
    """Multiply tests for tranport implementations."""
 
37
    transport_tests, remaining_tests = tests.split_suite_by_condition(
 
38
        standard_tests, tests.condition_isinstance(TestReadBundleFromURL))
 
39
    return tests.multiply_tests(transport_tests, transport_test_permutations(),
 
40
        remaining_tests)
 
41
 
 
42
 
 
43
def create_bundle_file(test_case):
 
44
    test_case.build_tree(['tree/', 'tree/a', 'tree/subdir/'])
 
45
 
 
46
    format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
47
 
 
48
    bzrdir = format.initialize('tree')
 
49
    repo = bzrdir.create_repository()
 
50
    branch = repo.bzrdir.create_branch()
 
51
    wt = branch.bzrdir.create_workingtree()
 
52
 
 
53
    wt.add(['a', 'subdir/'])
 
54
    wt.commit('new project', rev_id='commit-1')
 
55
 
 
56
    out = cStringIO.StringIO()
 
57
    rev_ids = write_bundle(wt.branch.repository,
 
58
                           wt.get_parent_ids()[0], 'null:', out)
 
59
    out.seek(0)
 
60
    return out, wt
 
61
 
 
62
 
 
63
class TestDeprecations(tests.TestCaseInTempDir):
 
64
 
 
65
    def create_test_bundle(self):
 
66
        out, wt = create_bundle_file(self)
 
67
        f = open('test_bundle', 'wb')
 
68
        try:
 
69
            f.write(out.getvalue())
 
70
        finally:
 
71
            f.close()
 
72
        return wt
 
73
 
 
74
    def test_read_bundle_from_url_deprecated(self):
 
75
        wt = self.create_test_bundle()
 
76
        t = bzrlib.transport.get_transport(self.test_dir)
 
77
        url = t.abspath('test_bundle')
 
78
        self.callDeprecated([deprecated_in((1, 12, 0))
 
79
                             % 'bzrlib.bundle.read_bundle_from_url'],
 
80
                            bzrlib.bundle.read_bundle_from_url,
 
81
                            url)
 
82
 
 
83
 
 
84
class TestReadBundleFromURL(TestTransportImplementation):
 
85
    """Test that read_bundle works properly across multiple transports"""
 
86
 
 
87
    def get_url(self, relpath=''):
 
88
        return bzrlib.urlutils.join(self._server.get_url(), relpath)
 
89
 
 
90
    def create_test_bundle(self):
 
91
        out, wt = create_bundle_file(self)
 
92
        if self.get_transport().is_readonly():
 
93
            f = open('test_bundle', 'wb')
 
94
            try:
 
95
                f.write(out.getvalue())
 
96
            finally:
 
97
                f.close()
 
98
        else:
 
99
            self.get_transport().put_file('test_bundle', out)
 
100
            self.log('Put to: %s', self.get_url('test_bundle'))
 
101
        return wt
 
102
 
 
103
    def test_read_mergeable_from_url(self):
 
104
        self._captureVar('BZR_NO_SMART_VFS', None)
 
105
        wt = self.create_test_bundle()
 
106
        if wt is None:
 
107
            return
 
108
        # read_mergeable_from_url will invoke get_transport which may *not*
 
109
        # respect self._transport (i.e. returns a transport that is different
 
110
        # from the one we want to test, so we must inject a correct transport
 
111
        # into possible_transports first.
 
112
        t = self.get_transport('test_bundle')
 
113
        possible_transports = [t]
 
114
        info = bzrlib.bundle.read_mergeable_from_url(
 
115
                    unicode(self.get_url('test_bundle')),
 
116
                    possible_transports=possible_transports)
 
117
        revision = info.real_revisions[-1]
 
118
        self.assertEqual('commit-1', revision.revision_id)
 
119
 
 
120
    def test_read_fail(self):
 
121
        # Trying to read from a directory, or non-bundle file
 
122
        # should fail with NotABundle
 
123
        self._captureVar('BZR_NO_SMART_VFS', None)
 
124
        wt = self.create_test_bundle()
 
125
        if wt is None:
 
126
            return
 
127
 
 
128
        self.assertRaises(errors.NotABundle,
 
129
            bzrlib.bundle.read_mergeable_from_url,
 
130
            self.get_url('tree'))
 
131
        self.assertRaises(errors.NotABundle,
 
132
            bzrlib.bundle.read_mergeable_from_url,
 
133
            self.get_url('tree/a'))
 
134
 
 
135
    def test_read_mergeable_respects_possible_transports(self):
 
136
        t = self.get_transport('test_bundle')
 
137
        if not isinstance(t, bzrlib.transport.ConnectedTransport):
 
138
            # There is no point testing transport reuse for not connected
 
139
            # transports (the test will fail even).
 
140
            return
 
141
        self._captureVar('BZR_NO_SMART_VFS', None)
 
142
        wt = self.create_test_bundle()
 
143
        if wt is None:
 
144
            return
 
145
        # read_mergeable_from_url will invoke get_transport which may *not*
 
146
        # respect self._transport (i.e. returns a transport that is different
 
147
        # from the one we want to test, so we must inject a correct transport
 
148
        # into possible_transports first.
 
149
        possible_transports = [t]
 
150
        url = unicode(self.get_url('test_bundle'))
 
151
        info = bzrlib.bundle.read_mergeable_from_url(url,
 
152
            possible_transports=possible_transports)
 
153
        self.assertEqual(1, len(possible_transports))