Skip to content

Commit

Permalink
Increase test coverage, emulate dir traversal in mockftp
Browse files Browse the repository at this point in the history
  • Loading branch information
Rob Harrigan committed Feb 27, 2014
1 parent 0025302 commit c8bcec5
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 10 deletions.
28 changes: 20 additions & 8 deletions tests/mock_ftp.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import os
from collections import deque

class MockFTP(object):
""" Mock FTP lib for testing """
_current = '.'
_files = None
_size = 0
_dirlist = None

def __init__(self):
self._files = None
self._size = 0
self._dirlist = None
self._exists = True
self._stack = deque()

def storbinary(self, command, f):
f.seek(0, os.SEEK_END)
self._size = f.tell()
Expand All @@ -15,7 +19,7 @@ def retrbinary(self, command, callback):
return

def pwd(self):
return self._current
return "/".join(self._stack)

def nlst(self, dirname=None):
return self._files
Expand All @@ -33,17 +37,22 @@ def rmd(self, dirname):
return

def delete(self, filename):
if '//' in filename:
if not self._exists:
raise Exception("Doesn't exist")
return True

def rename(self, fromname, toname):
return

def cwd(self, pathname):
if '//' in pathname:
if not self._exists:
self._exists = True
raise Exception("Doesn't exist")
self._current = pathname
for dir in pathname.split("/"):
if dir == '..':
self._stack.pop()
else:
self._stack.append(dir)

def size(self, filename):
return self._size
Expand All @@ -69,3 +78,6 @@ def _set_files(self, files):

def _set_dirlist(self, dirlist):
self._dirlist = dirlist

def _set_exists(self, exists):
self._exists = exists
18 changes: 16 additions & 2 deletions tests/test_ftpretty.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,20 @@ def setUp(self):
def test_cd(self):
self.pretty.cd('photos/nature/mountains')
self.assertEquals(self.pretty.pwd(), 'photos/nature/mountains')
self.assertRaises(Exception, self.pretty.cd('photos//nature/mountains'))
self.pretty._set_exists(False)
self.assertRaises(Exception, self.pretty.cd('blah'))

def test_cd_up(self):
self.pretty.cd('photos/nature/mountains')
self.pretty.cd('../..')
self.assertEquals(self.pretty.pwd(), 'photos')

def test_descend(self):
self.pretty._set_exists(False)
self.pretty.descend('photos/nature', True)
self.pretty._set_exists(True)
self.pretty.cd('mountains')
self.assertEquals(self.pretty.pwd(), 'photos/nature/mountains')

def test_list(self):
self.mock_ftp._set_files(['a.txt', 'b.txt'])
Expand All @@ -30,7 +43,8 @@ def test_get(self):

def test_delete(self):
self.assertTrue(self.pretty.delete('remote_file.txt'))
self.assertRaises(Exception, self.pretty.delete('photos//nature/remote.txt'))
self.pretty._set_exists(False)
self.assertRaises(Exception, self.pretty.delete('photos/nature/remote.txt'))

def test_dir_parse(self):
self.mock_ftp._set_dirlist("-rw-rw-r-- 1 rharrigan www 47 Feb 20 11:39 Cool.txt\n" +
Expand Down

0 comments on commit c8bcec5

Please sign in to comment.