| 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))
 | 
| -
 | 
| +  
 | 
| 
 |