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..783fd83ec8431704eb26bb167edb5200b5281bb3 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> |
+</html>''' |
+ |
+ |
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: |