aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_examples.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_examples.py')
-rwxr-xr-xtest/test_examples.py106
1 files changed, 73 insertions, 33 deletions
diff --git a/test/test_examples.py b/test/test_examples.py
index 31d2fae..5ddc860 100755
--- a/test/test_examples.py
+++ b/test/test_examples.py
@@ -14,9 +14,10 @@ import shutil
import filecmp
import errno
from tempfile import NamedTemporaryFile
-from util import wait_for_mount, umount, cleanup
+from util import wait_for_mount, umount, cleanup, base_cmdline
+from os.path import join as pjoin
-basename = os.path.join(os.path.dirname(__file__), '..')
+basename = pjoin(os.path.dirname(__file__), '..')
TEST_FILE = __file__
with open(TEST_FILE, 'rb') as fh:
@@ -29,13 +30,17 @@ def name_generator(__ctr=[0]):
@pytest.mark.parametrize("name", ('hello', 'hello_ll'))
def test_hello(tmpdir, name):
mnt_dir = str(tmpdir)
- cmdline = [os.path.join(basename, 'example', name),
- '-f', mnt_dir ]
+ cmdline = base_cmdline + \
+ [ pjoin(basename, 'example', name),
+ '-f', mnt_dir ]
+ if name == 'hello_ll':
+ # supports single-threading only
+ cmdline.append('-s')
mount_process = subprocess.Popen(cmdline)
try:
wait_for_mount(mount_process, mnt_dir)
assert os.listdir(mnt_dir) == [ 'hello' ]
- filename = os.path.join(mnt_dir, 'hello')
+ filename = pjoin(mnt_dir, 'hello')
with open(filename, 'r') as fh:
assert fh.read() == 'Hello World!\n'
with pytest.raises(IOError) as exc_info:
@@ -50,18 +55,51 @@ def test_hello(tmpdir, name):
else:
umount(mount_process, mnt_dir)
+def test_fuse_lo_plus(tmpdir):
+ mnt_dir = str(tmpdir.mkdir('mnt'))
+ src_dir = str(tmpdir.mkdir('src'))
+
+ cmdline = base_cmdline + \
+ [ pjoin(basename, 'example', 'fuse_lo-plus'),
+ '-f', '-s', mnt_dir ]
+ mount_process = subprocess.Popen(cmdline)
+ try:
+ wait_for_mount(mount_process, mnt_dir)
+ work_dir = pjoin(mnt_dir, src_dir)
+ tst_write(work_dir)
+ tst_mkdir(work_dir)
+ tst_symlink(work_dir)
+ tst_mknod(work_dir)
+ if os.getuid() == 0:
+ tst_chown(work_dir)
+ # Underlying fs may not have full nanosecond resolution
+ tst_utimens(work_dir, ns_tol=1000)
+ tst_link(work_dir)
+ tst_readdir(work_dir)
+ tst_statvfs(work_dir)
+ tst_truncate_path(work_dir)
+ tst_truncate_fd(work_dir)
+ tst_unlink(work_dir)
+ tst_passthrough(src_dir, work_dir)
+ except:
+ cleanup(mnt_dir)
+ raise
+ else:
+ umount(mount_process, mnt_dir)
+
@pytest.mark.parametrize("name", ('fusexmp', 'fusexmp_fh'))
def test_fusexmp_fh(tmpdir, name):
mnt_dir = str(tmpdir.mkdir('mnt'))
src_dir = str(tmpdir.mkdir('src'))
- cmdline = [os.path.join(basename, 'example', name),
- '-f', '-o' , 'use_ino,readdir_ino,kernel_cache',
+ cmdline = base_cmdline + \
+ [ pjoin(basename, 'example', name),
+ '-f', '-o', 'use_ino,readdir_ino,kernel_cache',
mnt_dir ]
mount_process = subprocess.Popen(cmdline)
try:
wait_for_mount(mount_process, mnt_dir)
- work_dir = os.path.join(mnt_dir, src_dir)
+ work_dir = pjoin(mnt_dir, src_dir)
tst_write(work_dir)
tst_mkdir(work_dir)
tst_symlink(work_dir)
@@ -85,20 +123,21 @@ def test_fusexmp_fh(tmpdir, name):
def test_fioc(tmpdir):
mnt_dir = str(tmpdir)
- testfile = os.path.join(mnt_dir, 'fioc')
- cmdline = [os.path.join(basename, 'example', 'fioc'),
- '-f', mnt_dir ]
+ testfile = pjoin(mnt_dir, 'fioc')
+ cmdline = base_cmdline + \
+ [pjoin(basename, 'example', 'fioc'), '-f', mnt_dir ]
mount_process = subprocess.Popen(cmdline)
try:
wait_for_mount(mount_process, mnt_dir)
- base_cmd = [ os.path.join(basename, 'example', 'fioclient'),
- testfile ]
- assert subprocess.check_output(base_cmd) == b'0\n'
+ cmdline = base_cmdline + \
+ [ pjoin(basename, 'example', 'fioclient'),
+ testfile ]
+ assert subprocess.check_output(cmdline) == b'0\n'
with open(testfile, 'wb') as fh:
fh.write(b'foobar')
- assert subprocess.check_output(base_cmd) == b'6\n'
- subprocess.check_call(base_cmd + [ '3' ])
+ assert subprocess.check_output(cmdline) == b'6\n'
+ subprocess.check_call(cmdline + [ '3' ])
with open(testfile, 'rb') as fh:
assert fh.read()== b'foo'
except:
@@ -109,12 +148,13 @@ def test_fioc(tmpdir):
def test_fsel(tmpdir):
mnt_dir = str(tmpdir)
- cmdline = [os.path.join(basename, 'example', 'fsel'),
+ cmdline = base_cmdline + [pjoin(basename, 'example', 'fsel'),
'-f', mnt_dir ]
mount_process = subprocess.Popen(cmdline)
try:
wait_for_mount(mount_process, mnt_dir)
- cmdline = [ os.path.join(basename, 'example', 'fselclient') ]
+ cmdline = base_cmdline + \
+ [ pjoin(basename, 'example', 'fselclient') ]
subprocess.check_call(cmdline, cwd=mnt_dir)
except:
cleanup(mnt_dir)
@@ -123,7 +163,7 @@ def test_fsel(tmpdir):
umount(mount_process, mnt_dir)
def checked_unlink(filename, path, isdir=False):
- fullname = os.path.join(path, filename)
+ fullname = pjoin(path, filename)
if isdir:
os.rmdir(fullname)
else:
@@ -156,7 +196,7 @@ def tst_symlink(mnt_dir):
checked_unlink(linkname, mnt_dir)
def tst_mknod(mnt_dir):
- filename = os.path.join(mnt_dir, name_generator())
+ filename = pjoin(mnt_dir, name_generator())
shutil.copyfile(TEST_FILE, filename)
fstat = os.lstat(filename)
assert stat.S_ISREG(fstat.st_mode)
@@ -166,7 +206,7 @@ def tst_mknod(mnt_dir):
checked_unlink(filename, mnt_dir)
def tst_chown(mnt_dir):
- filename = os.path.join(mnt_dir, name_generator())
+ filename = pjoin(mnt_dir, name_generator())
os.mkdir(filename)
fstat = os.lstat(filename)
uid = fstat.st_uid
@@ -187,17 +227,17 @@ def tst_chown(mnt_dir):
checked_unlink(filename, mnt_dir, isdir=True)
def tst_write(mnt_dir):
- name = os.path.join(mnt_dir, name_generator())
+ name = pjoin(mnt_dir, name_generator())
shutil.copyfile(TEST_FILE, name)
assert filecmp.cmp(name, TEST_FILE, False)
checked_unlink(name, mnt_dir)
def tst_unlink(mnt_dir):
- name = os.path.join(mnt_dir, name_generator())
+ name = pjoin(mnt_dir, name_generator())
data1 = b'foo'
data2 = b'bar'
- with open(os.path.join(mnt_dir, name), 'wb+', buffering=0) as fh:
+ with open(pjoin(mnt_dir, name), 'wb+', buffering=0) as fh:
fh.write(data1)
checked_unlink(name, mnt_dir)
fh.write(data2)
@@ -208,8 +248,8 @@ def tst_statvfs(mnt_dir):
os.statvfs(mnt_dir)
def tst_link(mnt_dir):
- name1 = os.path.join(mnt_dir, name_generator())
- name2 = os.path.join(mnt_dir, name_generator())
+ name1 = pjoin(mnt_dir, name_generator())
+ name2 = pjoin(mnt_dir, name_generator())
shutil.copyfile(TEST_FILE, name1)
assert filecmp.cmp(name1, TEST_FILE, False)
os.link(name1, name2)
@@ -228,7 +268,7 @@ def tst_link(mnt_dir):
os.unlink(name1)
def tst_readdir(mnt_dir):
- dir_ = os.path.join(mnt_dir, name_generator())
+ dir_ = pjoin(mnt_dir, name_generator())
file_ = dir_ + "/" + name_generator()
subdir = dir_ + "/" + name_generator()
subfile = subdir + "/" + name_generator()
@@ -252,7 +292,7 @@ def tst_readdir(mnt_dir):
def tst_truncate_path(mnt_dir):
assert len(TEST_DATA) > 1024
- filename = os.path.join(mnt_dir, name_generator())
+ filename = pjoin(mnt_dir, name_generator())
with open(filename, 'wb') as fh:
fh.write(TEST_DATA)
@@ -298,7 +338,7 @@ def tst_truncate_fd(mnt_dir):
assert fh.read(size) == TEST_DATA[:size-1024]
def tst_utimens(mnt_dir, ns_tol=0):
- filename = os.path.join(mnt_dir, name_generator())
+ filename = pjoin(mnt_dir, name_generator())
os.mkdir(filename)
fstat = os.lstat(filename)
@@ -323,8 +363,8 @@ def tst_utimens(mnt_dir, ns_tol=0):
def tst_passthrough(src_dir, mnt_dir):
name = name_generator()
- src_name = os.path.join(src_dir, name)
- mnt_name = os.path.join(src_dir, name)
+ src_name = pjoin(src_dir, name)
+ mnt_name = pjoin(src_dir, name)
assert name not in os.listdir(src_dir)
assert name not in os.listdir(mnt_dir)
with open(src_name, 'w') as fh:
@@ -334,8 +374,8 @@ def tst_passthrough(src_dir, mnt_dir):
assert os.stat(src_name) == os.stat(mnt_name)
name = name_generator()
- src_name = os.path.join(src_dir, name)
- mnt_name = os.path.join(src_dir, name)
+ src_name = pjoin(src_dir, name)
+ mnt_name = pjoin(src_dir, name)
assert name not in os.listdir(src_dir)
assert name not in os.listdir(mnt_dir)
with open(mnt_name, 'w') as fh: