48
49
self.send_response(0, "Bad status")
50
51
except socket.error, e:
51
if (len(e.args) > 0) and (e.args[0] == errno.EPIPE):
52
# We don't want to pollute the test reuslts with
53
# spurious server errors while test succeed. In
54
# our case, it may occur that the test have
55
# already read the 'Bad Status' and closed the
56
# socket while we are still trying to send some
57
# headers... So the test is ok but if we raise
58
# the exception the output is dirty. So we don't
59
# raise, but we close the connection, just to be
52
# We don't want to pollute the test results with
53
# spurious server errors while test succeed. In our
54
# case, it may occur that the test has already read
55
# the 'Bad Status' and closed the socket while we are
56
# still trying to send some headers... So the test is
57
# ok, but if we raise the exception, the output is
58
# dirty. So we don't raise, but we close the
59
# connection, just to be safe :)
60
spurious = [errno.EPIPE,
64
if (len(e.args) > 0) and (e.args[0] in spurious):
61
65
self.close_connection = 1
171
175
super(TestCaseWithWebserver, self).setUp()
172
176
self.transport_readonly_server = HttpServer
179
class TestCaseWithTwoWebservers(TestCaseWithWebserver):
180
"""A support class providinf readonly urls (on two servers) that are http://.
182
We setup two webservers to allows various tests involving
183
proxies or redirections from one server to the other.
186
super(TestCaseWithTwoWebservers, self).setUp()
187
self.transport_secondary_server = HttpServer
188
self.__secondary_server = None
190
def create_transport_secondary_server(self):
191
"""Create a transport server from class defined at init.
193
This is mostly a hook for daughter classes.
195
return self.transport_secondary_server()
197
def get_secondary_server(self):
198
"""Get the server instance for the secondary transport."""
199
if self.__secondary_server is None:
200
self.__secondary_server = self.create_transport_secondary_server()
201
self.__secondary_server.setUp()
202
self.addCleanup(self.__secondary_server.tearDown)
203
return self.__secondary_server
206
class FakeProxyRequestHandler(TestingHTTPRequestHandler):
207
"""Append a '-proxied' suffix to file served"""
209
def translate_path(self, path):
210
# We need to act as a proxy and accept absolute urls,
211
# which SimpleHTTPRequestHandler (grand parent) is not
212
# ready for. So we just drop the protocol://host:port
213
# part in front of the request-url (because we know we
214
# would not forward the request to *another* proxy).
216
# So we do what SimpleHTTPRequestHandler.translate_path
217
# do beginning with python 2.4.3: abandon query
218
# parameters, scheme, host port, etc (which ensure we
219
# provide the right behaviour on all python versions).
220
path = urlparse.urlparse(path)[2]
221
# And now, we can apply *our* trick to proxy files
222
self.path += '-proxied'
223
# An finally we leave our mother class do whatever it
224
# wants with the path
225
return TestingHTTPRequestHandler.translate_path(self, path)