123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #!/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()
|