mirror of https://github.com/CIRCL/PyCIRCLean
Fix symlink behavior in helpers.py
parent
6a96d3f7a2
commit
df97228a75
|
@ -222,7 +222,7 @@ class FileBase(object):
|
||||||
if os.path.islink(file_path):
|
if os.path.islink(file_path):
|
||||||
# libmagic will throw an IOError on a broken symlink
|
# libmagic will throw an IOError on a broken symlink
|
||||||
mimetype = 'inode/symlink'
|
mimetype = 'inode/symlink'
|
||||||
self.set_property('symlink', os.readlink(file_path))
|
self.set_property('symlink_path', os.readlink(file_path))
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
mt = magic.from_file(file_path, mime=True)
|
mt = magic.from_file(file_path, mime=True)
|
||||||
|
|
|
@ -24,51 +24,51 @@ class TestFileBase:
|
||||||
return tmpdir_factory.mktemp('src').strpath
|
return tmpdir_factory.mktemp('src').strpath
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def symlink_file(self, tmpdir):
|
def symlink_file_path(self, tmpdir, tmpfile_path):
|
||||||
file_path = tmpdir.join('test.txt')
|
symlink_path = tmpdir.join('symlinked')
|
||||||
file_path.write('testing')
|
|
||||||
file_path = file_path.strpath
|
|
||||||
symlink_path = tmpdir.join('symlinked.txt')
|
|
||||||
symlink_path = symlink_path.strpath
|
symlink_path = symlink_path.strpath
|
||||||
os.symlink(file_path, symlink_path)
|
os.symlink(tmpfile_path, symlink_path)
|
||||||
return FileBase(symlink_path, symlink_path)
|
return symlink_path
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def temp_file(self, src_dir_path, dst_dir_path):
|
def tmpfile_path(self, tmpdir):
|
||||||
|
file_path = tmpdir.join('test.txt')
|
||||||
|
file_path.write('testing')
|
||||||
|
return file_path.strpath
|
||||||
|
|
||||||
|
@fixture
|
||||||
|
def tmpfile(self, src_dir_path, dst_dir_path):
|
||||||
file_path = os.path.join(src_dir_path, 'test.txt')
|
file_path = os.path.join(src_dir_path, 'test.txt')
|
||||||
file_path.write('testing')
|
file_path.write('testing')
|
||||||
return FileBase(file_path, dst_dir_path)
|
return FileBase(file_path, dst_dir_path)
|
||||||
|
|
||||||
@fixture
|
|
||||||
def temp_file_no_ext(self, tmpdir):
|
|
||||||
file_path = tmpdir.join('test')
|
|
||||||
file_path.write('testing')
|
|
||||||
file_path = file_path.strpath
|
|
||||||
return FileBase(file_path, file_path)
|
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def file_marked_dangerous(self):
|
def file_marked_dangerous(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@mock.patch('kittengroomer.helpers.magic')
|
@mock.patch('kittengroomer.helpers.magic')
|
||||||
def test_init_identify_filename(self, mock_magic):
|
def test_init_identify_filename(self, mock_libmagic):
|
||||||
"""Init should identify the filename correctly for src_path."""
|
"""Init should identify the filename correctly for src_path."""
|
||||||
src_path = 'src/test.txt'
|
src_path = 'src/test.txt'
|
||||||
dst_path = 'dst/test.txt'
|
dst_path = 'dst/test.txt'
|
||||||
file = FileBase(src_path, dst_path)
|
file = FileBase(src_path, dst_path)
|
||||||
assert file.filename == 'test.txt'
|
assert file.filename == 'test.txt'
|
||||||
|
|
||||||
def test_init_uppercase_filename(self):
|
@mock.patch('kittengroomer.helpers.magic')
|
||||||
"""Init should coerce filenames to lowercase."""
|
def test_init_identify_extension(self, mock_libmagic):
|
||||||
pass
|
|
||||||
|
|
||||||
def test_init_identify_extension(self):
|
|
||||||
"""Init should identify the extension for src_path."""
|
"""Init should identify the extension for src_path."""
|
||||||
pass
|
src_path = 'src/test.txt'
|
||||||
|
dst_path = 'dst/test.txt'
|
||||||
|
file = FileBase(src_path, dst_path)
|
||||||
|
assert file.extension == '.txt'
|
||||||
|
|
||||||
def test_init_uppercase_extension(self):
|
@mock.patch('kittengroomer.helpers.magic')
|
||||||
|
def test_init_uppercase_extension(self, mock_libmagic):
|
||||||
"""Init should coerce uppercase extension to lowercase"""
|
"""Init should coerce uppercase extension to lowercase"""
|
||||||
pass
|
src_path = 'src/TEST.TXT'
|
||||||
|
dst_path = 'dst/TEST.TXT'
|
||||||
|
file = FileBase(src_path, dst_path)
|
||||||
|
assert file.extension == '.txt'
|
||||||
|
|
||||||
def test_init_file_doesnt_exist(self):
|
def test_init_file_doesnt_exist(self):
|
||||||
"""Init should raise an exception if the file doesn't exist."""
|
"""Init should raise an exception if the file doesn't exist."""
|
||||||
|
@ -80,18 +80,25 @@ class TestFileBase:
|
||||||
with pytest.raises(IsADirectoryError):
|
with pytest.raises(IsADirectoryError):
|
||||||
FileBase(tmpdir.strpath, tmpdir.strpath)
|
FileBase(tmpdir.strpath, tmpdir.strpath)
|
||||||
|
|
||||||
def test_init_symlink(self):
|
@mock.patch('kittengroomer.helpers.magic')
|
||||||
|
def test_init_symlink(self, mock_libmagic, symlink_file_path):
|
||||||
"""Init should properly identify symlinks."""
|
"""Init should properly identify symlinks."""
|
||||||
pass
|
file = FileBase(symlink_file_path, '')
|
||||||
|
assert file.mimetype == 'inode/symlink'
|
||||||
|
|
||||||
def test_is_symlink_attribute(self):
|
@mock.patch('kittengroomer.helpers.magic')
|
||||||
|
def test_is_symlink_attribute(self, mock_libmagic, symlink_file_path):
|
||||||
"""If a file is a symlink, is_symlink should return True."""
|
"""If a file is a symlink, is_symlink should return True."""
|
||||||
pass
|
file = FileBase(symlink_file_path, '')
|
||||||
|
assert file.is_symlink is True
|
||||||
|
|
||||||
def test_mimetype_attribute_assigned_correctly(self):
|
def test_mimetype_attribute_assigned_correctly(self):
|
||||||
"""When libmagic returns a given mimetype, the mimetype should be
|
"""When libmagic returns a given mimetype, the mimetype should be
|
||||||
assigned properly."""
|
assigned properly."""
|
||||||
pass
|
with mock.patch('kittengroomer.helpers.magic.from_file',
|
||||||
|
return_value='text/plain'):
|
||||||
|
file = FileBase('', '')
|
||||||
|
file.mimetype = 'text/plain'
|
||||||
|
|
||||||
def set_property_user_defined(self):
|
def set_property_user_defined(self):
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue