Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: net/tools/testserver/testserver.py

Issue 5196001: Made testserver communicate to parent process with JSON (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed cbentzel's comments Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 By default, it listens on an ephemeral port and sends the port number back to 9 By default, it listens on an ephemeral port and sends the port number back to
10 the originating process over a pipe. The originating process can specify an 10 the originating process over a pipe. The originating process can specify an
11 explicit port if necessary. 11 explicit port if necessary.
12 It can use https if you specify the flag --https=CERT where CERT is the path 12 It can use https if you specify the flag --https=CERT where CERT is the path
13 to a pem file containing the certificate and private key that should be used. 13 to a pem file containing the certificate and private key that should be used.
14 """ 14 """
15 15
16 import base64 16 import base64
17 import BaseHTTPServer 17 import BaseHTTPServer
18 import cgi 18 import cgi
19 import optparse 19 import optparse
20 import os 20 import os
21 import re 21 import re
22 import shutil 22 import shutil
23 import SocketServer 23 import SocketServer
24 import sys 24 import sys
25 import struct 25 import struct
26 import time 26 import time
27 import urlparse 27 import urlparse
28 import warnings 28 import warnings
29 29
30 if sys.version_info < (2, 6):
Paweł Hajdan Jr. 2010/11/18 10:35:12 Hmmm. Can we use the same version of the library,
akalin 2010/11/18 22:38:34 I get warnings if I try to use simplejson only. I
31 import simplejson as json
32 else:
33 import json
34
30 # Ignore deprecation warnings, they make our output more cluttered. 35 # Ignore deprecation warnings, they make our output more cluttered.
31 warnings.filterwarnings("ignore", category=DeprecationWarning) 36 warnings.filterwarnings("ignore", category=DeprecationWarning)
32 37
33 import pyftpdlib.ftpserver 38 import pyftpdlib.ftpserver
34 import tlslite 39 import tlslite
35 import tlslite.api 40 import tlslite.api
36 41
37 try: 42 try:
38 import hashlib 43 import hashlib
39 _new_md5 = hashlib.md5 44 _new_md5 = hashlib.md5
(...skipping 1255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 1300
1296 # Instantiate FTP server class and listen to 127.0.0.1:port 1301 # Instantiate FTP server class and listen to 127.0.0.1:port
1297 address = ('127.0.0.1', port) 1302 address = ('127.0.0.1', port)
1298 server = pyftpdlib.ftpserver.FTPServer(address, ftp_handler) 1303 server = pyftpdlib.ftpserver.FTPServer(address, ftp_handler)
1299 listen_port = server.socket.getsockname()[1] 1304 listen_port = server.socket.getsockname()[1]
1300 print 'FTP server started on port %d...' % listen_port 1305 print 'FTP server started on port %d...' % listen_port
1301 1306
1302 # Notify the parent that we've started. (BaseServer subclasses 1307 # Notify the parent that we've started. (BaseServer subclasses
1303 # bind their sockets on construction.) 1308 # bind their sockets on construction.)
1304 if options.startup_pipe is not None: 1309 if options.startup_pipe is not None:
1310 server_data = {
1311 'port': listen_port
1312 }
1313 server_data_json = json.dumps(server_data)
1314 print 'sending server_data: %s' % server_data_json
Paweł Hajdan Jr. 2010/11/18 10:35:12 nit: Only for debugging?
1315 server_data_len = len(server_data_json)
1305 if sys.platform == 'win32': 1316 if sys.platform == 'win32':
1306 fd = msvcrt.open_osfhandle(options.startup_pipe, 0) 1317 fd = msvcrt.open_osfhandle(options.startup_pipe, 0)
1307 else: 1318 else:
1308 fd = options.startup_pipe 1319 fd = options.startup_pipe
1309 startup_pipe = os.fdopen(fd, "w") 1320 startup_pipe = os.fdopen(fd, "w")
1310 # Write the listening port as a 2 byte value. This is _not_ using 1321 # First write the data length as an unsigned 4-byte value. This
1311 # network byte ordering since the other end of the pipe is on the same 1322 # is _not_ using network byte ordering since the other end of the
1312 # machine. 1323 # pipe is on the same machine.
1313 startup_pipe.write(struct.pack('@H', listen_port)) 1324 startup_pipe.write(struct.pack('=L', server_data_len))
1325 startup_pipe.write(server_data_json)
1314 startup_pipe.close() 1326 startup_pipe.close()
1315 1327
1316 try: 1328 try:
1317 server.serve_forever() 1329 server.serve_forever()
1318 except KeyboardInterrupt: 1330 except KeyboardInterrupt:
1319 print 'shutting down server' 1331 print 'shutting down server'
1320 server.stop = True 1332 server.stop = True
1321 1333
1322 if __name__ == '__main__': 1334 if __name__ == '__main__':
1323 option_parser = optparse.OptionParser() 1335 option_parser = optparse.OptionParser()
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 'option may appear multiple times, indicating ' 1367 'option may appear multiple times, indicating '
1356 'multiple algorithms should be enabled.'); 1368 'multiple algorithms should be enabled.');
1357 option_parser.add_option('', '--file-root-url', default='/files/', 1369 option_parser.add_option('', '--file-root-url', default='/files/',
1358 help='Specify a root URL for files served.') 1370 help='Specify a root URL for files served.')
1359 option_parser.add_option('', '--startup-pipe', type='int', 1371 option_parser.add_option('', '--startup-pipe', type='int',
1360 dest='startup_pipe', 1372 dest='startup_pipe',
1361 help='File handle of pipe to parent process') 1373 help='File handle of pipe to parent process')
1362 options, args = option_parser.parse_args() 1374 options, args = option_parser.parse_args()
1363 1375
1364 sys.exit(main(options, args)) 1376 sys.exit(main(options, args))
OLDNEW
« net/tools/testserver/run_testserver.cc ('K') | « net/tools/testserver/run_testserver.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698