Skip to content

Commit

Permalink
100% coverage for ftp/publisher.py
Browse files Browse the repository at this point in the history
  • Loading branch information
jamadden committed Oct 27, 2017
1 parent 8cfdadd commit 8e27ed9
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 33 deletions.
2 changes: 1 addition & 1 deletion src/zope/server/dualmodechannel.py
Expand Up @@ -212,7 +212,7 @@ def close(self):
self.connected = False
try:
asyncore.dispatcher.close(self)
except AttributeError:
except AttributeError: # pragma: no cover (tox coverage environment is python 3)
# On Python 2.7, this is not idempotent. If we were
# already closed (or never fully opened) it will
# raise a AttributeError because it tries to call close()
Expand Down
35 changes: 13 additions & 22 deletions src/zope/server/ftp/publisher.py
Expand Up @@ -41,33 +41,24 @@ def type(self, path):

return self._execute(path, 'type')

def names(self, path, filter=None):
return self._execute(path, 'names', split=False, filter=filter)

def ls(self, path, filter=None):
return self._execute(path, 'ls', split=False, filter=filter)

def readfile(self, path, outstream, start=0, end=None):
return self._execute(path, 'readfile',
outstream=outstream, start=start, end=end)

def lsinfo(self, path):
return self._execute(path, 'lsinfo')

def mtime(self, path):
return self._execute(path, 'mtime')

def size(self, path):
return self._execute(path, 'size')

def mkdir(self, path):
return self._execute(path, 'mkdir')

def remove(self, path):
return self._execute(path, 'remove')

def rmdir(self, path):
return self._execute(path, 'rmdir')
_name = None
for _name in ('names', 'ls'):
f = locals()[_name] = lambda self, path, filter=None, _name=_name: self._execute(
path,
_name,
split=False,
filter=filter)
f.__name__ = _name

for _name in ('lsinfo', 'mtime', 'size', 'mkdir', 'remove', 'rmdir'):
f = locals()[_name] = lambda self, path, _name=_name: self._execute(path, _name)
f.__name__ = _name
del _name

def rename(self, old, new):
'See IWriteFileSystem'
Expand Down
17 changes: 8 additions & 9 deletions src/zope/server/ftp/tests/fstests.py
Expand Up @@ -19,20 +19,20 @@
from zope.interface.verify import verifyObject
from zope.server.interfaces.ftp import IFileSystem


class FileSystemTests(object):
"""Tests of a readable filesystem
"""

filesystem = None
dir_name = '/dir'
dir_name = '/dir'
file_name = '/dir/file.txt'
unwritable_filename = '/dir/protected.txt'
dir_contents = ['file.txt', 'protected.txt']
file_contents = b'Lengthen your stride'

def test_type(self):
self.assertEqual(self.filesystem.type(self.dir_name), 'd')
self.assertEqual(self.filesystem.type('/'), 'd')
self.assertEqual(self.filesystem.type(self.file_name), 'f')


Expand Down Expand Up @@ -63,8 +63,7 @@ def test_IFileSystemInterface(self):

def testRemove(self):
self.filesystem.remove(self.file_name)
self.failIf(self.filesystem.type(self.file_name))

self.assertFalse(self.filesystem.type(self.file_name))

def testMkdir(self):
path = self.dir_name + '/x'
Expand All @@ -74,7 +73,7 @@ def testMkdir(self):
def testRmdir(self):
self.filesystem.remove(self.file_name)
self.filesystem.rmdir(self.dir_name)
self.failIf(self.filesystem.type(self.dir_name))
self.assertFalse(self.filesystem.type(self.dir_name))


def testRename(self):
Expand Down Expand Up @@ -151,7 +150,7 @@ def testWriteNewFile(self):


def test_writable(self):
self.failIf(self.filesystem.writable(self.dir_name))
self.failIf(self.filesystem.writable(self.unwritable_filename))
self.failUnless(self.filesystem.writable(self.file_name))
self.failUnless(self.filesystem.writable(self.file_name+'1'))
self.assertFalse(self.filesystem.writable(self.dir_name))
self.assertFalse(self.filesystem.writable(self.unwritable_filename))
self.assertTrue(self.filesystem.writable(self.file_name))
self.assertTrue(self.filesystem.writable(self.file_name+'1'))
32 changes: 32 additions & 0 deletions src/zope/server/ftp/tests/test_publisher.py
Expand Up @@ -113,3 +113,35 @@ def setUp(self):
# Otherwise dualmodechannel.the_trigger is closed by the ZEO tests
from zope.server.ftp.publisher import PublisherFileSystem
self.filesystem = PublisherFileSystem('bob', RequestFactory(fs))


def test_translate_parent(self):
self.assertEqual('/', self.filesystem._translate('..'))

class TestPublisherFTPServer(unittest.TestCase):

def test_construct(self):
from zope.server.ftp.publisher import PublisherFTPServer
class NonBinding(PublisherFTPServer):

def bind(self, addr):
return

server = NonBinding(Request, 'name', None, 80, start=False)
self.assertIsNotNone(server.fs_access)

class TestPublisherFileSystemAccess(unittest.TestCase):

def test_authenticate(self):
from zope.server.ftp.publisher import PublisherFileSystemAccess

access = PublisherFileSystemAccess(None)
self.assertIsNone(access.authenticate(None))

def test_open(self):
from zope.server.ftp.publisher import PublisherFileSystemAccess
from zope.server.ftp.publisher import PublisherFileSystem
access = PublisherFileSystemAccess(None)

fs = access.open(None)
self.assertIsInstance(fs, PublisherFileSystem)
2 changes: 1 addition & 1 deletion tox.ini
Expand Up @@ -20,4 +20,4 @@ deps =
coverage
commands =
coverage run -m zope.testrunner --test-path=src {posargs:-pvc}
coverage report -m --fail-under=78
coverage report -m --fail-under=96

0 comments on commit 8e27ed9

Please sign in to comment.