1
# Copyright (C) 2005-2010 Canonical Ltd
1
# Copyright (C) 2005 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
33
from bzrlib.smart import (
32
from bzrlib.smart import medium, protocol
37
33
from bzrlib.tests import http_server
38
from bzrlib.transport import chroot
34
from bzrlib.transport import (
41
40
class HTTPServerWithSmarts(http_server.HttpServer):
59
58
"""Hand the request off to a smart server instance."""
60
backing = transport.get_transport(
61
self.server.test_case_server._home_dir)
59
backing = get_transport(self.server.test_case_server._home_dir)
62
60
chroot_server = chroot.ChrootServer(backing)
63
chroot_server.start_server()
65
t = transport.get_transport(chroot_server.get_url())
63
t = get_transport(chroot_server.get_url())
66
64
self.do_POST_inner(t)
68
chroot_server.stop_server()
66
chroot_server.tearDown()
70
68
def do_POST_inner(self, chrooted_transport):
71
69
self.send_response(200)
108
106
one. This will currently fail if the primary transport is not
109
107
backed by regular disk files.
112
# These attributes can be overriden or parametrized by daughter clasess if
113
# needed, but must exist so that the create_transport_readonly_server()
114
# method (or any method creating an http(s) server) can propagate it.
115
_protocol_version = None
116
_url_protocol = 'http'
119
110
super(TestCaseWithWebserver, self).setUp()
120
111
self.transport_readonly_server = http_server.HttpServer
122
def create_transport_readonly_server(self):
123
server = self.transport_readonly_server(
124
protocol_version=self._protocol_version)
125
server._url_protocol = self._url_protocol
129
114
class TestCaseWithTwoWebservers(TestCaseWithWebserver):
130
115
"""A support class providing readonly urls on two servers that are http://.
143
128
This is mostly a hook for daughter classes.
145
server = self.transport_secondary_server(
146
protocol_version=self._protocol_version)
147
server._url_protocol = self._url_protocol
130
return self.transport_secondary_server()
150
132
def get_secondary_server(self):
151
133
"""Get the server instance for the secondary transport."""
152
134
if self.__secondary_server is None:
153
135
self.__secondary_server = self.create_transport_secondary_server()
154
self.start_server(self.__secondary_server)
136
self.__secondary_server.setUp()
137
self.addCleanup(self.__secondary_server.tearDown)
155
138
return self.__secondary_server
157
def get_secondary_url(self, relpath=None):
158
base = self.get_secondary_server().get_url()
159
return self._adjust_url(base, relpath)
161
def get_secondary_transport(self, relpath=None):
162
t = transport.get_transport(self.get_secondary_url(relpath))
163
self.assertTrue(t.is_readonly())
167
141
class ProxyServer(http_server.HttpServer):
168
142
"""A proxy test server for http transports."""
242
216
The 'old' server is redirected to the 'new' server.
219
def create_transport_secondary_server(self):
220
"""Create the secondary server redirecting to the primary server"""
221
new = self.get_readonly_server()
222
redirecting = HTTPServerRedirecting()
223
redirecting.redirect_to(new.host, new.port)
246
227
super(TestCaseWithRedirectedWebserver, self).setUp()
247
228
# The redirections will point to the new server
248
229
self.new_server = self.get_readonly_server()
249
# The requests to the old server will be redirected to the new server
230
# The requests to the old server will be redirected
250
231
self.old_server = self.get_secondary_server()
252
def create_transport_secondary_server(self):
253
"""Create the secondary server redirecting to the primary server"""
254
new = self.get_readonly_server()
255
redirecting = HTTPServerRedirecting(
256
protocol_version=self._protocol_version)
257
redirecting.redirect_to(new.host, new.port)
258
redirecting._url_protocol = self._url_protocol
261
def get_old_url(self, relpath=None):
262
base = self.old_server.get_url()
263
return self._adjust_url(base, relpath)
265
def get_old_transport(self, relpath=None):
266
t = transport.get_transport(self.get_old_url(relpath))
267
self.assertTrue(t.is_readonly())
270
def get_new_url(self, relpath=None):
271
base = self.new_server.get_url()
272
return self._adjust_url(base, relpath)
274
def get_new_transport(self, relpath=None):
275
t = transport.get_transport(self.get_new_url(relpath))
276
self.assertTrue(t.is_readonly())
280
234
class AuthRequestHandler(http_server.TestingHTTPRequestHandler):
281
235
"""Requires an authentication to process requests.