Chromium Code Reviews| Index: net/tools/testserver/backoff_server.py |
| diff --git a/net/tools/testserver/backoff_server.py b/net/tools/testserver/backoff_server.py |
| index 4188cd103897b60c0e6fbb049af674aa46d15491..96b53e0d3e23feac95179ed19ea35987525852ff 100644 |
| --- a/net/tools/testserver/backoff_server.py |
| +++ b/net/tools/testserver/backoff_server.py |
| @@ -13,8 +13,50 @@ import sys |
| import urlparse |
| +AJAX_TEST_PAGE = ''' |
| +<html> |
| +<head> |
| +<script> |
| + |
| +function reportResult(txt) { |
| + var element = document.createElement('p'); |
| + element.innerHTML = txt; |
| + document.body.appendChild(element); |
| +} |
| + |
| +function fetch() { |
| + var response_code = document.getElementById('response_code'); |
| + |
| + xmlhttp = new XMLHttpRequest(); |
| + xmlhttp.open("GET", |
| + "http://%s:%d/%s?code=" + response_code.value, |
| + true); |
| + xmlhttp.onreadystatechange = function() { |
| + reportResult( |
| + 'readyState=' + xmlhttp.readyState + ', status=' + xmlhttp.status); |
| + } |
| + try { |
| + xmlhttp.send(null); |
| + } catch (e) { |
| + reportResult('Exception: ' + e); |
| + } |
| +} |
| + |
| +</script> |
| +</head> |
| +<body> |
| +<form action="javascript:fetch()"> |
| + Response code to get: <input id="response_code" type="text" value="503"> |
| + <input type="submit"> |
| +</form> |
| +</body> |
| +''' |
|
wtc
2011/05/25 23:12:06
IMPORTANT: AJAX_TEST_PAGE is missing the closing <
Jói
2011/05/26 14:53:42
Not intentional. Fixed.
|
| + |
| + |
| class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): |
| keep_running = True |
| + local_ip = '' |
| + port = 0 |
| def do_GET(self): |
| if self.path == '/quitquitquit': |
| @@ -25,22 +67,43 @@ class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): |
| RequestHandler.keep_running = False |
| return |
| + if self.path.startswith('/ajax/'): |
| + self.send_response(200) |
| + self.send_header('Content-Type', 'text/html') |
| + self.end_headers() |
| + self.wfile.write(AJAX_TEST_PAGE % (self.local_ip, |
| + self.port, |
| + self.path[6:])) |
| + return |
| + |
| params = urlparse.parse_qs(urlparse.urlparse(self.path).query) |
| + def SendCustomRetryIfRequested(): |
| + if params and 'custom-retry-after' in params: |
| + custom_retry = params['custom-retry-after'][0] |
| + self.send_header('X-Retry-After', custom_retry) |
| + |
| if not params or not 'code' in params or params['code'][0] == '200': |
| self.send_response(200) |
| self.send_header('Content-Type', 'text/plain') |
| + SendCustomRetryIfRequested() |
| self.end_headers() |
| self.wfile.write('OK') |
| else: |
| - self.send_error(int(params['code'][0])) |
| + status_code = int(params['code'][0]) |
| + self.send_response(status_code) |
| + SendCustomRetryIfRequested() |
| + self.end_headers() |
| + self.wfile.write('Error %d' % int(status_code)) |
| def main(): |
| - if len(sys.argv) != 2: |
| - print "Usage: %s PORT" % sys.argv[0] |
| + if len(sys.argv) != 3: |
| + print "Usage: %s LOCAL_IP PORT" % sys.argv[0] |
| sys.exit(1) |
| - port = int(sys.argv[1]) |
| + RequestHandler.local_ip = sys.argv[1] |
| + port = int(sys.argv[2]) |
| + RequestHandler.port = port |
| print "To stop the server, go to http://localhost:%d/quitquitquit" % port |
| httpd = BaseHTTPServer.HTTPServer(('', port), RequestHandler) |
| while RequestHandler.keep_running: |