#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""This is a simple HTTP server for manually testing exponential
back-off functionality in Chrome.
"""
import BaseHTTPServer
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':
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.end_headers()
self.wfile.write('QUITTING')
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)
if not params or not 'code' in params or params['code'][0] == '200':
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.end_headers()
self.wfile.write('OK')
else:
status_code = int(params['code'][0])
self.send_response(status_code)
self.end_headers()
self.wfile.write('Error %d' % int(status_code))
def main():
if len(sys.argv) != 3:
print "Usage: %s LOCAL_IP PORT" % sys.argv[0]
sys.exit(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:
httpd.handle_request()
if __name__ == '__main__':
main()