~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/http_utils.py

  • Committer: Vincent Ladeuil
  • Date: 2010-06-11 16:31:34 UTC
  • mto: (5247.4.12 sftp-leaks)
  • mto: This revision was merged to the branch mainline in revision 5396.
  • Revision ID: v.ladeuil+lp@free.fr-20100611163134-6z4oydq7kw401vdl
Fix a bunch of tests that were building transport objects explicitely instead of relying on self.get_transport() leading to many wrong http implementation objects being tested.

* bzrlib/tests/test_http.py:
(load_tests): Rename _qualified_prefix into _url_protocol to
ensure it's taken into account for all created http servers (and
from there that we create the right kind of transport). Relying on
_transport for that proved to be unreliable (mixed
self.transport(), self.get_transport(),
self.get_readonly_transport, etc calls) and give the wrong
transport objects to the tests.
(TestSpecificRequestHandler.create_transport_readonly_server):
Propagate url_protocol.
(TestHTTPConnections, TestWallServer, TestBadStatusServer)
(TestBadProtocolServer, TestForbiddenServer)
(TestRangeRequestServer, TestLimitedRangeRequestServer)
(TestProxyHttpServer, TestRanges, TestHTTPRedirections)
(TestHTTPSilentRedirections, TestDoCatchRedirections, TestAuth)
(TestProxyAuth, SmartHTTPTunnellingTest, TestAuthOnRedirected):
Stop using self._transport.

* bzrlib/tests/http_utils.py:
(TestCaseWithWebserver): Define and propagate url_protocol like we
did for the http protocol version.
(TestCaseWithTwoWebservers.create_transport_secondary_server):
Propagate url_protocol.
(TestCaseWithTwoWebservers.get_secondary_url)
(TestCaseWithTwoWebservers.get_secondary_transport): Add missing
helpers.
(TestCaseWithRedirectedWebserver.create_transport_secondary_server):
Propagate url_protocol.
(TestCaseWithRedirectedWebserver.get_old_url)
(TestCaseWithRedirectedWebserver.get_old_transport)
(TestCaseWithRedirectedWebserver.get_new_url)
(TestCaseWithRedirectedWebserver.get_new_transport): Add missing
helpers

Show diffs side-by-side

added added

removed removed

Lines of Context:
107
107
    backed by regular disk files.
108
108
    """
109
109
 
110
 
    # This can be overriden or parametrized by daughter clasess if needed, but
111
 
    # it must exist so that the create_transport_readonly_server() method can
112
 
    # propagate it.
 
110
    # These attributes can be overriden or parametrized by daughter clasess if
 
111
    # needed, but must exist so that the create_transport_readonly_server()
 
112
    # method (or any method creating an http(s) server can propagate it.
113
113
    _protocol_version = None
 
114
    _url_protocol = 'http'
114
115
 
115
116
    def setUp(self):
116
117
        super(TestCaseWithWebserver, self).setUp()
117
118
        self.transport_readonly_server = http_server.HttpServer
118
119
 
119
120
    def create_transport_readonly_server(self):
120
 
        return self.transport_readonly_server(
 
121
        server = self.transport_readonly_server(
121
122
            protocol_version=self._protocol_version)
 
123
        server._url_protocol = self._url_protocol
 
124
        return server
122
125
 
123
126
 
124
127
class TestCaseWithTwoWebservers(TestCaseWithWebserver):
137
140
 
138
141
        This is mostly a hook for daughter classes.
139
142
        """
140
 
        return self.transport_secondary_server(
 
143
        server = self.transport_secondary_server(
141
144
            protocol_version=self._protocol_version)
 
145
        server._url_protocol = self._url_protocol
 
146
        return server
142
147
 
143
148
    def get_secondary_server(self):
144
149
        """Get the server instance for the secondary transport."""
147
152
            self.start_server(self.__secondary_server)
148
153
        return self.__secondary_server
149
154
 
 
155
    def get_secondary_url(self, relpath=None):
 
156
        base = self.get_secondary_server().get_url()
 
157
        return self._adjust_url(base, relpath)
 
158
 
 
159
    def get_secondary_transport(self, relpath=None):
 
160
        t = get_transport(self.get_secondary_url(relpath))
 
161
        self.assertTrue(t.is_readonly())
 
162
        return t
 
163
 
150
164
 
151
165
class ProxyServer(http_server.HttpServer):
152
166
    """A proxy test server for http transports."""
226
240
   The 'old' server is redirected to the 'new' server.
227
241
   """
228
242
 
 
243
   def setUp(self):
 
244
       super(TestCaseWithRedirectedWebserver, self).setUp()
 
245
       # The redirections will point to the new server
 
246
       self.new_server = self.get_readonly_server()
 
247
       # The requests to the old server will be redirected to the new server
 
248
       self.old_server = self.get_secondary_server()
 
249
 
229
250
   def create_transport_secondary_server(self):
230
251
       """Create the secondary server redirecting to the primary server"""
231
252
       new = self.get_readonly_server()
232
253
       redirecting = HTTPServerRedirecting(
233
254
           protocol_version=self._protocol_version)
234
255
       redirecting.redirect_to(new.host, new.port)
 
256
       redirecting._url_protocol = self._url_protocol
235
257
       return redirecting
236
258
 
237
 
   def setUp(self):
238
 
       super(TestCaseWithRedirectedWebserver, self).setUp()
239
 
       # The redirections will point to the new server
240
 
       self.new_server = self.get_readonly_server()
241
 
       # The requests to the old server will be redirected
242
 
       self.old_server = self.get_secondary_server()
 
259
   def get_old_url(self, relpath=None):
 
260
        base = self.old_server.get_url()
 
261
        return self._adjust_url(base, relpath)
 
262
 
 
263
   def get_old_transport(self, relpath=None):
 
264
        t = get_transport(self.get_old_url(relpath))
 
265
        self.assertTrue(t.is_readonly())
 
266
        return t
 
267
 
 
268
   def get_new_url(self, relpath=None):
 
269
        base = self.new_server.get_url()
 
270
        return self._adjust_url(base, relpath)
 
271
 
 
272
   def get_new_transport(self, relpath=None):
 
273
        t = get_transport(self.get_new_url(relpath))
 
274
        self.assertTrue(t.is_readonly())
 
275
        return t
243
276
 
244
277
 
245
278
class AuthRequestHandler(http_server.TestingHTTPRequestHandler):