| OLD | NEW |
| 1 #!/usr/bin/python2.4 | 1 #!/usr/bin/python2.4 |
| 2 # Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """This is a simple HTTP server used for testing Chrome. | 6 """This is a simple HTTP server used for testing Chrome. |
| 7 | 7 |
| 8 It supports several test URLs, as specified by the handlers in TestPageHandler. | 8 It supports several test URLs, as specified by the handlers in TestPageHandler. |
| 9 It defaults to living on localhost:8888. | 9 It defaults to living on localhost:8888. |
| 10 It can use https if you specify the flag --https=CERT where CERT is the path | 10 It can use https if you specify the flag --https=CERT where CERT is the path |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 import shutil | 21 import shutil |
| 22 import SocketServer | 22 import SocketServer |
| 23 import sys | 23 import sys |
| 24 import time | 24 import time |
| 25 import urllib2 | 25 import urllib2 |
| 26 | 26 |
| 27 import pyftpdlib.ftpserver | 27 import pyftpdlib.ftpserver |
| 28 import tlslite | 28 import tlslite |
| 29 import tlslite.api | 29 import tlslite.api |
| 30 | 30 |
| 31 import chromiumsync | |
| 32 | |
| 33 try: | 31 try: |
| 34 import hashlib | 32 import hashlib |
| 35 _new_md5 = hashlib.md5 | 33 _new_md5 = hashlib.md5 |
| 36 except ImportError: | 34 except ImportError: |
| 37 import md5 | 35 import md5 |
| 38 _new_md5 = md5.new | 36 _new_md5 = md5.new |
| 39 | 37 |
| 40 SERVER_HTTP = 0 | 38 SERVER_HTTP = 0 |
| 41 SERVER_FTP = 1 | 39 SERVER_FTP = 1 |
| 42 | 40 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 'gif': 'image/gif', | 136 'gif': 'image/gif', |
| 139 'jpeg' : 'image/jpeg', | 137 'jpeg' : 'image/jpeg', |
| 140 'jpg' : 'image/jpeg', | 138 'jpg' : 'image/jpeg', |
| 141 'xml' : 'text/xml' | 139 'xml' : 'text/xml' |
| 142 } | 140 } |
| 143 self._default_mime_type = 'text/html' | 141 self._default_mime_type = 'text/html' |
| 144 | 142 |
| 145 BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, request, | 143 BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, request, |
| 146 client_address, | 144 client_address, |
| 147 socket_server) | 145 socket_server) |
| 148 # Class variable; shared across requests. | |
| 149 _sync_handler = chromiumsync.TestServer() | |
| 150 | 146 |
| 151 def _ShouldHandleRequest(self, handler_name): | 147 def _ShouldHandleRequest(self, handler_name): |
| 152 """Determines if the path can be handled by the handler. | 148 """Determines if the path can be handled by the handler. |
| 153 | 149 |
| 154 We consider a handler valid if the path begins with the | 150 We consider a handler valid if the path begins with the |
| 155 handler name. It can optionally be followed by "?*", "/*". | 151 handler name. It can optionally be followed by "?*", "/*". |
| 156 """ | 152 """ |
| 157 | 153 |
| 158 pattern = re.compile('%s($|\?|/).*' % handler_name) | 154 pattern = re.compile('%s($|\?|/).*' % handler_name) |
| 159 return pattern.match(self.path) | 155 return pattern.match(self.path) |
| (...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1014 This covers all sync protocol commands: authentication, getupdates, and | 1010 This covers all sync protocol commands: authentication, getupdates, and |
| 1015 commit. | 1011 commit. |
| 1016 """ | 1012 """ |
| 1017 test_name = "/chromiumsync/command" | 1013 test_name = "/chromiumsync/command" |
| 1018 if not self._ShouldHandleRequest(test_name): | 1014 if not self._ShouldHandleRequest(test_name): |
| 1019 return False | 1015 return False |
| 1020 | 1016 |
| 1021 length = int(self.headers.getheader('content-length')) | 1017 length = int(self.headers.getheader('content-length')) |
| 1022 raw_request = self.rfile.read(length) | 1018 raw_request = self.rfile.read(length) |
| 1023 | 1019 |
| 1024 http_response, raw_reply = self._sync_handler.HandleCommand(raw_request) | 1020 if not self.server._sync_handler: |
| 1021 import chromiumsync |
| 1022 self.server._sync_handler = chromiumsync.TestServer() |
| 1023 http_response, raw_reply = self.server._sync_handler.HandleCommand( |
| 1024 raw_request) |
| 1025 self.send_response(http_response) | 1025 self.send_response(http_response) |
| 1026 self.end_headers() | 1026 self.end_headers() |
| 1027 self.wfile.write(raw_reply) | 1027 self.wfile.write(raw_reply) |
| 1028 return True | 1028 return True |
| 1029 | 1029 |
| 1030 def MultipartHandler(self): | 1030 def MultipartHandler(self): |
| 1031 """Send a multipart response (10 text/html pages).""" | 1031 """Send a multipart response (10 text/html pages).""" |
| 1032 test_name = "/multipart" | 1032 test_name = "/multipart" |
| 1033 if not self._ShouldHandleRequest(test_name): | 1033 if not self._ShouldHandleRequest(test_name): |
| 1034 return False | 1034 return False |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1191 print 'specified cert file not found: ' + options.cert + ' exiting...' | 1191 print 'specified cert file not found: ' + options.cert + ' exiting...' |
| 1192 return | 1192 return |
| 1193 server = HTTPSServer(('127.0.0.1', port), TestPageHandler, options.cert) | 1193 server = HTTPSServer(('127.0.0.1', port), TestPageHandler, options.cert) |
| 1194 print 'HTTPS server started on port %d...' % port | 1194 print 'HTTPS server started on port %d...' % port |
| 1195 else: | 1195 else: |
| 1196 server = StoppableHTTPServer(('127.0.0.1', port), TestPageHandler) | 1196 server = StoppableHTTPServer(('127.0.0.1', port), TestPageHandler) |
| 1197 print 'HTTP server started on port %d...' % port | 1197 print 'HTTP server started on port %d...' % port |
| 1198 | 1198 |
| 1199 server.data_dir = MakeDataDir() | 1199 server.data_dir = MakeDataDir() |
| 1200 server.file_root_url = options.file_root_url | 1200 server.file_root_url = options.file_root_url |
| 1201 server._sync_handler = None |
| 1202 |
| 1201 MakeDumpDir(server.data_dir) | 1203 MakeDumpDir(server.data_dir) |
| 1202 | 1204 |
| 1203 # means FTP Server | 1205 # means FTP Server |
| 1204 else: | 1206 else: |
| 1205 my_data_dir = MakeDataDir() | 1207 my_data_dir = MakeDataDir() |
| 1206 | 1208 |
| 1207 def line_logger(msg): | 1209 def line_logger(msg): |
| 1208 if (msg.find("kill") >= 0): | 1210 if (msg.find("kill") >= 0): |
| 1209 server.stop = True | 1211 server.stop = True |
| 1210 print 'shutting down server' | 1212 print 'shutting down server' |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1256 option_parser.add_option('', '--file-root-url', default='/files/', | 1258 option_parser.add_option('', '--file-root-url', default='/files/', |
| 1257 help='Specify a root URL for files served.') | 1259 help='Specify a root URL for files served.') |
| 1258 option_parser.add_option('', '--never-die', default=False, | 1260 option_parser.add_option('', '--never-die', default=False, |
| 1259 action="store_true", | 1261 action="store_true", |
| 1260 help='Prevent the server from dying when visiting ' | 1262 help='Prevent the server from dying when visiting ' |
| 1261 'a /kill URL. Useful for manually running some ' | 1263 'a /kill URL. Useful for manually running some ' |
| 1262 'tests.') | 1264 'tests.') |
| 1263 options, args = option_parser.parse_args() | 1265 options, args = option_parser.parse_args() |
| 1264 | 1266 |
| 1265 sys.exit(main(options, args)) | 1267 sys.exit(main(options, args)) |
| OLD | NEW |