/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-12-22 16:28:47 UTC
  • mto: This revision was merged to the branch mainline in revision 4922.
  • Revision ID: john@arbash-meinel.com-20091222162847-tvnsc69to4l4uf5r
Implement a permute_for_extension helper.

Use it for all of the 'simple' extension permutations.
It basically permutes all tests in the current module, by setting TestCase.module.
Which works well for most of our extension tests. Some had more advanced
handling of permutations (extra permutations, custom vars, etc.)

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.per_transport 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 setUp(self):
 
88
        super(TestReadBundleFromURL, self).setUp()
 
89
        self.bundle_name = 'test_bundle'
 
90
        # read_mergeable_from_url will invoke get_transport which may *not*
 
91
        # respect self._transport (i.e. returns a transport that is different
 
92
        # from the one we want to test, so we must inject a correct transport
 
93
        # into possible_transports first).
 
94
        self.possible_transports = [self.get_transport(self.bundle_name)]
 
95
        self._captureVar('BZR_NO_SMART_VFS', None)
 
96
        wt = self.create_test_bundle()
 
97
 
 
98
    def read_mergeable_from_url(self, url):
 
99
        return bzrlib.bundle.read_mergeable_from_url(
 
100
            url, possible_transports=self.possible_transports)
 
101
 
 
102
    def get_url(self, relpath=''):
 
103
        return bzrlib.urlutils.join(self._server.get_url(), relpath)
 
104
 
 
105
    def create_test_bundle(self):
 
106
        out, wt = create_bundle_file(self)
 
107
        if self.get_transport().is_readonly():
 
108
            self.build_tree_contents([(self.bundle_name, out.getvalue())])
 
109
        else:
 
110
            self.get_transport().put_file(self.bundle_name, out)
 
111
            self.log('Put to: %s', self.get_url(self.bundle_name))
 
112
        return wt
 
113
 
 
114
    def test_read_mergeable_from_url(self):
 
115
        info = self.read_mergeable_from_url(
 
116
            unicode(self.get_url(self.bundle_name)))
 
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.assertRaises(errors.NotABundle,
 
124
                          self.read_mergeable_from_url, self.get_url('tree'))
 
125
        self.assertRaises(errors.NotABundle,
 
126
                          self.read_mergeable_from_url, self.get_url('tree/a'))
 
127
 
 
128
    def test_read_mergeable_respects_possible_transports(self):
 
129
        if not isinstance(self.get_transport(self.bundle_name),
 
130
                          bzrlib.transport.ConnectedTransport):
 
131
            # There is no point testing transport reuse for not connected
 
132
            # transports (the test will fail even).
 
133
            raise tests.TestSkipped(
 
134
                'Need a ConnectedTransport to test transport reuse')
 
135
        url = unicode(self.get_url(self.bundle_name))
 
136
        info = self.read_mergeable_from_url(url)
 
137
        self.assertEqual(1, len(self.possible_transports))