1787
1797
InterRepository.register_optimiser(InterRemoteRepository)
1790
class RepositoryTestProviderAdapter(object):
1791
"""A tool to generate a suite testing multiple repository formats at once.
1793
This is done by copying the test once for each transport and injecting
1794
the transport_server, transport_readonly_server, and bzrdir_format and
1795
repository_format classes into each copy. Each copy is also given a new id()
1796
to make it easy to identify.
1799
def __init__(self, transport_server, transport_readonly_server, formats,
1800
vfs_transport_factory=None):
1801
self._transport_server = transport_server
1802
self._transport_readonly_server = transport_readonly_server
1803
self._vfs_transport_factory = vfs_transport_factory
1804
self._formats = formats
1806
def adapt(self, test):
1807
result = unittest.TestSuite()
1808
for repository_format, bzrdir_format in self._formats:
1809
from copy import deepcopy
1810
new_test = deepcopy(test)
1811
new_test.transport_server = self._transport_server
1812
new_test.transport_readonly_server = self._transport_readonly_server
1813
# Only override the test's vfs_transport_factory if one was
1814
# specified, otherwise just leave the default in place.
1815
if self._vfs_transport_factory:
1816
new_test.vfs_transport_factory = self._vfs_transport_factory
1817
new_test.bzrdir_format = bzrdir_format
1818
new_test.repository_format = repository_format
1819
def make_new_test_id():
1820
new_id = "%s(%s)" % (new_test.id(), repository_format.__class__.__name__)
1821
return lambda: new_id
1822
new_test.id = make_new_test_id()
1823
result.addTest(new_test)
1827
class InterRepositoryTestProviderAdapter(object):
1828
"""A tool to generate a suite testing multiple inter repository formats.
1830
This is done by copying the test once for each interrepo provider and injecting
1831
the transport_server, transport_readonly_server, repository_format and
1832
repository_to_format classes into each copy.
1833
Each copy is also given a new id() to make it easy to identify.
1836
def __init__(self, transport_server, transport_readonly_server, formats):
1837
self._transport_server = transport_server
1838
self._transport_readonly_server = transport_readonly_server
1839
self._formats = formats
1841
def adapt(self, test):
1842
result = unittest.TestSuite()
1843
for interrepo_class, repository_format, repository_format_to in self._formats:
1844
from copy import deepcopy
1845
new_test = deepcopy(test)
1846
new_test.transport_server = self._transport_server
1847
new_test.transport_readonly_server = self._transport_readonly_server
1848
new_test.interrepo_class = interrepo_class
1849
new_test.repository_format = repository_format
1850
new_test.repository_format_to = repository_format_to
1851
def make_new_test_id():
1852
new_id = "%s(%s)" % (new_test.id(), interrepo_class.__name__)
1853
return lambda: new_id
1854
new_test.id = make_new_test_id()
1855
result.addTest(new_test)
1859
def default_test_list():
1860
"""Generate the default list of interrepo permutations to test."""
1861
from bzrlib.repofmt import knitrepo, weaverepo
1863
# test the default InterRepository between format 6 and the current
1865
# XXX: robertc 20060220 reinstate this when there are two supported
1866
# formats which do not have an optimal code path between them.
1867
#result.append((InterRepository,
1868
# RepositoryFormat6(),
1869
# RepositoryFormatKnit1()))
1870
for optimiser_class in InterRepository._optimisers:
1871
format_to_test = optimiser_class._get_repo_format_to_test()
1872
if format_to_test is not None:
1873
result.append((optimiser_class,
1874
format_to_test, format_to_test))
1875
# if there are specific combinations we want to use, we can add them
1877
result.append((InterModel1and2,
1878
weaverepo.RepositoryFormat5(),
1879
knitrepo.RepositoryFormatKnit3()))
1880
result.append((InterKnit1and2,
1881
knitrepo.RepositoryFormatKnit1(),
1882
knitrepo.RepositoryFormatKnit3()))
1886
1800
class CopyConverter(object):
1887
1801
"""A repository conversion tool which just performs a copy of the content.