Rev 5269: Merge sftp-leaks into catch-them-all in file:///home/vila/src/bzr/experimental/leaking-tests/

Vincent Ladeuil v.ladeuil+lp at free.fr
Fri Jun 11 17:31:53 BST 2010


At file:///home/vila/src/bzr/experimental/leaking-tests/

------------------------------------------------------------
revno: 5269 [merge]
revision-id: v.ladeuil+lp at free.fr-20100611163153-nxozvs7mhq2j1uoh
parent: v.ladeuil+lp at free.fr-20100611121120-l4vq9i51nftac2un
parent: v.ladeuil+lp at free.fr-20100611163153-1n9icwp4ongkmexh
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: catch-them-all
timestamp: Fri 2010-06-11 18:31:53 +0200
message:
  Merge sftp-leaks into catch-them-all
modified:
  bzrlib/tests/http_utils.py     HTTPTestUtil.py-20050914180604-247d3aafb7a43343
  bzrlib/tests/test_http.py      testhttp.py-20051018020158-b2eef6e867c514d9
-------------- next part --------------
=== modified file 'bzrlib/tests/http_utils.py'
--- a/bzrlib/tests/http_utils.py	2010-06-11 10:59:23 +0000
+++ b/bzrlib/tests/http_utils.py	2010-06-11 16:31:34 +0000
@@ -107,18 +107,21 @@
     backed by regular disk files.
     """
 
-    # This can be overriden or parametrized by daughter clasess if needed, but
-    # it must exist so that the create_transport_readonly_server() method can
-    # propagate it.
+    # These attributes can be overriden or parametrized by daughter clasess if
+    # needed, but must exist so that the create_transport_readonly_server()
+    # method (or any method creating an http(s) server can propagate it.
     _protocol_version = None
+    _url_protocol = 'http'
 
     def setUp(self):
         super(TestCaseWithWebserver, self).setUp()
         self.transport_readonly_server = http_server.HttpServer
 
     def create_transport_readonly_server(self):
-        return self.transport_readonly_server(
+        server = self.transport_readonly_server(
             protocol_version=self._protocol_version)
+        server._url_protocol = self._url_protocol
+        return server
 
 
 class TestCaseWithTwoWebservers(TestCaseWithWebserver):
@@ -137,8 +140,10 @@
 
         This is mostly a hook for daughter classes.
         """
-        return self.transport_secondary_server(
+        server = self.transport_secondary_server(
             protocol_version=self._protocol_version)
+        server._url_protocol = self._url_protocol
+        return server
 
     def get_secondary_server(self):
         """Get the server instance for the secondary transport."""
@@ -147,6 +152,15 @@
             self.start_server(self.__secondary_server)
         return self.__secondary_server
 
+    def get_secondary_url(self, relpath=None):
+        base = self.get_secondary_server().get_url()
+        return self._adjust_url(base, relpath)
+
+    def get_secondary_transport(self, relpath=None):
+        t = get_transport(self.get_secondary_url(relpath))
+        self.assertTrue(t.is_readonly())
+        return t
+
 
 class ProxyServer(http_server.HttpServer):
     """A proxy test server for http transports."""
@@ -226,20 +240,39 @@
    The 'old' server is redirected to the 'new' server.
    """
 
+   def setUp(self):
+       super(TestCaseWithRedirectedWebserver, self).setUp()
+       # The redirections will point to the new server
+       self.new_server = self.get_readonly_server()
+       # The requests to the old server will be redirected to the new server
+       self.old_server = self.get_secondary_server()
+
    def create_transport_secondary_server(self):
        """Create the secondary server redirecting to the primary server"""
        new = self.get_readonly_server()
        redirecting = HTTPServerRedirecting(
            protocol_version=self._protocol_version)
        redirecting.redirect_to(new.host, new.port)
+       redirecting._url_protocol = self._url_protocol
        return redirecting
 
-   def setUp(self):
-       super(TestCaseWithRedirectedWebserver, self).setUp()
-       # The redirections will point to the new server
-       self.new_server = self.get_readonly_server()
-       # The requests to the old server will be redirected
-       self.old_server = self.get_secondary_server()
+   def get_old_url(self, relpath=None):
+        base = self.old_server.get_url()
+        return self._adjust_url(base, relpath)
+
+   def get_old_transport(self, relpath=None):
+        t = get_transport(self.get_old_url(relpath))
+        self.assertTrue(t.is_readonly())
+        return t
+
+   def get_new_url(self, relpath=None):
+        base = self.new_server.get_url()
+        return self._adjust_url(base, relpath)
+
+   def get_new_transport(self, relpath=None):
+        t = get_transport(self.get_new_url(relpath))
+        self.assertTrue(t.is_readonly())
+        return t
 
 
 class AuthRequestHandler(http_server.TestingHTTPRequestHandler):

=== modified file 'bzrlib/tests/test_http.py'
--- a/bzrlib/tests/test_http.py	2010-06-11 10:59:55 +0000
+++ b/bzrlib/tests/test_http.py	2010-06-11 16:31:34 +0000
@@ -81,13 +81,13 @@
     transport_scenarios = [
         ('urllib', dict(_transport=_urllib.HttpTransport_urllib,
                         _server=http_server.HttpServer_urllib,
-                        _qualified_prefix='http+urllib',)),
+                        _url_protocol='http+urllib',)),
         ]
     if features.pycurl.available():
         transport_scenarios.append(
             ('pycurl', dict(_transport=PyCurlTransport,
                             _server=http_server.HttpServer_PyCurl,
-                            _qualified_prefix='http+pycurl',)))
+                            _url_protocol='http+pycurl',)))
     tests.multiply_tests(t_tests, transport_scenarios, result)
 
     protocol_scenarios = [
@@ -434,7 +434,7 @@
         server.start_server()
         try:
             url = server.get_url()
-            self.assertTrue(url.startswith('%s://' % self._qualified_prefix))
+            self.assertTrue(url.startswith('%s://' % self._url_protocol))
         finally:
             server.stop_server()
 
@@ -485,7 +485,7 @@
 
     def test_http_has(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertEqual(t.has('foo/bar'), True)
         self.assertEqual(len(server.logs), 1)
         self.assertContainsRe(server.logs[0],
@@ -493,14 +493,14 @@
 
     def test_http_has_not_found(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertEqual(t.has('not-found'), False)
         self.assertContainsRe(server.logs[1],
             r'"HEAD /not-found HTTP/1.." 404 - "-" "bzr/')
 
     def test_http_get(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         fp = t.get('foo/bar')
         self.assertEqualDiff(
             fp.read(),
@@ -529,7 +529,7 @@
     """Test registrations of various http implementations"""
 
     def test_http_registered(self):
-        t = transport.get_transport('%s://foo.com/' % self._qualified_prefix)
+        t = transport.get_transport('%s://foo.com/' % self._url_protocol)
         self.assertIsInstance(t, transport.Transport)
         self.assertIsInstance(t, self._transport)
 
@@ -538,10 +538,11 @@
 
     def test_post_body_is_received(self):
         server = RecordingServer(expect_body_tail='end-of-body',
-            scheme=self._qualified_prefix)
+                                 scheme=self._url_protocol)
         self.start_server(server)
         url = server.get_url()
-        http_transport = self._transport(url)
+        # FIXME: needs a cleanup -- vila 20100611
+        http_transport = transport.get_transport(url)
         code, response = http_transport._post('abc def end-of-body')
         self.assertTrue(
             server.received_bytes.startswith('POST /.bzr/smart HTTP/1.'))
@@ -591,8 +592,10 @@
     _req_handler_class = http_server.TestingHTTPRequestHandler
 
     def create_transport_readonly_server(self):
-        return http_server.HttpServer(self._req_handler_class,
-                                      protocol_version=self._protocol_version)
+        server = http_server.HttpServer(self._req_handler_class,
+                                        protocol_version=self._protocol_version)
+        server._url_protocol = self._url_protocol
+        return server
 
     def _testing_pycurl(self):
         # TODO: This is duplicated for lots of the classes in this file
@@ -614,8 +617,7 @@
     _req_handler_class = WallRequestHandler
 
     def test_http_has(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         # Unfortunately httplib (see HTTPResponse._read_status
         # for details) make no distinction between a closed
         # socket and badly formatted status line, so we can't
@@ -627,8 +629,7 @@
                           t.has, 'foo/bar')
 
     def test_http_get(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertRaises((errors.ConnectionError, errors.ConnectionReset,
                            errors.InvalidHttpResponse),
                           t.get, 'foo/bar')
@@ -651,13 +652,11 @@
     _req_handler_class = BadStatusRequestHandler
 
     def test_http_has(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertRaises(errors.InvalidHttpResponse, t.has, 'foo/bar')
 
     def test_http_get(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertRaises(errors.InvalidHttpResponse, t.get, 'foo/bar')
 
 
@@ -680,6 +679,7 @@
     _req_handler_class = InvalidStatusRequestHandler
 
     def test_http_has(self):
+        # FIXME: that should be fixed now, needs testing -- vila 20100611
         if self._testing_pycurl() and self._protocol_version == 'HTTP/1.1':
             raise tests.KnownFailure(
                 'pycurl hangs if the server send back garbage')
@@ -718,13 +718,11 @@
         super(TestBadProtocolServer, self).setUp()
 
     def test_http_has(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertRaises(errors.InvalidHttpResponse, t.has, 'foo/bar')
 
     def test_http_get(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertRaises(errors.InvalidHttpResponse, t.get, 'foo/bar')
 
 
@@ -744,13 +742,11 @@
     _req_handler_class = ForbiddenRequestHandler
 
     def test_http_has(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertRaises(errors.TransportError, t.has, 'foo/bar')
 
     def test_http_get(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         self.assertRaises(errors.TransportError, t.get, 'foo/bar')
 
 
@@ -795,8 +791,7 @@
         self.build_tree_contents([('a', '0123456789')],)
 
     def test_readv(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         l = list(t.readv('a', ((0, 1), (1, 1), (3, 2), (9, 1))))
         self.assertEqual(l[0], (0, '0'))
         self.assertEqual(l[1], (1, '1'))
@@ -804,8 +799,7 @@
         self.assertEqual(l[3], (9, '9'))
 
     def test_readv_out_of_order(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         l = list(t.readv('a', ((1, 1), (9, 1), (0, 1), (3, 2))))
         self.assertEqual(l[0], (1, '1'))
         self.assertEqual(l[1], (9, '9'))
@@ -813,8 +807,7 @@
         self.assertEqual(l[3], (3, '34'))
 
     def test_readv_invalid_ranges(self):
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
 
         # This is intentionally reading off the end of the file
         # since we are sure that it cannot get there
@@ -828,7 +821,7 @@
 
     def test_readv_multiple_get_requests(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         # force transport to issue multiple requests
         t._max_readv_combine = 1
         t._max_get_ranges = 1
@@ -842,7 +835,7 @@
 
     def test_readv_get_max_size(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         # force transport to issue multiple requests by limiting the number of
         # bytes by request. Note that this apply to coalesced offsets only, a
         # single range will keep its size even if bigger than the limit.
@@ -857,7 +850,7 @@
 
     def test_complete_readv_leave_pipe_clean(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         # force transport to issue multiple requests
         t._get_max_size = 2
         l = list(t.readv('a', ((0, 1), (1, 1), (2, 4), (6, 4))))
@@ -868,7 +861,7 @@
 
     def test_incomplete_readv_leave_pipe_clean(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         # force transport to issue multiple requests
         t._get_max_size = 2
         # Don't collapse readv results into a list so that we leave unread
@@ -1024,7 +1017,7 @@
 
     def test_readv_with_short_reads(self):
         server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         # Force separate ranges for each offset
         t._bytes_to_read_before_seek = 0
         ireadv = iter(t.readv('a', ((0, 1), (2, 1), (4, 2), (9, 1))))
@@ -1081,9 +1074,6 @@
         return LimitedRangeHTTPServer(range_limit=self.range_limit,
                                       protocol_version=self._protocol_version)
 
-    def get_transport(self):
-        return self._transport(self.get_readonly_server().get_url())
-
     def setUp(self):
         http_utils.TestCaseWithWebserver.setUp(self)
         # We need to manipulate ranges that correspond to real chunks in the
@@ -1093,14 +1083,14 @@
         self.build_tree_contents([('a', content)],)
 
     def test_few_ranges(self):
-        t = self.get_transport()
+        t = self.get_readonly_transport()
         l = list(t.readv('a', ((0, 4), (1024, 4), )))
         self.assertEqual(l[0], (0, '0000'))
         self.assertEqual(l[1], (1024, '0001'))
         self.assertEqual(1, self.get_readonly_server().GET_request_nb)
 
     def test_more_ranges(self):
-        t = self.get_transport()
+        t = self.get_readonly_transport()
         l = list(t.readv('a', ((0, 4), (1024, 4), (4096, 4), (8192, 4))))
         self.assertEqual(l[0], (0, '0000'))
         self.assertEqual(l[1], (1024, '0001'))
@@ -1160,24 +1150,24 @@
     """
 
     # FIXME: We don't have an https server available, so we don't
-    # test https connections.
+    # test https connections. --vila toolongago
 
     def setUp(self):
         super(TestProxyHttpServer, self).setUp()
+        self.transport_secondary_server = http_utils.ProxyServer
         self.build_tree_contents([('foo', 'contents of foo\n'),
                                   ('foo-proxied', 'proxied contents of foo\n')])
         # Let's setup some attributes for tests
-        self.server = self.get_readonly_server()
-        self.proxy_address = '%s:%d' % (self.server.host, self.server.port)
+        server = self.get_readonly_server()
+        self.server_host_port = '%s:%d' % (server.host, server.port)
         if self._testing_pycurl():
             # Oh my ! pycurl does not check for the port as part of
             # no_proxy :-( So we just test the host part
-            self.no_proxy_host = self.server.host
+            self.no_proxy_host = server.host
         else:
-            self.no_proxy_host = self.proxy_address
+            self.no_proxy_host = self.server_host_port
         # The secondary server is the proxy
-        self.proxy = self.get_secondary_server()
-        self.proxy_url = self.proxy.get_url()
+        self.proxy_url = self.get_secondary_url()
         self._old_env = {}
 
     def _testing_pycurl(self):
@@ -1185,12 +1175,6 @@
         return (features.pycurl.available()
                 and self._transport == PyCurlTransport)
 
-    def create_transport_secondary_server(self):
-        """Creates an http server that will serve files with
-        '-proxied' appended to their names.
-        """
-        return http_utils.ProxyServer(protocol_version=self._protocol_version)
-
     def _install_env(self, env):
         for name, value in env.iteritems():
             self._old_env[name] = osutils.set_or_unset_env(name, value)
@@ -1201,8 +1185,7 @@
 
     def proxied_in_env(self, env):
         self._install_env(env)
-        url = self.server.get_url()
-        t = self._transport(url)
+        t = self.get_readonly_transport()
         try:
             self.assertEqual('proxied contents of foo\n', t.get('foo').read())
         finally:
@@ -1210,8 +1193,7 @@
 
     def not_proxied_in_env(self, env):
         self._install_env(env)
-        url = self.server.get_url()
-        t = self._transport(url)
+        t = self.get_readonly_transport()
         try:
             self.assertEqual('contents of foo\n', t.get('foo').read())
         finally:
@@ -1259,11 +1241,11 @@
             # pycurl *ignores* invalid proxy env variables. If that ever change
             # in the future, this test will fail indicating that pycurl do not
             # ignore anymore such variables.
-            self.not_proxied_in_env({'http_proxy': self.proxy_address})
+            self.not_proxied_in_env({'http_proxy': self.server_host_port})
         else:
             self.assertRaises(errors.InvalidURL,
                               self.proxied_in_env,
-                              {'http_proxy': self.proxy_address})
+                              {'http_proxy': self.server_host_port})
 
 
 class TestRanges(http_utils.TestCaseWithWebserver):
@@ -1272,24 +1254,24 @@
     def setUp(self):
         http_utils.TestCaseWithWebserver.setUp(self)
         self.build_tree_contents([('a', '0123456789')],)
-        server = self.get_readonly_server()
-        self.transport = self._transport(server.get_url())
 
     def create_transport_readonly_server(self):
         return http_server.HttpServer(protocol_version=self._protocol_version)
 
     def _file_contents(self, relpath, ranges):
+        t = self.get_readonly_transport()
         offsets = [ (start, end - start + 1) for start, end in ranges]
-        coalesce = self.transport._coalesce_offsets
+        coalesce = t._coalesce_offsets
         coalesced = list(coalesce(offsets, limit=0, fudge_factor=0))
-        code, data = self.transport._get(relpath, coalesced)
+        code, data = t._get(relpath, coalesced)
         self.assertTrue(code in (200, 206),'_get returns: %d' % code)
         for start, end in ranges:
             data.seek(start)
             yield data.read(end - start + 1)
 
     def _file_tail(self, relpath, tail_amount):
-        code, data = self.transport._get(relpath, [], tail_amount)
+        t = self.get_readonly_transport()
+        code, data = t._get(relpath, [], tail_amount)
         self.assertTrue(code in (200, 206),'_get returns: %d' % code)
         data.seek(-tail_amount, 2)
         return data.read(tail_amount)
@@ -1314,32 +1296,21 @@
 class TestHTTPRedirections(http_utils.TestCaseWithRedirectedWebserver):
     """Test redirection between http servers."""
 
-    def create_transport_secondary_server(self):
-        """Create the secondary server redirecting to the primary server"""
-        new = self.get_readonly_server()
-
-        redirecting = http_utils.HTTPServerRedirecting(
-            protocol_version=self._protocol_version)
-        redirecting.redirect_to(new.host, new.port)
-        return redirecting
-
     def setUp(self):
         super(TestHTTPRedirections, self).setUp()
         self.build_tree_contents([('a', '0123456789'),
                                   ('bundle',
                                   '# Bazaar revision bundle v0.9\n#\n')
                                   ],)
-        # The requests to the old server will be redirected to the new server
-        self.old_transport = self._transport(self.old_server.get_url())
 
     def test_redirected(self):
-        self.assertRaises(errors.RedirectRequested, self.old_transport.get, 'a')
-        t = self._transport(self.new_server.get_url())
-        self.assertEqual('0123456789', t.get('a').read())
+        self.assertRaises(errors.RedirectRequested,
+                          self.get_old_transport().get, 'a')
+        self.assertEqual('0123456789', self.get_new_transport().get('a').read())
 
     def test_read_redirected_bundle_from_url(self):
         from bzrlib.bundle import read_bundle_from_url
-        url = self.old_transport.abspath('bundle')
+        url = self.get_old_url('bundle')
         bundle = self.applyDeprecated(deprecated_in((1, 12, 0)),
                 read_bundle_from_url, url)
         # If read_bundle_from_url was successful we get an empty bundle
@@ -1384,7 +1355,7 @@
         if (features.pycurl.available()
             and self._transport == PyCurlTransport):
             raise tests.TestNotApplicable(
-                "pycurl doesn't redirect silently annymore")
+                "pycurl doesn't redirect silently anymore")
         super(TestHTTPSilentRedirections, self).setUp()
         install_redirected_request(self)
         self.build_tree_contents([('a','a'),
@@ -1400,27 +1371,18 @@
                                   ('5/a', 'redirected 5 times'),
                                   ],)
 
-        self.old_transport = self._transport(self.old_server.get_url())
-
-    def create_transport_secondary_server(self):
-        """Create the secondary server, redirections are defined in the tests"""
-        return http_utils.HTTPServerRedirecting(
-            protocol_version=self._protocol_version)
-
     def test_one_redirection(self):
-        t = self.old_transport
-
-        req = RedirectedRequest('GET', t.abspath('a'))
+        t = self.get_old_transport()
+        req = RedirectedRequest('GET', t._remote_path('a'))
         new_prefix = 'http://%s:%s' % (self.new_server.host,
                                        self.new_server.port)
         self.old_server.redirections = \
             [('(.*)', r'%s/1\1' % (new_prefix), 301),]
-        self.assertEqual('redirected once',t._perform(req).read())
+        self.assertEqual('redirected once', t._perform(req).read())
 
     def test_five_redirections(self):
-        t = self.old_transport
-
-        req = RedirectedRequest('GET', t.abspath('a'))
+        t = self.get_old_transport()
+        req = RedirectedRequest('GET', t._remote_path('a'))
         old_prefix = 'http://%s:%s' % (self.old_server.host,
                                        self.old_server.port)
         new_prefix = 'http://%s:%s' % (self.new_server.host,
@@ -1432,7 +1394,7 @@
             ('/4(.*)', r'%s/5\1' % (new_prefix), 301),
             ('(/[^/]+)', r'%s/1\1' % (old_prefix), 301),
             ]
-        self.assertEqual('redirected 5 times',t._perform(req).read())
+        self.assertEqual('redirected 5 times', t._perform(req).read())
 
 
 class TestDoCatchRedirections(http_utils.TestCaseWithRedirectedWebserver):
@@ -1442,13 +1404,13 @@
         super(TestDoCatchRedirections, self).setUp()
         self.build_tree_contents([('a', '0123456789'),],)
 
-        self.old_transport = self._transport(self.old_server.get_url())
+        self.old_transport = self.get_old_transport()
 
     def get_a(self, transport):
         return transport.get('a')
 
     def test_no_redirection(self):
-        t = self._transport(self.new_server.get_url())
+        t = self.get_new_transport()
 
         # We use None for redirected so that we fail if redirected
         self.assertEqual('0123456789',
@@ -1458,10 +1420,10 @@
     def test_one_redirection(self):
         self.redirections = 0
 
-        def redirected(transport, exception, redirection_notice):
+        def redirected(t, exception, redirection_notice):
             self.redirections += 1
-            dir, file = urlutils.split(exception.target)
-            return self._transport(dir)
+            redirected_t = t._redirected_to(exception.source, exception.target)
+            return redirected_t
 
         self.assertEqual('0123456789',
                          transport.do_catching_redirections(
@@ -1497,7 +1459,9 @@
                                   ('b', 'contents of b\n'),])
 
     def create_transport_readonly_server(self):
-        return self._auth_server(protocol_version=self._protocol_version)
+        server = self._auth_server(protocol_version=self._protocol_version)
+        server._url_protocol = self._url_protocol
+        return server
 
     def _testing_pycurl(self):
         # TODO: This is duplicated for lots of the classes in this file
@@ -1516,7 +1480,8 @@
         return url
 
     def get_user_transport(self, user, password):
-        return self._transport(self.get_user_url(user, password))
+        t = transport.get_transport(self.get_user_url(user, password))
+        return t
 
     def test_no_user(self):
         self.server.add_user('joe', 'foo')
@@ -1707,7 +1672,7 @@
 
     def get_user_transport(self, user, password):
         self._install_env({'all_proxy': self.get_user_url(user, password)})
-        return self._transport(self.server.get_url())
+        return TestAuth.get_user_transport(self, user, password)
 
     def _install_env(self, env):
         for name, value in env.iteritems():
@@ -1756,15 +1721,17 @@
         # We use the VFS layer as part of HTTP tunnelling tests.
         self._captureVar('BZR_NO_SMART_VFS', None)
         self.transport_readonly_server = http_utils.HTTPServerWithSmarts
+        self.http_server = self.get_readonly_server()
 
     def create_transport_readonly_server(self):
-        return http_utils.HTTPServerWithSmarts(
+        server = http_utils.HTTPServerWithSmarts(
             protocol_version=self._protocol_version)
+        server._url_protocol = self._url_protocol
+        return server
 
     def test_open_bzrdir(self):
         branch = self.make_branch('relpath')
-        http_server = self.get_readonly_server()
-        url = http_server.get_url() + 'relpath'
+        url = self.http_server.get_url() + 'relpath'
         bd = bzrdir.BzrDir.open(url)
         self.assertIsInstance(bd, _mod_remote.RemoteBzrDir)
 
@@ -1773,8 +1740,7 @@
         # The 'readv' command in the smart protocol both sends and receives
         # bulk data, so we use that.
         self.build_tree(['data-file'])
-        http_server = self.get_readonly_server()
-        http_transport = self._transport(http_server.get_url())
+        http_transport = transport.get_transport(self.http_server.get_url())
         medium = http_transport.get_smart_medium()
         # Since we provide the medium, the url below will be mostly ignored
         # during the test, as long as the path is '/'.
@@ -1788,15 +1754,14 @@
         post_body = 'hello\n'
         expected_reply_body = 'ok\x012\n'
 
-        http_server = self.get_readonly_server()
-        http_transport = self._transport(http_server.get_url())
+        http_transport = transport.get_transport(self.http_server.get_url())
         medium = http_transport.get_smart_medium()
         response = medium.send_http_smart_request(post_body)
         reply_body = response.read()
         self.assertEqual(expected_reply_body, reply_body)
 
     def test_smart_http_server_post_request_handler(self):
-        httpd = self.get_readonly_server().server
+        httpd = self.http_server.server
 
         socket = SampleSocket(
             'POST /.bzr/smart %s \r\n' % self._protocol_version
@@ -1834,8 +1799,7 @@
 
     def test_probe_smart_server(self):
         """Test error handling against server refusing smart requests."""
-        server = self.get_readonly_server()
-        t = self._transport(server.get_url())
+        t = self.get_readonly_transport()
         # No need to build a valid smart request here, the server will not even
         # try to interpret it.
         self.assertRaises(errors.SmartProtocolError,
@@ -1957,30 +1921,10 @@
     We use a special purpose server to control the bytes sent and received and
     be able to predict the activity on the client socket.
     """
-
-    def setUp(self):
-        tests.TestCase.setUp(self)
-        self.server = self._activity_server(self._protocol_version)
-        self.server.start_server()
-        self.activities = {}
-        def report_activity(t, bytes, direction):
-            count = self.activities.get(direction, 0)
-            count += bytes
-            self.activities[direction] = count
-
-        # We override at class level because constructors may propagate the
-        # bound method and render instance overriding ineffective (an
-        # alternative would be to define a specific ui factory instead...)
-        self.orig_report_activity = self._transport._report_activity
-        self._transport._report_activity = report_activity
-
-    def tearDown(self):
-        self._transport._report_activity = self.orig_report_activity
-        self.server.stop_server()
-        tests.TestCase.tearDown(self)
-
     def get_transport(self):
-        return self._transport(self.server.get_url())
+        t = self._transport(self.server.get_url())
+        # FIXME: Needs cleanup -- vila 20100611
+        return t
 
     def assertActivitiesMatch(self):
         self.assertEqual(self.server.bytes_read,
@@ -2103,22 +2047,17 @@
         tests.TestCase.setUp(self)
         self.server = self._activity_server(self._protocol_version)
         self.server.start_server()
+        self.addCleanup(self.server.stop_server)
+
         self.activities = {}
         def report_activity(t, bytes, direction):
             count = self.activities.get(direction, 0)
             count += bytes
             self.activities[direction] = count
-
         # We override at class level because constructors may propagate the
         # bound method and render instance overriding ineffective (an
         # alternative would be to define a specific ui factory instead...)
-        self.orig_report_activity = self._transport._report_activity
-        self._transport._report_activity = report_activity
-
-    def tearDown(self):
-        self._transport._report_activity = self.orig_report_activity
-        self.server.stop_server()
-        tests.TestCase.tearDown(self)
+        self.overrideAttr(self._transport, '_report_activity', report_activity)
 
 
 class TestNoReportActivity(tests.TestCase, TestActivityMixin):
@@ -2131,20 +2070,15 @@
         # test them through their use by the transport than directly (that's a
         # bit less clean but far more simpler and effective).
         self.server = ActivityHTTPServer('HTTP/1.1')
-        self._transport=_urllib.HttpTransport_urllib
+        self._transport = _urllib.HttpTransport_urllib
 
         self.server.start_server()
+        self.addCleanup(self.server.stop_server)
 
         # We override at class level because constructors may propagate the
         # bound method and render instance overriding ineffective (an
         # alternative would be to define a specific ui factory instead...)
-        self.orig_report_activity = self._transport._report_activity
-        self._transport._report_activity = None
-
-    def tearDown(self):
-        self._transport._report_activity = self.orig_report_activity
-        self.server.stop_server()
-        tests.TestCase.tearDown(self)
+        self.overrideAttr(self._transport, '_report_activity', None)
 
     def assertActivitiesMatch(self):
         # Nothing to check here
@@ -2160,18 +2094,6 @@
     _auth_server = http_utils.HTTPBasicAuthServer
     _transport = _urllib.HttpTransport_urllib
 
-    def create_transport_readonly_server(self):
-        return self._auth_server(protocol_version=self._protocol_version)
-
-    def create_transport_secondary_server(self):
-        """Create the secondary server redirecting to the primary server"""
-        new = self.get_readonly_server()
-
-        redirecting = http_utils.HTTPServerRedirecting(
-            protocol_version=self._protocol_version)
-        redirecting.redirect_to(new.host, new.port)
-        return redirecting
-
     def setUp(self):
         super(TestAuthOnRedirected, self).setUp()
         self.build_tree_contents([('a','a'),
@@ -2182,19 +2104,24 @@
                                        self.new_server.port)
         self.old_server.redirections = [
             ('(.*)', r'%s/1\1' % (new_prefix), 301),]
-        self.old_transport = self._transport(self.old_server.get_url())
+        self.old_transport = self.get_old_transport()
         self.new_server.add_user('joe', 'foo')
 
-    def get_a(self, transport):
-        return transport.get('a')
+    def create_transport_readonly_server(self):
+        server = self._auth_server(protocol_version=self._protocol_version)
+        server._url_protocol = self._url_protocol
+        return server
+
+    def get_a(self, t):
+        return t.get('a')
 
     def test_auth_on_redirected_via_do_catching_redirections(self):
         self.redirections = 0
 
-        def redirected(transport, exception, redirection_notice):
+        def redirected(t, exception, redirection_notice):
             self.redirections += 1
-            dir, file = urlutils.split(exception.target)
-            return self._transport(dir)
+            redirected_t = t._redirected_to(exception.source, exception.target)
+            return redirected_t
 
         stdout = tests.StringIOWrapper()
         stderr = tests.StringIOWrapper()



More information about the bazaar-commits mailing list