1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#!/usr/bin/python2.4 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# Copyright (c) 2011 The Chromium Authors. All rights reserved. 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# Use of this source code is governed by a BSD-style license that can be 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# found in the LICENSE file. 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen"""This is a simple HTTP server for manually testing exponential 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenback-off functionality in Chrome. 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen""" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenimport BaseHTTPServer 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenimport sys 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenimport urlparse 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen keep_running = True 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen def do_GET(self): 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if self.path == '/quitquitquit': 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.send_response(200) 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.send_header('Content-Type', 'text/plain') 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.end_headers() 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.wfile.write('QUITTING') 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen RequestHandler.keep_running = False 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen params = urlparse.parse_qs(urlparse.urlparse(self.path).query) 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if not params or not 'code' in params or params['code'][0] == '200': 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.send_response(200) 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.send_header('Content-Type', 'text/plain') 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.end_headers() 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.wfile.write('OK') 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen else: 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.send_error(int(params['code'][0])) 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsendef main(): 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if len(sys.argv) != 2: 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen print "Usage: %s PORT" % sys.argv[0] 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sys.exit(1) 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen port = int(sys.argv[1]) 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen print "To stop the server, go to http://localhost:%d/quitquitquit" % port 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen httpd = BaseHTTPServer.HTTPServer(('', port), RequestHandler) 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen while RequestHandler.keep_running: 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen httpd.handle_request() 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenif __name__ == '__main__': 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen main() 52