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