Index: net/tools/testserver/testserver.py |
=================================================================== |
--- net/tools/testserver/testserver.py (revision 7499) |
+++ net/tools/testserver/testserver.py (working copy) |
@@ -24,7 +24,11 @@ |
import time |
import tlslite |
import tlslite.api |
+import pyftpdlib.ftpserver |
+SERVER_HTTP = 0 |
+SERVER_FTP = 1 |
+ |
debug_output = sys.stderr |
def debug(str): |
debug_output.write(str + "\n") |
@@ -854,12 +858,12 @@ |
def do_GET(self): |
for handler in self._get_handlers: |
- if (handler()): |
+ if handler(): |
return |
def do_POST(self): |
for handler in self._post_handlers: |
- if(handler()): |
+ if handler(): |
return |
# called by the redirect handling function when there is no parameter |
@@ -871,6 +875,23 @@ |
self.wfile.write('Use <pre>%s?http://dest...</pre>' % redirect_name) |
self.wfile.write('</body></html>') |
+def MakeDataDir(): |
+ if options.data_dir: |
+ if not os.path.isdir(options.data_dir): |
+ print 'specified data dir not found: ' + options.data_dir + ' exiting...' |
+ return None |
+ my_data_dir = options.data_dir |
+ else: |
+ # Create the default path to our data dir, relative to the exe dir. |
+ my_data_dir = os.path.dirname(sys.argv[0]) |
+ my_data_dir = os.path.join(my_data_dir, "..", "..", "..", "..", |
+ "test", "data") |
+ |
+ #TODO(ibrar): Must use Find* funtion defined in google\tools |
+ #i.e my_data_dir = FindUpward(my_data_dir, "test", "data") |
+ |
+ return my_data_dir |
+ |
def main(options, args): |
# redirect output to a log file so it doesn't spam the unit test output |
logfile = open('testserver.log', 'w') |
@@ -878,28 +899,52 @@ |
port = options.port |
- if options.cert: |
- # let's make sure the cert file exists. |
- if not os.path.isfile(options.cert): |
- print 'specified cert file not found: ' + options.cert + ' exiting...' |
- return |
- server = HTTPSServer(('127.0.0.1', port), TestPageHandler, options.cert) |
- print 'HTTPS server started on port %d...' % port |
- else: |
- server = StoppableHTTPServer(('127.0.0.1', port), TestPageHandler) |
- print 'HTTP server started on port %d...' % port |
+ if options.server_type == SERVER_HTTP: |
+ if options.cert: |
+ # let's make sure the cert file exists. |
+ if not os.path.isfile(options.cert): |
+ print 'specified cert file not found: ' + options.cert + ' exiting...' |
+ return |
+ server = HTTPSServer(('127.0.0.1', port), TestPageHandler, options.cert) |
+ print 'HTTPS server started on port %d...' % port |
+ else: |
+ server = StoppableHTTPServer(('127.0.0.1', port), TestPageHandler) |
+ print 'HTTP server started on port %d...' % port |
- if options.data_dir: |
- if not os.path.isdir(options.data_dir): |
- print 'specified data dir not found: ' + options.data_dir + ' exiting...' |
- return |
- server.data_dir = options.data_dir |
+ server.data_dir = MakeDataDir() |
+ |
+ # means FTP Server |
else: |
- # Create the default path to our data dir, relative to the exe dir. |
- server.data_dir = os.path.dirname(sys.argv[0]) |
- server.data_dir = os.path.join(server.data_dir, "..", "..", "..", "..", |
- "test", "data") |
+ my_data_dir = MakeDataDir() |
+ def line_logger(msg): |
+ if (msg.find("kill") >= 0): |
+ server.stop = True |
+ print 'shutting down server' |
+ sys.exit(0) |
+ |
+ # Instantiate a dummy authorizer for managing 'virtual' users |
+ authorizer = pyftpdlib.ftpserver.DummyAuthorizer() |
+ |
+ # Define a new user having full r/w permissions and a read-only |
+ # anonymous user |
+ authorizer.add_user('chrome', 'chrome', my_data_dir, perm='elradfmw') |
+ |
+ authorizer.add_anonymous(my_data_dir) |
+ |
+ # Instantiate FTP handler class |
+ ftp_handler = pyftpdlib.ftpserver.FTPHandler |
+ ftp_handler.authorizer = authorizer |
+ pyftpdlib.ftpserver.logline = line_logger |
+ |
+ # Define a customized banner (string returned when client connects) |
+ ftp_handler.banner = "pyftpdlib %s based ftpd ready." % pyftpdlib.ftpserver.__ver__ |
+ |
+ # Instantiate FTP server class and listen to 127.0.0.1:port |
+ address = ('127.0.0.1', port) |
+ server = pyftpdlib.ftpserver.FTPServer(address, ftp_handler) |
+ print 'FTP server started on port %d...' % port |
+ |
try: |
server.serve_forever() |
except KeyboardInterrupt: |
@@ -908,15 +953,19 @@ |
if __name__ == '__main__': |
option_parser = optparse.OptionParser() |
+ option_parser.add_option("-f", '--ftp', action='store_const', |
+ const=SERVER_FTP, default=SERVER_HTTP, |
+ dest='server_type', |
+ help='FTP or HTTP server default HTTP') |
option_parser.add_option('', '--port', default='8888', type='int', |
help='Port used by the server') |
- option_parser.add_option('', '--data-dir', dest='data_dir', |
+ option_parser.add_option('', '--data-dir', dest='data_dir', |
help='Directory from which to read the files') |
- option_parser.add_option('', '--https', dest='cert', |
+ option_parser.add_option('', '--https', dest='cert', |
help='Specify that https should be used, specify ' |
'the path to the cert containing the private key ' |
'the server should use') |
options, args = option_parser.parse_args() |
sys.exit(main(options, args)) |
- |
+ |