~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_bzrdir/__init__.py

  • Committer: Andrew Bennetts
  • Date: 2009-07-27 05:35:00 UTC
  • mfrom: (4570 +trunk)
  • mto: (4634.6.29 2.0)
  • mto: This revision was merged to the branch mainline in revision 4680.
  • Revision ID: andrew.bennetts@canonical.com-20090727053500-q76zsn2dx33jhmj5
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
#
15
15
# You should have received a copy of the GNU General Public License
16
16
# along with this program; if not, write to the Free Software
17
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
18
 
19
19
 
20
20
"""BzrDir implementation tests for bzr.
21
21
 
22
22
These test the conformance of all the bzrdir variations to the expected API.
23
23
Specific tests for individual formats are in the tests/test_bzrdir.py file
24
 
rather than in tests/branch_implementations/*.py.
 
24
rather than in tests/per_branch/*.py.
25
25
"""
26
26
 
27
27
from bzrlib.bzrdir import BzrDirFormat
28
28
from bzrlib.tests import (
29
 
                          adapt_modules,
30
29
                          default_transport,
 
30
                          multiply_tests,
31
31
                          TestCaseWithTransport,
32
 
                          TestScenarioApplier,
33
32
                          )
34
33
from bzrlib.transport.memory import MemoryServer
35
34
 
36
35
 
37
 
class BzrDirTestProviderAdapter(TestScenarioApplier):
38
 
    """A tool to generate a suite testing multiple bzrdir formats at once.
 
36
def make_scenarios(vfs_factory, transport_server, transport_readonly_server,
 
37
    formats, name_suffix=''):
 
38
    """Transform the input to a list of scenarios.
39
39
 
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
43
 
    easy to identify.
 
40
    :param formats: A list of bzrdir_format objects.
 
41
    :param vfs_server: A factory to create a Transport Server which has
 
42
        all the VFS methods working, and is writable.
44
43
    """
45
 
 
46
 
    def __init__(self, vfs_factory, transport_server, transport_readonly_server,
47
 
        formats, name_suffix=''):
48
 
        """Create an object to adapt tests.
49
 
 
50
 
        :param vfs_server: A factory to create a Transport Server which has
51
 
            all the VFS methods working, and is writable.
52
 
        """
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)
58
 
 
59
 
    def formats_to_scenarios(self, formats):
60
 
        """Transform the input formats to a list of scenarios.
61
 
 
62
 
        :param formats: A list of bzrdir_format objects.
63
 
        """
64
 
        result = []
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,
73
 
                })
74
 
            result.append(scenario)
75
 
        return result
 
44
    result = []
 
45
    for format in formats:
 
46
        scenario_name = format.__class__.__name__
 
47
        scenario_name += name_suffix
 
48
        scenario = (scenario_name, {
 
49
            "vfs_transport_factory": vfs_factory,
 
50
            "transport_server": transport_server,
 
51
            "transport_readonly_server": transport_readonly_server,
 
52
            "bzrdir_format": format,
 
53
            })
 
54
        result.append(scenario)
 
55
    return result
76
56
 
77
57
 
78
58
class TestCaseWithBzrDir(TestCaseWithTransport):
93
73
            relpath, format=format)
94
74
 
95
75
 
96
 
def load_tests(basic_tests, module, loader):
97
 
    result = loader.suiteClass()
98
 
    # add the tests for this module
99
 
    result.addTests(basic_tests)
100
 
 
101
 
    test_bzrdir_implementations = [
102
 
        'bzrlib.tests.bzrdir_implementations.test_bzrdir',
 
76
def load_tests(standard_tests, module, loader):
 
77
    test_per_bzrdir = [
 
78
        'bzrlib.tests.per_bzrdir.test_bzrdir',
 
79
        'bzrlib.tests.per_bzrdir.test_push',
103
80
        ]
 
81
    submod_tests = loader.loadTestsFromModuleNames(test_per_bzrdir)
104
82
    formats = BzrDirFormat.known_formats()
105
 
    adapter = BzrDirTestProviderAdapter(
 
83
    scenarios = make_scenarios(
106
84
        default_transport,
107
85
        None,
108
86
        # None here will cause a readonly decorator to be created
109
87
        # by the TestCaseWithTransport.get_readonly_transport method.
110
88
        None,
111
89
        formats)
112
 
    # add the tests for the sub modules
113
 
    adapt_modules(test_bzrdir_implementations, adapter, loader, result)
114
 
 
115
 
    # This will always add the tests for smart server transport, regardless of
116
 
    # the --transport option the user specified to 'bzr selftest'.
 
90
    # This will always add scenarios using the smart server.
117
91
    from bzrlib.smart.server import (
118
92
        ReadonlySmartTCPServer_for_testing,
119
93
        ReadonlySmartTCPServer_for_testing_v2_only,
121
95
        SmartTCPServer_for_testing_v2_only,
122
96
        )
123
97
    from bzrlib.remote import RemoteBzrDirFormat
124
 
 
125
 
    # test the remote server behaviour using a MemoryTransport
126
 
    smart_server_suite = loader.suiteClass()
127
 
    adapt_to_smart_server = BzrDirTestProviderAdapter(
 
98
    # test the remote server behaviour when backed with a MemoryTransport
 
99
    # Once for the current version
 
100
    scenarios.extend(make_scenarios(
128
101
        MemoryServer,
129
102
        SmartTCPServer_for_testing,
130
103
        ReadonlySmartTCPServer_for_testing,
131
104
        [(RemoteBzrDirFormat())],
132
 
        name_suffix='-default')
133
 
    adapt_modules(test_bzrdir_implementations,
134
 
                  adapt_to_smart_server,
135
 
                  loader,
136
 
                  smart_server_suite)
137
 
    adapt_to_smart_server = BzrDirTestProviderAdapter(
 
105
        name_suffix='-default'))
 
106
    # And once with < 1.6 - the 'v2' protocol.
 
107
    scenarios.extend(make_scenarios(
138
108
        MemoryServer,
139
109
        SmartTCPServer_for_testing_v2_only,
140
110
        ReadonlySmartTCPServer_for_testing_v2_only,
141
111
        [(RemoteBzrDirFormat())],
142
 
        name_suffix='-v2')
143
 
    adapt_modules(test_bzrdir_implementations,
144
 
                  adapt_to_smart_server,
145
 
                  loader,
146
 
                  smart_server_suite)
147
 
    result.addTests(smart_server_suite)
148
 
 
149
 
    return result
 
112
        name_suffix='-v2'))
 
113
    # add the tests for the sub modules
 
114
    return multiply_tests(submod_tests, scenarios, standard_tests)