151
149
# This test used to know about all the possible transports and the
152
150
# order they were returned but that seems overly brittle (mbp
154
from bzrlib.tests.test_transport_implementations \
155
import TransportTestProviderAdapter
156
scenarios = TransportTestProviderAdapter().scenarios
152
input_test = TestTransportProviderAdapter(
153
"test_adapter_sets_transport_class")
154
from bzrlib.transport import TransportTestProviderAdapter
155
suite = TransportTestProviderAdapter().adapt(input_test)
156
tests = list(iter(suite))
157
self.assertTrue(len(tests) > 6)
157
158
# there are at least that many builtin transports
158
self.assertTrue(len(scenarios) > 6)
159
one_scenario = scenarios[0]
160
self.assertIsInstance(one_scenario[0], str)
161
self.assertTrue(issubclass(one_scenario[1]["transport_class"],
160
self.assertTrue(issubclass(one_test.transport_class,
162
161
bzrlib.transport.Transport))
163
self.assertTrue(issubclass(one_scenario[1]["transport_server"],
162
self.assertTrue(issubclass(one_test.transport_server,
164
163
bzrlib.transport.Server))
167
166
class TestBranchProviderAdapter(TestCase):
168
167
"""A group of tests that test the branch implementation test adapter."""
170
def test_constructor(self):
169
def test_adapted_tests(self):
171
170
# check that constructor parameters are passed through to the adapted
173
from bzrlib.tests.branch_implementations import BranchTestProviderAdapter
172
from bzrlib.branch import BranchTestProviderAdapter
173
input_test = TestBranchProviderAdapter(
174
"test_adapted_tests")
176
177
formats = [("c", "C"), ("d", "D")]
177
178
adapter = BranchTestProviderAdapter(server1, server2, formats)
178
self.assertEqual(2, len(adapter.scenarios))
181
{'branch_format': 'c',
182
'bzrdir_format': 'C',
183
'transport_readonly_server': 'b',
184
'transport_server': 'a'}),
186
{'branch_format': 'd',
187
'bzrdir_format': 'D',
188
'transport_readonly_server': 'b',
189
'transport_server': 'a'})],
179
suite = adapter.adapt(input_test)
180
tests = list(iter(suite))
181
self.assertEqual(2, len(tests))
182
self.assertEqual(tests[0].branch_format, formats[0][0])
183
self.assertEqual(tests[0].bzrdir_format, formats[0][1])
184
self.assertEqual(tests[0].transport_server, server1)
185
self.assertEqual(tests[0].transport_readonly_server, server2)
186
self.assertEqual(tests[1].branch_format, formats[1][0])
187
self.assertEqual(tests[1].bzrdir_format, formats[1][1])
188
self.assertEqual(tests[1].transport_server, server1)
189
self.assertEqual(tests[1].transport_readonly_server, server2)
193
192
class TestBzrDirProviderAdapter(TestCase):
196
195
def test_adapted_tests(self):
197
196
# check that constructor parameters are passed through to the adapted
199
from bzrlib.tests.bzrdir_implementations import BzrDirTestProviderAdapter
198
from bzrlib.bzrdir import BzrDirTestProviderAdapter
199
input_test = TestBzrDirProviderAdapter(
200
"test_adapted_tests")
200
201
vfs_factory = "v"
203
204
formats = ["c", "d"]
204
205
adapter = BzrDirTestProviderAdapter(vfs_factory,
205
206
server1, server2, formats)
208
{'bzrdir_format': 'c',
209
'transport_readonly_server': 'b',
210
'transport_server': 'a',
211
'vfs_transport_factory': 'v'}),
213
{'bzrdir_format': 'd',
214
'transport_readonly_server': 'b',
215
'transport_server': 'a',
216
'vfs_transport_factory': 'v'})],
207
suite = adapter.adapt(input_test)
208
tests = list(iter(suite))
209
self.assertEqual(2, len(tests))
210
self.assertEqual(tests[0].bzrdir_format, formats[0])
211
self.assertEqual(tests[0].vfs_transport_factory, vfs_factory)
212
self.assertEqual(tests[0].transport_server, server1)
213
self.assertEqual(tests[0].transport_readonly_server, server2)
214
self.assertEqual(tests[1].bzrdir_format, formats[1])
215
self.assertEqual(tests[1].vfs_transport_factory, vfs_factory)
216
self.assertEqual(tests[1].transport_server, server1)
217
self.assertEqual(tests[1].transport_readonly_server, server2)
220
220
class TestRepositoryProviderAdapter(TestCase):
221
221
"""A group of tests that test the repository implementation test adapter."""
223
def test_constructor(self):
224
# check that constructor parameters are passed through to the
226
from bzrlib.tests.repository_implementations import RepositoryTestProviderAdapter
223
def test_adapted_tests(self):
224
# check that constructor parameters are passed through to the adapted
226
from bzrlib.repository import RepositoryTestProviderAdapter
227
input_test = TestRepositoryProviderAdapter(
228
"test_adapted_tests")
229
231
formats = [("c", "C"), ("d", "D")]
230
232
adapter = RepositoryTestProviderAdapter(server1, server2, formats)
233
{'bzrdir_format': 'C',
234
'repository_format': 'c',
235
'transport_readonly_server': 'b',
236
'transport_server': 'a'}),
238
{'bzrdir_format': 'D',
239
'repository_format': 'd',
240
'transport_readonly_server': 'b',
241
'transport_server': 'a'})],
233
suite = adapter.adapt(input_test)
234
tests = list(iter(suite))
235
self.assertEqual(2, len(tests))
236
self.assertEqual(tests[0].bzrdir_format, formats[0][1])
237
self.assertEqual(tests[0].repository_format, formats[0][0])
238
self.assertEqual(tests[0].transport_server, server1)
239
self.assertEqual(tests[0].transport_readonly_server, server2)
240
self.assertEqual(tests[1].bzrdir_format, formats[1][1])
241
self.assertEqual(tests[1].repository_format, formats[1][0])
242
self.assertEqual(tests[1].transport_server, server1)
243
self.assertEqual(tests[1].transport_readonly_server, server2)
244
245
def test_setting_vfs_transport(self):
245
246
"""The vfs_transport_factory can be set optionally."""
246
from bzrlib.tests.repository_implementations import RepositoryTestProviderAdapter
247
formats = [("a", "b"), ("c", "d")]
247
from bzrlib.repository import RepositoryTestProviderAdapter
248
input_test = TestRepositoryProviderAdapter(
249
"test_adapted_tests")
250
formats = [("c", "C")]
248
251
adapter = RepositoryTestProviderAdapter(None, None, formats,
249
252
vfs_transport_factory="vfs")
252
{'bzrdir_format': 'b',
253
'repository_format': 'a',
254
'transport_readonly_server': None,
255
'transport_server': None,
256
'vfs_transport_factory': 'vfs'}),
258
{'bzrdir_format': 'd',
259
'repository_format': 'c',
260
'transport_readonly_server': None,
261
'transport_server': None,
262
'vfs_transport_factory': 'vfs'})],
265
def test_formats_to_scenarios(self):
266
"""The adapter can generate all the scenarios needed."""
267
from bzrlib.tests.repository_implementations import RepositoryTestProviderAdapter
268
no_vfs_adapter = RepositoryTestProviderAdapter("server", "readonly",
270
vfs_adapter = RepositoryTestProviderAdapter("server", "readonly",
271
[], vfs_transport_factory="vfs")
272
# no_vfs generate scenarios without vfs_transport_factor
273
formats = [("c", "C"), (1, "D")]
276
{'bzrdir_format': 'C',
277
'repository_format': 'c',
278
'transport_readonly_server': 'readonly',
279
'transport_server': 'server'}),
281
{'bzrdir_format': 'D',
282
'repository_format': 1,
283
'transport_readonly_server': 'readonly',
284
'transport_server': 'server'})],
285
no_vfs_adapter.formats_to_scenarios(formats))
288
{'bzrdir_format': 'C',
289
'repository_format': 'c',
290
'transport_readonly_server': 'readonly',
291
'transport_server': 'server',
292
'vfs_transport_factory': 'vfs'}),
294
{'bzrdir_format': 'D',
295
'repository_format': 1,
296
'transport_readonly_server': 'readonly',
297
'transport_server': 'server',
298
'vfs_transport_factory': 'vfs'})],
299
vfs_adapter.formats_to_scenarios(formats))
302
class TestTestScenarioApplier(TestCase):
303
"""Tests for the test adaption facilities."""
305
def test_adapt_applies_scenarios(self):
306
from bzrlib.tests.repository_implementations import TestScenarioApplier
307
input_test = TestTestScenarioApplier("test_adapt_test_to_scenario")
308
adapter = TestScenarioApplier()
309
adapter.scenarios = [("1", "dict"), ("2", "settings")]
311
def capture_call(test, scenario):
312
calls.append((test, scenario))
314
adapter.adapt_test_to_scenario = capture_call
315
adapter.adapt(input_test)
316
self.assertEqual([(input_test, ("1", "dict")),
317
(input_test, ("2", "settings"))], calls)
319
def test_adapt_test_to_scenario(self):
320
from bzrlib.tests.repository_implementations import TestScenarioApplier
321
input_test = TestTestScenarioApplier("test_adapt_test_to_scenario")
322
adapter = TestScenarioApplier()
323
# setup two adapted tests
324
adapted_test1 = adapter.adapt_test_to_scenario(input_test,
326
{"bzrdir_format":"bzr_format",
327
"repository_format":"repo_fmt",
328
"transport_server":"transport_server",
329
"transport_readonly_server":"readonly-server"}))
330
adapted_test2 = adapter.adapt_test_to_scenario(input_test,
331
("new id 2", {"bzrdir_format":None}))
332
# input_test should have been altered.
333
self.assertRaises(AttributeError, getattr, input_test, "bzrdir_format")
334
# the new tests are mutually incompatible, ensuring it has
335
# made new ones, and unspecified elements in the scenario
336
# should not have been altered.
337
self.assertEqual("bzr_format", adapted_test1.bzrdir_format)
338
self.assertEqual("repo_fmt", adapted_test1.repository_format)
339
self.assertEqual("transport_server", adapted_test1.transport_server)
340
self.assertEqual("readonly-server",
341
adapted_test1.transport_readonly_server)
343
"bzrlib.tests.test_selftest.TestTestScenarioApplier."
344
"test_adapt_test_to_scenario(new id)",
346
self.assertEqual(None, adapted_test2.bzrdir_format)
348
"bzrlib.tests.test_selftest.TestTestScenarioApplier."
349
"test_adapt_test_to_scenario(new id 2)",
253
suite = adapter.adapt(input_test)
254
tests = list(iter(suite))
255
self.assertEqual(1, len(tests))
256
self.assertEqual(tests[0].vfs_transport_factory, "vfs")
353
259
class TestInterRepositoryProviderAdapter(TestCase):
356
262
def test_adapted_tests(self):
357
263
# check that constructor parameters are passed through to the adapted
359
from bzrlib.tests.interrepository_implementations import \
360
InterRepositoryTestProviderAdapter
265
from bzrlib.repository import InterRepositoryTestProviderAdapter
266
input_test = TestInterRepositoryProviderAdapter(
267
"test_adapted_tests")
363
270
formats = [(str, "C1", "C2"), (int, "D1", "D2")]
364
271
adapter = InterRepositoryTestProviderAdapter(server1, server2, formats)
367
{'interrepo_class': str,
368
'repository_format': 'C1',
369
'repository_format_to': 'C2',
370
'transport_readonly_server': 'b',
371
'transport_server': 'a'}),
373
{'interrepo_class': int,
374
'repository_format': 'D1',
375
'repository_format_to': 'D2',
376
'transport_readonly_server': 'b',
377
'transport_server': 'a'})],
378
adapter.formats_to_scenarios(formats))
272
suite = adapter.adapt(input_test)
273
tests = list(iter(suite))
274
self.assertEqual(2, len(tests))
275
self.assertEqual(tests[0].interrepo_class, formats[0][0])
276
self.assertEqual(tests[0].repository_format, formats[0][1])
277
self.assertEqual(tests[0].repository_format_to, formats[0][2])
278
self.assertEqual(tests[0].transport_server, server1)
279
self.assertEqual(tests[0].transport_readonly_server, server2)
280
self.assertEqual(tests[1].interrepo_class, formats[1][0])
281
self.assertEqual(tests[1].repository_format, formats[1][1])
282
self.assertEqual(tests[1].repository_format_to, formats[1][2])
283
self.assertEqual(tests[1].transport_server, server1)
284
self.assertEqual(tests[1].transport_readonly_server, server2)
381
287
class TestInterVersionedFileProviderAdapter(TestCase):
382
288
"""A group of tests that test the InterVersionedFile test adapter."""
384
def test_scenarios(self):
290
def test_adapted_tests(self):
385
291
# check that constructor parameters are passed through to the adapted
387
from bzrlib.tests.interversionedfile_implementations \
388
import InterVersionedFileTestProviderAdapter
293
from bzrlib.versionedfile import InterVersionedFileTestProviderAdapter
294
input_test = TestInterRepositoryProviderAdapter(
295
"test_adapted_tests")
391
298
formats = [(str, "C1", "C2"), (int, "D1", "D2")]
392
299
adapter = InterVersionedFileTestProviderAdapter(server1, server2, formats)
395
{'interversionedfile_class':str,
396
'transport_readonly_server': 'b',
397
'transport_server': 'a',
398
'versionedfile_factory': 'C1',
399
'versionedfile_factory_to': 'C2'}),
401
{'interversionedfile_class': int,
402
'transport_readonly_server': 'b',
403
'transport_server': 'a',
404
'versionedfile_factory': 'D1',
405
'versionedfile_factory_to': 'D2'})],
300
suite = adapter.adapt(input_test)
301
tests = list(iter(suite))
302
self.assertEqual(2, len(tests))
303
self.assertEqual(tests[0].interversionedfile_class, formats[0][0])
304
self.assertEqual(tests[0].versionedfile_factory, formats[0][1])
305
self.assertEqual(tests[0].versionedfile_factory_to, formats[0][2])
306
self.assertEqual(tests[0].transport_server, server1)
307
self.assertEqual(tests[0].transport_readonly_server, server2)
308
self.assertEqual(tests[1].interversionedfile_class, formats[1][0])
309
self.assertEqual(tests[1].versionedfile_factory, formats[1][1])
310
self.assertEqual(tests[1].versionedfile_factory_to, formats[1][2])
311
self.assertEqual(tests[1].transport_server, server1)
312
self.assertEqual(tests[1].transport_readonly_server, server2)
409
315
class TestRevisionStoreProviderAdapter(TestCase):
410
316
"""A group of tests that test the RevisionStore test adapter."""
412
def test_scenarios(self):
318
def test_adapted_tests(self):
413
319
# check that constructor parameters are passed through to the adapted
415
from bzrlib.tests.revisionstore_implementations \
416
import RevisionStoreTestProviderAdapter
321
from bzrlib.store.revision import RevisionStoreTestProviderAdapter
322
input_test = TestRevisionStoreProviderAdapter(
323
"test_adapted_tests")
417
324
# revision stores need a store factory - i.e. RevisionKnit
418
325
#, a readonly and rw transport
419
326
# transport servers:
422
329
store_factories = ["c", "d"]
423
330
adapter = RevisionStoreTestProviderAdapter(server1, server2, store_factories)
426
{'store_factory': 'c',
427
'transport_readonly_server': 'b',
428
'transport_server': 'a'}),
430
{'store_factory': 'd',
431
'transport_readonly_server': 'b',
432
'transport_server': 'a'})],
331
suite = adapter.adapt(input_test)
332
tests = list(iter(suite))
333
self.assertEqual(2, len(tests))
334
self.assertEqual(tests[0].store_factory, store_factories[0][0])
335
self.assertEqual(tests[0].transport_server, server1)
336
self.assertEqual(tests[0].transport_readonly_server, server2)
337
self.assertEqual(tests[1].store_factory, store_factories[1][0])
338
self.assertEqual(tests[1].transport_server, server1)
339
self.assertEqual(tests[1].transport_readonly_server, server2)
436
342
class TestWorkingTreeProviderAdapter(TestCase):
437
343
"""A group of tests that test the workingtree implementation test adapter."""
439
def test_scenarios(self):
345
def test_adapted_tests(self):
440
346
# check that constructor parameters are passed through to the adapted
442
from bzrlib.tests.workingtree_implementations \
443
import WorkingTreeTestProviderAdapter
348
from bzrlib.workingtree import WorkingTreeTestProviderAdapter
349
input_test = TestWorkingTreeProviderAdapter(
350
"test_adapted_tests")
446
353
formats = [("c", "C"), ("d", "D")]
447
354
adapter = WorkingTreeTestProviderAdapter(server1, server2, formats)
450
{'bzrdir_format': 'C',
451
'transport_readonly_server': 'b',
452
'transport_server': 'a',
453
'workingtree_format': 'c'}),
455
{'bzrdir_format': 'D',
456
'transport_readonly_server': 'b',
457
'transport_server': 'a',
458
'workingtree_format': 'd'})],
355
suite = adapter.adapt(input_test)
356
tests = list(iter(suite))
357
self.assertEqual(2, len(tests))
358
self.assertEqual(tests[0].workingtree_format, formats[0][0])
359
self.assertEqual(tests[0].bzrdir_format, formats[0][1])
360
self.assertEqual(tests[0].transport_server, server1)
361
self.assertEqual(tests[0].transport_readonly_server, server2)
362
self.assertEqual(tests[1].workingtree_format, formats[1][0])
363
self.assertEqual(tests[1].bzrdir_format, formats[1][1])
364
self.assertEqual(tests[1].transport_server, server1)
365
self.assertEqual(tests[1].transport_readonly_server, server2)
462
368
class TestTreeProviderAdapter(TestCase):