From 952492ff432a54f54307a368e0256653060648b5 Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Thu, 25 May 2017 13:22:43 -0700 Subject: Factored out C-based tests --- test/meson.build | 2 +- test/test_ctests.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ test/test_examples.py | 47 ------------------------------------- 3 files changed, 65 insertions(+), 48 deletions(-) create mode 100644 test/test_ctests.py (limited to 'test') diff --git a/test/meson.build b/test/meson.build index c5b940f..cf36405 100644 --- a/test/meson.build +++ b/test/meson.build @@ -15,7 +15,7 @@ td += executable('test_syscalls', 'test_syscalls.c', install: false) test_scripts = [ 'conftest.py', 'pytest.ini', 'test_examples.py', - 'util.py' ] + 'util.py', 'test_ctests.py' ] td += custom_target('test_scripts', input: test_scripts, output: test_scripts, build_by_default: true, command: ['cp', '-fPu', '--preserve=mode', diff --git a/test/test_ctests.py b/test/test_ctests.py new file mode 100644 index 0000000..ef643ef --- /dev/null +++ b/test/test_ctests.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +if __name__ == '__main__': + import pytest + import sys + sys.exit(pytest.main([__file__] + sys.argv[1:])) + +import subprocess +import pytest +import platform +from distutils.version import LooseVersion +from util import (wait_for_mount, umount, cleanup, base_cmdline, + safe_sleep, basename, fuse_test_marker) +from os.path import join as pjoin + +pytestmark = fuse_test_marker() + +@pytest.mark.parametrize("writeback", (False, True)) +def test_write_cache(tmpdir, writeback): + if writeback and LooseVersion(platform.release()) < '3.14': + pytest.skip('Requires kernel 3.14 or newer') + # This test hangs under Valgrind when running close(fd) + # test_write_cache.c:test_fs(). Most likely this is because of an internal + # deadlock in valgrind, it probably assumes that until close() returns, + # control does not come to the program. + mnt_dir = str(tmpdir) + cmdline = [ pjoin(basename, 'test', 'test_write_cache'), + mnt_dir ] + if writeback: + cmdline.append('-owriteback_cache') + subprocess.check_call(cmdline) + + +@pytest.mark.parametrize("name", + ('notify_inval_inode', + 'notify_store_retrieve')) +@pytest.mark.parametrize("notify", (True, False)) +def test_notify1(tmpdir, name, notify): + mnt_dir = str(tmpdir) + cmdline = base_cmdline + \ + [ pjoin(basename, 'example', name), + '-f', '--update-interval=1', mnt_dir ] + if not notify: + cmdline.append('--no-notify') + mount_process = subprocess.Popen(cmdline) + try: + wait_for_mount(mount_process, mnt_dir) + filename = pjoin(mnt_dir, 'current_time') + with open(filename, 'r') as fh: + read1 = fh.read() + safe_sleep(2) + with open(filename, 'r') as fh: + read2 = fh.read() + if notify: + assert read1 != read2 + else: + assert read1 == read2 + except: + cleanup(mnt_dir) + raise + else: + umount(mount_process, mnt_dir) + + diff --git a/test/test_examples.py b/test/test_examples.py index 2c71a43..000859a 100755 --- a/test/test_examples.py +++ b/test/test_examples.py @@ -13,8 +13,6 @@ import stat import shutil import filecmp import errno -import platform -from distutils.version import LooseVersion from tempfile import NamedTemporaryFile from util import (wait_for_mount, umount, cleanup, base_cmdline, safe_sleep, basename, fuse_test_marker) @@ -177,36 +175,6 @@ def test_null(tmpdir): umount(mount_process, mnt_file) -@pytest.mark.parametrize("name", - ('notify_inval_inode', - 'notify_store_retrieve')) -@pytest.mark.parametrize("notify", (True, False)) -def test_notify1(tmpdir, name, notify): - mnt_dir = str(tmpdir) - cmdline = base_cmdline + \ - [ pjoin(basename, 'example', name), - '-f', '--update-interval=1', mnt_dir ] - if not notify: - cmdline.append('--no-notify') - mount_process = subprocess.Popen(cmdline) - try: - wait_for_mount(mount_process, mnt_dir) - filename = pjoin(mnt_dir, 'current_time') - with open(filename, 'r') as fh: - read1 = fh.read() - safe_sleep(2) - with open(filename, 'r') as fh: - read2 = fh.read() - if notify: - assert read1 != read2 - else: - assert read1 == read2 - except: - cleanup(mnt_dir) - raise - else: - umount(mount_process, mnt_dir) - @pytest.mark.parametrize("notify", (True, False)) def test_notify_inval_entry(tmpdir, notify): mnt_dir = str(tmpdir) @@ -240,21 +208,6 @@ def test_notify_inval_entry(tmpdir, notify): else: umount(mount_process, mnt_dir) -@pytest.mark.parametrize("writeback", (False, True)) -def test_write_cache(tmpdir, writeback): - if writeback and LooseVersion(platform.release()) < '3.14': - pytest.skip('Requires kernel 3.14 or newer') - # This test hangs under Valgrind when running close(fd) - # test_write_cache.c:test_fs(). Most likely this is because of an internal - # deadlock in valgrind, it probably assumes that until close() returns, - # control does not come to the program. - mnt_dir = str(tmpdir) - cmdline = [ pjoin(basename, 'test', 'test_write_cache'), - mnt_dir ] - if writeback: - cmdline.append('-owriteback_cache') - subprocess.check_call(cmdline) - @pytest.mark.skipif(os.getuid() != 0, reason='needs to run as root') def test_cuse(capfd): -- cgit v1.2.3