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/test_ctests.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/test_ctests.py (limited to 'test/test_ctests.py') 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) + + -- cgit v1.2.3