25
25
rather than in tests/interrepository_implementations/*.py.
28
from bzrlib.repository import (_legacy_formats,
29
InterRepositoryTestProviderAdapter,
29
from bzrlib.errors import (
31
UninitializableFormat,
34
from bzrlib.repository import (
32
40
from bzrlib.tests import (
45
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
46
from bzrlib.transport import get_transport
49
class InterRepositoryTestProviderAdapter(TestScenarioApplier):
50
"""A tool to generate a suite testing multiple inter repository formats.
52
This is done by copying the test once for each interrepo provider and injecting
53
the transport_server, transport_readonly_server, repository_format and
54
repository_to_format classes into each copy.
55
Each copy is also given a new id() to make it easy to identify.
58
def __init__(self, transport_server, transport_readonly_server, formats):
59
TestScenarioApplier.__init__(self)
60
self._transport_server = transport_server
61
self._transport_readonly_server = transport_readonly_server
62
self.scenarios = self.formats_to_scenarios(formats)
64
def formats_to_scenarios(self, formats):
65
"""Transform the input formats to a list of scenarios.
67
:param formats: A list of tuples:
68
(interrepo_class, repository_format, repository_format_to).
71
for interrepo_class, repository_format, repository_format_to in formats:
72
id = '%s,%s,%s' % (interrepo_class.__name__,
73
repository_format.__class__.__name__,
74
repository_format_to.__class__.__name__)
76
{"transport_server":self._transport_server,
77
"transport_readonly_server":self._transport_readonly_server,
78
"repository_format":repository_format,
79
"interrepo_class":interrepo_class,
80
"repository_format_to":repository_format_to,
82
result.append(scenario)
86
def default_test_list():
87
"""Generate the default list of interrepo permutations to test."""
88
from bzrlib.repofmt import knitrepo, pack_repo, weaverepo
90
# test the default InterRepository between format 6 and the current
92
# XXX: robertc 20060220 reinstate this when there are two supported
93
# formats which do not have an optimal code path between them.
94
#result.append((InterRepository,
95
# RepositoryFormat6(),
96
# RepositoryFormatKnit1()))
97
for optimiser_class in InterRepository._optimisers:
98
format_to_test = optimiser_class._get_repo_format_to_test()
99
if format_to_test is not None:
100
result.append((optimiser_class,
101
format_to_test, format_to_test))
102
# if there are specific combinations we want to use, we can add them
104
result.append((InterModel1and2,
105
weaverepo.RepositoryFormat5(),
106
knitrepo.RepositoryFormatKnit3()))
107
result.append((InterModel1and2,
108
knitrepo.RepositoryFormatKnit1(),
109
knitrepo.RepositoryFormatKnit3()))
110
result.append((InterKnit1and2,
111
knitrepo.RepositoryFormatKnit1(),
112
knitrepo.RepositoryFormatKnit3()))
113
result.append((InterKnitRepo,
114
knitrepo.RepositoryFormatKnit1(),
115
pack_repo.RepositoryFormatKnitPack1()))
116
result.append((InterKnitRepo,
117
pack_repo.RepositoryFormatKnitPack1(),
118
knitrepo.RepositoryFormatKnit1()))
119
result.append((InterKnitRepo,
120
knitrepo.RepositoryFormatKnit3(),
121
pack_repo.RepositoryFormatKnitPack3()))
122
result.append((InterKnitRepo,
123
pack_repo.RepositoryFormatKnitPack3(),
124
knitrepo.RepositoryFormatKnit3()))
128
class TestCaseWithInterRepository(TestCaseWithBzrDir):
131
super(TestCaseWithInterRepository, self).setUp()
133
def make_branch(self, relpath, format=None):
134
repo = self.make_repository(relpath, format=format)
135
return repo.bzrdir.create_branch()
137
def make_bzrdir(self, relpath, format=None):
139
url = self.get_url(relpath)
140
segments = url.split('/')
141
if segments and segments[-1] not in ('', '.'):
142
parent = '/'.join(segments[:-1])
143
t = get_transport(parent)
145
t.mkdir(segments[-1])
149
format = self.repository_format._matchingbzrdir
150
return format.initialize(url)
151
except UninitializableFormat:
152
raise TestSkipped("Format %s is not initializable." % format)
154
def make_repository(self, relpath, format=None):
155
made_control = self.make_bzrdir(relpath, format=format)
156
return self.repository_format.initialize(made_control)
158
def make_to_repository(self, relpath):
159
made_control = self.make_bzrdir(relpath,
160
self.repository_format_to._matchingbzrdir)
161
return self.repository_format_to.initialize(made_control)
164
def load_tests(basic_tests, module, loader):
165
result = loader.suiteClass()
166
# add the tests for this module
167
result.addTests(basic_tests)
42
169
test_interrepository_implementations = [
170
'bzrlib.tests.interrepository_implementations.test_fetch',
43
171
'bzrlib.tests.interrepository_implementations.test_interrepository',
45
173
adapter = InterRepositoryTestProviderAdapter(