24
24
rather than in tests/branch_implementations/*.py.
27
from bzrlib.bzrdir import BzrDirTestProviderAdapter, BzrDirFormat
27
from bzrlib.bzrdir import BzrDirFormat
28
28
from bzrlib.tests import (
31
TestCaseWithTransport,
34
from bzrlib.transport.memory import MemoryServer
37
class BzrDirTestProviderAdapter(TestScenarioApplier):
38
"""A tool to generate a suite testing multiple bzrdir formats at once.
40
This is done by copying the test once for each transport and injecting
41
the transport_server, transport_readonly_server, and bzrdir_format
42
classes into each copy. Each copy is also given a new id() to make it
46
def __init__(self, vfs_factory, transport_server, transport_readonly_server,
47
formats, name_suffix=''):
48
"""Create an object to adapt tests.
50
:param vfs_server: A factory to create a Transport Server which has
51
all the VFS methods working, and is writable.
53
self._vfs_factory = vfs_factory
54
self._transport_server = transport_server
55
self._transport_readonly_server = transport_readonly_server
56
self._name_suffix = name_suffix
57
self.scenarios = self.formats_to_scenarios(formats)
59
def formats_to_scenarios(self, formats):
60
"""Transform the input formats to a list of scenarios.
62
:param formats: A list of bzrdir_format objects.
65
for format in formats:
66
scenario_name = format.__class__.__name__
67
scenario_name += self._name_suffix
68
scenario = (scenario_name, {
69
"vfs_transport_factory":self._vfs_factory,
70
"transport_server":self._transport_server,
71
"transport_readonly_server":self._transport_readonly_server,
72
"bzrdir_format":format,
74
result.append(scenario)
78
class TestCaseWithBzrDir(TestCaseWithTransport):
81
super(TestCaseWithBzrDir, self).setUp()
85
if self.bzrdir is None:
86
self.bzrdir = self.make_bzrdir(None)
89
def make_bzrdir(self, relpath, format=None):
91
format = self.bzrdir_format
92
return super(TestCaseWithBzrDir, self).make_bzrdir(
93
relpath, format=format)
96
def load_tests(basic_tests, module, loader):
97
result = loader.suiteClass()
98
# add the tests for this module
99
result.addTests(basic_tests)
38
101
test_bzrdir_implementations = [
39
102
'bzrlib.tests.bzrdir_implementations.test_bzrdir',
41
104
formats = BzrDirFormat.known_formats()
42
105
adapter = BzrDirTestProviderAdapter(
43
106
default_transport,
44
108
# None here will cause a readonly decorator to be created
45
109
# by the TestCaseWithTransport.get_readonly_transport method.
112
# add the tests for the sub modules
49
113
adapt_modules(test_bzrdir_implementations, adapter, loader, result)
115
# This will always add the tests for smart server transport, regardless of
116
# the --transport option the user specified to 'bzr selftest'.
117
from bzrlib.smart.server import (
118
ReadonlySmartTCPServer_for_testing,
119
ReadonlySmartTCPServer_for_testing_v2_only,
120
SmartTCPServer_for_testing,
121
SmartTCPServer_for_testing_v2_only,
123
from bzrlib.remote import RemoteBzrDirFormat
125
# test the remote server behaviour using a MemoryTransport
126
smart_server_suite = loader.suiteClass()
127
adapt_to_smart_server = BzrDirTestProviderAdapter(
129
SmartTCPServer_for_testing,
130
ReadonlySmartTCPServer_for_testing,
131
[(RemoteBzrDirFormat())],
132
name_suffix='-default')
133
adapt_modules(test_bzrdir_implementations,
134
adapt_to_smart_server,
137
adapt_to_smart_server = BzrDirTestProviderAdapter(
139
SmartTCPServer_for_testing_v2_only,
140
ReadonlySmartTCPServer_for_testing_v2_only,
141
[(RemoteBzrDirFormat())],
143
adapt_modules(test_bzrdir_implementations,
144
adapt_to_smart_server,
147
result.addTests(smart_server_suite)