14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
20
from bzrlib.tests import TestCaseWithTransport
21
from bzrlib.tests.HttpServer import (
23
TestingHTTPRequestHandler,
27
class WallRequestHandler(TestingHTTPRequestHandler):
28
"""Whatever request comes in, close the connection"""
30
def handle_one_request(self):
31
"""Handle a single HTTP request, by abruptly closing the connection"""
32
self.close_connection = 1
35
class BadStatusRequestHandler(TestingHTTPRequestHandler):
36
"""Whatever request comes in, returns a bad status"""
38
def parse_request(self):
39
"""Fakes handling a single HTTP request, returns a bad status"""
40
ignored = TestingHTTPRequestHandler.parse_request(self)
42
self.send_response(0, "Bad status")
44
except socket.error, e:
45
if (len(e.args) > 0) and (e.args[0] == errno.EPIPE):
46
# We don't want to pollute the test reuslts with
47
# spurious server errors while test succeed. In
48
# our case, it may occur that the test have
49
# already read the 'Bad Status' and closed the
50
# socket while we are still trying to send some
51
# headers... So the test is ok but if we raise
52
# the exception the output is dirty. So we don't
53
# raise, but we close the connection, just to be
55
self.close_connection = 1
62
class InvalidStatusRequestHandler(TestingHTTPRequestHandler):
63
"""Whatever request comes in, returns am invalid status"""
65
def parse_request(self):
66
"""Fakes handling a single HTTP request, returns a bad status"""
67
ignored = TestingHTTPRequestHandler.parse_request(self)
68
self.wfile.write("Invalid status line\r\n")
72
class BadProtocolRequestHandler(TestingHTTPRequestHandler):
73
"""Whatever request comes in, returns a bad protocol version"""
75
def parse_request(self):
76
"""Fakes handling a single HTTP request, returns a bad status"""
77
ignored = TestingHTTPRequestHandler.parse_request(self)
78
# Returns an invalid protocol version, but curl just
79
# ignores it and those cannot be tested.
80
self.wfile.write("%s %d %s\r\n" % ('HTTP/0.0',
82
'Look at my protocol version'))
23
86
class TestCaseWithWebserver(TestCaseWithTransport):