~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_transport_implementations.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-07-02 07:06:39 UTC
  • mfrom: (2553.2.14 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20070702070639-um9oyfoc2i6g8umv
(robertc) Reduce duplication in interface based testing by extracting a new class TestScenarioApplier.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
from StringIO import StringIO as pyStringIO
26
26
import stat
27
27
import sys
 
28
import unittest
28
29
 
29
30
from bzrlib import (
30
31
    errors,
45
46
from bzrlib.osutils import getcwd
46
47
from bzrlib.smart import medium
47
48
from bzrlib.symbol_versioning import zero_eleven
48
 
from bzrlib.tests import TestCaseInTempDir, TestSkipped
 
49
from bzrlib.tests import TestCaseInTempDir, TestScenarioApplier, TestSkipped
49
50
from bzrlib.tests.test_transport import TestTransportImplementation
50
 
from bzrlib.transport import memory, remote
 
51
from bzrlib.transport import memory, remote, _get_transport_modules
51
52
import bzrlib.transport
52
53
 
53
54
 
 
55
class TransportTestProviderAdapter(TestScenarioApplier):
 
56
    """A tool to generate a suite testing all transports for a single test.
 
57
 
 
58
    This is done by copying the test once for each transport and injecting
 
59
    the transport_class and transport_server classes into each copy. Each copy
 
60
    is also given a new id() to make it easy to identify.
 
61
    """
 
62
 
 
63
    def __init__(self):
 
64
        self.scenarios = self._test_permutations()
 
65
 
 
66
    def get_transport_test_permutations(self, module):
 
67
        """Get the permutations module wants to have tested."""
 
68
        if getattr(module, 'get_test_permutations', None) is None:
 
69
            raise AssertionError("transport module %s doesn't provide get_test_permutations()"
 
70
                    % module.__name__)
 
71
            ##warning("transport module %s doesn't provide get_test_permutations()"
 
72
            ##       % module.__name__)
 
73
            return []
 
74
        return module.get_test_permutations()
 
75
 
 
76
    def _test_permutations(self):
 
77
        """Return a list of the klass, server_factory pairs to test."""
 
78
        result = []
 
79
        for module in _get_transport_modules():
 
80
            try:
 
81
                permutations = self.get_transport_test_permutations(
 
82
                    reduce(getattr, (module).split('.')[1:], __import__(module)))
 
83
                for (klass, server_factory) in permutations:
 
84
                    scenario = (server_factory.__name__,
 
85
                        {"transport_class":klass,
 
86
                         "transport_server":server_factory})
 
87
                    result.append(scenario)
 
88
            except errors.DependencyNotPresent, e:
 
89
                # Continue even if a dependency prevents us 
 
90
                # from running this test
 
91
                pass
 
92
        return result
 
93
 
 
94
 
 
95
 
54
96
class TransportTests(TestTransportImplementation):
55
97
 
56
98
    def setUp(self):