~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

  • Committer: Robert Collins
  • Date: 2009-08-27 22:17:35 UTC
  • mto: This revision was merged to the branch mainline in revision 4663.
  • Revision ID: robertc@robertcollins.net-20090827221735-dck1jb1uhktda57h
Refactor creation and shutdown of test servers to use a common helper,
reducing duplicated code, fixing a number of small race conditions where
servers may not get shut down and making tests that use such servers a
little easier to read.

Show diffs side-by-side

added added

removed removed

Lines of Context:
928
928
    def _lock_broken(self, result):
929
929
        self._lock_actions.append(('broken', result))
930
930
 
 
931
    def start_server(self, transport_server, backing_server=None):
 
932
        """Start transport_server for this test.
 
933
 
 
934
        This starts the server, registers a cleanup for it and permits the
 
935
        server's urls to be used.
 
936
        """
 
937
        if backing_server is None:
 
938
            transport_server.setUp()
 
939
        else:
 
940
            try:
 
941
                transport_server.setUp(backing_server)
 
942
            except TypeError, e:
 
943
                # This should never happen; the try:Except here is to assist
 
944
                # developers having to update code rather than seeing an
 
945
                # uninformative TypeError.
 
946
                raise Exception, "Old server API in use: %s, %s" % (
 
947
                    transport_server, e)
 
948
        self.addCleanup(transport_server.tearDown)
 
949
 
931
950
    def _ndiff_strings(self, a, b):
932
951
        """Return ndiff between two strings containing lines.
933
952
 
2067
2086
        if self.__readonly_server is None:
2068
2087
            if self.transport_readonly_server is None:
2069
2088
                # readonly decorator requested
2070
 
                # bring up the server
2071
2089
                self.__readonly_server = ReadonlyServer()
2072
 
                self.__readonly_server.setUp(self.get_vfs_only_server())
2073
2090
            else:
 
2091
                # explicit readonly transport.
2074
2092
                self.__readonly_server = self.create_transport_readonly_server()
2075
 
                self.__readonly_server.setUp(self.get_vfs_only_server())
2076
 
            self.addCleanup(self.__readonly_server.tearDown)
 
2093
            self.start_server(self.__readonly_server,
 
2094
                self.get_vfs_only_server())
2077
2095
        return self.__readonly_server
2078
2096
 
2079
2097
    def get_readonly_url(self, relpath=None):
2098
2116
        """
2099
2117
        if self.__vfs_server is None:
2100
2118
            self.__vfs_server = MemoryServer()
2101
 
            self.__vfs_server.setUp()
2102
 
            self.addCleanup(self.__vfs_server.tearDown)
 
2119
            self.start_server(self.__vfs_server)
2103
2120
        return self.__vfs_server
2104
2121
 
2105
2122
    def get_server(self):
2112
2129
        then the self.get_vfs_server is returned.
2113
2130
        """
2114
2131
        if self.__server is None:
2115
 
            if self.transport_server is None or self.transport_server is self.vfs_transport_factory:
2116
 
                return self.get_vfs_only_server()
 
2132
            if (self.transport_server is None or self.transport_server is
 
2133
                self.vfs_transport_factory):
 
2134
                self.__server = self.get_vfs_only_server()
2117
2135
            else:
2118
2136
                # bring up a decorated means of access to the vfs only server.
2119
2137
                self.__server = self.transport_server()
2120
 
                try:
2121
 
                    self.__server.setUp(self.get_vfs_only_server())
2122
 
                except TypeError, e:
2123
 
                    # This should never happen; the try:Except here is to assist
2124
 
                    # developers having to update code rather than seeing an
2125
 
                    # uninformative TypeError.
2126
 
                    raise Exception, "Old server API in use: %s, %s" % (self.__server, e)
2127
 
            self.addCleanup(self.__server.tearDown)
 
2138
                self.start_server(self.__server, self.get_vfs_only_server())
2128
2139
        return self.__server
2129
2140
 
2130
2141
    def _adjust_url(self, base, relpath):
2263
2274
 
2264
2275
    def make_smart_server(self, path):
2265
2276
        smart_server = server.SmartTCPServer_for_testing()
2266
 
        smart_server.setUp(self.get_server())
 
2277
        self.start_server(smart_server, self.get_server())
2267
2278
        remote_transport = get_transport(smart_server.get_url()).clone(path)
2268
 
        self.addCleanup(smart_server.tearDown)
2269
2279
        return remote_transport
2270
2280
 
2271
2281
    def make_branch_and_memory_tree(self, relpath, format=None):
2472
2482
        """
2473
2483
        if self.__vfs_server is None:
2474
2484
            self.__vfs_server = self.vfs_transport_factory()
2475
 
            self.__vfs_server.setUp()
2476
 
            self.addCleanup(self.__vfs_server.tearDown)
 
2485
            self.start_server(self.__vfs_server)
2477
2486
        return self.__vfs_server
2478
2487
 
2479
2488
    def make_branch_and_tree(self, relpath, format=None):