Commit bd0a4e5c by willmcgugan

Implemented a better way of managing the ftpserver subprocess in the ftp test,…

Implemented a better way of managing the ftpserver subprocess in the ftp test, and removed depricated file
parent 40a7464e
try:
from pyftpdlib import ftpserver
except ImportError:
print "Requires pyftpdlib <http://code.google.com/p/pyftpdlib/>"
raise
import sys
authorizer = ftpserver.DummyAuthorizer()
authorizer.add_user("user", "12345", sys.argv[1], perm="elradfmw")
authorizer.add_anonymous(sys.argv[1])
handler = ftpserver.FTPHandler
handler.authorizer = authorizer
address = ("127.0.0.1", 21)
ftpd = ftpserver.FTPServer(address, handler)
ftpd.serve_forever()
...@@ -10,6 +10,7 @@ import tempfile ...@@ -10,6 +10,7 @@ import tempfile
import subprocess import subprocess
import time import time
from os.path import abspath from os.path import abspath
import urllib
try: try:
from pyftpdlib import ftpserver from pyftpdlib import ftpserver
...@@ -33,19 +34,44 @@ class TestFTPFS(unittest.TestCase, FSTestCases, ThreadingTestCases): ...@@ -33,19 +34,44 @@ class TestFTPFS(unittest.TestCase, FSTestCases, ThreadingTestCases):
file_path = __file__ file_path = __file__
if ':' not in file_path: if ':' not in file_path:
file_path = abspath(file_path) file_path = abspath(file_path)
self.ftp_server = subprocess.Popen([sys.executable, file_path, self.temp_dir, str(use_port)]) # Apparently Windows requires values from default environment, so copy the exisiting os.environ
# Need to sleep to allow ftp server to start env = os.environ.copy()
time.sleep(.2) env['PYTHONPATH'] = os.getcwd() + os.pathsep + env.get('PYTHONPATH', '')
self.ftp_server = subprocess.Popen([sys.executable,
file_path,
self.temp_dir,
use_port],
stdout=subprocess.PIPE,
env=env)
# Block until the server writes a line to stdout
self.ftp_server.stdout.readline()
# Poll until a connection can be made
start_time = time.time()
while time.time() - start_time < 5:
try:
ftpurl = urllib.urlopen('ftp://127.0.0.1:%s' % use_port)
except IOError:
time.sleep(0)
else:
ftpurl.read()
ftpurl.close()
break
else:
# Avoid a possible infinite loop
raise Exception("Unable to connect to ftp server")
self.fs = ftpfs.FTPFS('127.0.0.1', 'user', '12345', dircache=True, port=use_port, timeout=5.0) self.fs = ftpfs.FTPFS('127.0.0.1', 'user', '12345', dircache=True, port=use_port, timeout=5.0)
self.fs.cache_hint(True) self.fs.cache_hint(True)
def tearDown(self): def tearDown(self):
if sys.platform == 'win32': self.ftp_server.terminate()
import win32api #if sys.platform == 'win32':
os.popen('TASKKILL /PID '+str(self.ftp_server.pid)+' /F') # import win32api
else: # os.popen('TASKKILL /PID '+str(self.ftp_server.pid)+' /F')
os.system('kill '+str(self.ftp_server.pid)) #else:
# os.system('kill '+str(self.ftp_server.pid))
shutil.rmtree(self.temp_dir) shutil.rmtree(self.temp_dir)
self.fs.close() self.fs.close()
...@@ -74,4 +100,6 @@ if __name__ == "__main__": ...@@ -74,4 +100,6 @@ if __name__ == "__main__":
ftpd = ftpserver.FTPServer(address, handler) ftpd = ftpserver.FTPServer(address, handler)
sys.stdout.write('serving\n')
sys.stdout.flush()
ftpd.serve_forever() ftpd.serve_forever()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment