mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2024-09-19 17:24:10 +00:00
98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
# pylint: disable=redefined-outer-name
|
|
|
|
from secrets import token_urlsafe
|
|
from pathlib import Path
|
|
from shutil import rmtree
|
|
from os.path import join, realpath
|
|
from os import mkdir, rmdir, remove, symlink
|
|
|
|
import pytest
|
|
|
|
from filemanager import FileManager
|
|
|
|
|
|
WORKDIR = realpath('test_filemanager')
|
|
|
|
def workdir_pref(path):
|
|
return join(WORKDIR, path)
|
|
|
|
@pytest.fixture(scope='module')
|
|
def manager():
|
|
dirs = []
|
|
mkdir(WORKDIR)
|
|
|
|
for i in range(3):
|
|
node = workdir_pref('dir_'+str(i).zfill(2))
|
|
mkdir(node)
|
|
Path(join(node, 'empty.txt')).touch()
|
|
Path(join(node, 'empty.bin')).touch()
|
|
dirs.append(node)
|
|
|
|
yield FileManager(dirs[0], dirs[:-1], exclude=['*/dir_01/*', '*.bin'])
|
|
rmtree(WORKDIR)
|
|
|
|
@pytest.mark.parametrize('subdir', ['dir_00', 'dir_01'])
|
|
def test_select_allowed_dirs(manager, subdir):
|
|
manager.workdir = workdir_pref(subdir)
|
|
assert manager.workdir == workdir_pref(subdir)
|
|
newdir = workdir_pref(join(subdir, 'deep'))
|
|
mkdir(newdir)
|
|
manager.workdir = newdir
|
|
assert manager.workdir == newdir
|
|
rmdir(newdir)
|
|
|
|
@pytest.mark.parametrize('excdir', ['/', workdir_pref('dir_02')])
|
|
def test_select_excluded_dirs(manager, excdir):
|
|
allowed = manager.allowed_directories
|
|
with pytest.raises(OSError):
|
|
manager.workdir = excdir
|
|
assert manager.workdir != excdir
|
|
manager.allowed_directories = allowed+[excdir]
|
|
manager.workdir = excdir
|
|
assert manager.workdir == excdir
|
|
manager.allowed_directories = allowed
|
|
|
|
@pytest.mark.parametrize('filename', ['another.txt', '*.txt'])
|
|
def test_select_allowed_files(manager, filename):
|
|
manager.workdir = workdir_pref('dir_00')
|
|
newfile = workdir_pref(join('dir_00', filename))
|
|
Path(newfile).touch()
|
|
assert filename in manager.files
|
|
manager.filename = filename
|
|
assert manager.filename == filename
|
|
remove(newfile)
|
|
|
|
@pytest.mark.parametrize('path', [
|
|
['dir_00', 'illegal.bin'],
|
|
['dir_01', 'legal.txt']
|
|
])
|
|
def test_select_excluded_files(manager, path):
|
|
manager.workdir = workdir_pref(path[0])
|
|
newfile = workdir_pref(join(path[0], path[1]))
|
|
Path(newfile).touch()
|
|
assert path[1] not in manager.files
|
|
with pytest.raises(OSError):
|
|
manager.filename = path[1]
|
|
remove(newfile)
|
|
|
|
@pytest.mark.parametrize('path', [
|
|
['dir_02/empty.txt', 'dir_00/link.txt'],
|
|
['dir_01/empty.txt', 'dir_00/link.bin']
|
|
])
|
|
def test_select_excluded_symlinks(manager, path):
|
|
manager.workdir = workdir_pref('dir_00')
|
|
link = workdir_pref(path[1])
|
|
symlink(workdir_pref(path[0]), link)
|
|
assert path[1] not in manager.files
|
|
remove(link)
|
|
|
|
def test_read_write_file(manager):
|
|
for _ in range(128):
|
|
manager.workdir = workdir_pref('dir_00')
|
|
manager.filename = 'empty.txt'
|
|
content = token_urlsafe(32)
|
|
manager.file_contents = content
|
|
assert manager.file_contents == content
|
|
with open(workdir_pref('dir_00/empty.txt'), "r") as ifile:
|
|
assert ifile.read() == content
|