Skip to content

Commit

Permalink
Merge 67e5a40 into 6bb366b
Browse files Browse the repository at this point in the history
  • Loading branch information
zmej-serow committed Jun 11, 2019
2 parents 6bb366b + 67e5a40 commit cfb77ad
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 9 deletions.
8 changes: 3 additions & 5 deletions fs/ftpfs.py
Expand Up @@ -440,11 +440,9 @@ def _manage_ftp(self):
def ftp_url(self):
# type: () -> Text
"""Get the FTP url this filesystem will open."""
url = (
"ftp://{}".format(self.host)
if self.port == 21
else "ftp://{}:{}".format(self.host, self.port)
)
_host_part = self.host if self.port == 21 else "{}:{}".format(self.host, self.port)
_user_part = "" if self.user == "anonymous" or self.user is None else "{}:{}@".format(self.user, self.passwd)
url = "ftp://{}{}".format(_user_part, _host_part)
return url

@property
Expand Down
73 changes: 69 additions & 4 deletions tests/test_ftpfs.py
Expand Up @@ -166,15 +166,21 @@ def tearDown(self):
super(TestFTPFS, self).tearDown()

def test_ftp_url(self):
self.assertTrue(self.fs.ftp_url.startswith("ftp://127.0.0.1"))
self.assertEqual(self.fs.ftp_url, "ftp://{}:{}@{}:{}".format(self.user, self.pasw, self.server.host, self.server.port))

def test_geturl(self):
self.fs.makedir("foo")
self.fs.create("bar")
self.fs.create("foo/bar")
self.assertTrue(self.fs.geturl('foo') == "ftp://127.0.0.1:{}/foo".format(self.server.port))
self.assertTrue(self.fs.geturl('bar') == "ftp://127.0.0.1:{}/bar".format(self.server.port))
self.assertTrue(self.fs.geturl('foo/bar') == "ftp://127.0.0.1:{}/foo/bar".format(self.server.port))
self.assertEqual(
self.fs.geturl('foo'), "ftp://{}:{}@{}:{}/foo".format(self.user, self.pasw, self.server.host, self.server.port)
)
self.assertEqual(
self.fs.geturl('bar'), "ftp://{}:{}@{}:{}/bar".format(self.user, self.pasw, self.server.host, self.server.port)
)
self.assertEqual(
self.fs.geturl('foo/bar'), "ftp://{}:{}@{}:{}/foo/bar".format(self.user, self.pasw, self.server.host, self.server.port)
)

def test_host(self):
self.assertEqual(self.fs.host, self.server.host)
Expand Down Expand Up @@ -244,3 +250,62 @@ def make_fs(self):

def test_features(self):
pass


@attr("slow")
class TestAnonFTPFS(FSTestCases, unittest.TestCase):

user = "anonymous"
pasw = ""

@classmethod
def setUpClass(cls):
from pyftpdlib.test import ThreadedTestFTPd

super(TestAnonFTPFS, cls).setUpClass()

cls._temp_dir = tempfile.mkdtemp("ftpfs2tests")
cls._temp_path = os.path.join(cls._temp_dir, text_type(uuid.uuid4()))
os.mkdir(cls._temp_path)

cls.server = ThreadedTestFTPd()
cls.server.shutdown_after = -1
cls.server.handler.authorizer = DummyAuthorizer()
cls.server.handler.authorizer.add_anonymous(cls._temp_path, perm="elradfmw")
cls.server.start()

# Don't know why this is necessary on Windows
if platform.system() == "Windows":
time.sleep(0.1)
# Poll until a connection can be made
if not cls.server.is_alive():
raise RuntimeError("could not start FTP server.")

@classmethod
def tearDownClass(cls):
cls.server.stop()
shutil.rmtree(cls._temp_dir)
super(TestAnonFTPFS, cls).tearDownClass()

def make_fs(self):
return open_fs(
"ftp://{}:{}".format(
self.server.host, self.server.port
)
)

def tearDown(self):
shutil.rmtree(self._temp_path)
os.mkdir(self._temp_path)
super(TestAnonFTPFS, self).tearDown()

def test_ftp_url(self):
self.assertEqual(self.fs.ftp_url, "ftp://{}:{}".format(self.server.host, self.server.port))

def test_geturl(self):
self.fs.makedir("foo")
self.fs.create("bar")
self.fs.create("foo/bar")
self.assertEqual(self.fs.geturl('foo'), "ftp://{}:{}/foo".format(self.server.host, self.server.port))
self.assertEqual(self.fs.geturl('bar'), "ftp://{}:{}/bar".format(self.server.host, self.server.port))
self.assertEqual(self.fs.geturl('foo/bar'), "ftp://{}:{}/foo/bar".format(self.server.host, self.server.port))

0 comments on commit cfb77ad

Please sign in to comment.