aboutsummaryrefslogtreecommitdiffstats
path: root/tests/common.rb
diff options
context:
space:
mode:
authorMartin Pärtel <martin.partel@gmail.com>2025-06-08 12:49:42 +0200
committerMartin Pärtel <martin.partel@gmail.com>2025-06-08 12:49:42 +0200
commit2a5f11a9f6a61d62f7229a5ce3d6cabc5dcfd2bf (patch)
tree04583f85e5233e3b20cbbd6b789f63b76b4fcebc /tests/common.rb
parent43a8fc6dae219fa82f449f054321d22e07660704 (diff)
downloadbindfs-2a5f11a9f6a61d62f7229a5ce3d6cabc5dcfd2bf.tar.gz
MacOS/fuse-t fixes
Diffstat (limited to 'tests/common.rb')
-rw-r--r--tests/common.rb32
1 files changed, 26 insertions, 6 deletions
diff --git a/tests/common.rb b/tests/common.rb
index 69f2eb2..a0c4bfc 100644
--- a/tests/common.rb
+++ b/tests/common.rb
@@ -29,6 +29,11 @@ File.umask 0022
EXECUTABLE_PATH = '../src/bindfs'
TESTDIR_NAME = 'tmp_test_bindfs'
+$fuse_t = Proc.new do
+ system("pkg-config --exists fuse-t")
+ $?.success?
+end.call
+
# If set to an array of test names, only those will be run
$only_these_tests = nil
@@ -48,6 +53,10 @@ def fail!(msg, error = nil, options = {})
fail(msg, error, options)
end
+def sh!(cmd)
+ raise Exception.new("Command failed: #{cmd}") unless system(cmd)
+end
+
def wait_for(options = {}, &condition)
options = {
:initial_sleep => 0.01,
@@ -168,8 +177,13 @@ def testenv(bindfs_args, options = {}, &block)
end
if !$?.success?
- fail("exit status: #{$?}")
- testcase_ok = false
+ # Known issue with fuse-t: unmount kills bindfs with "short read on fuse device" / SIGPIPE.
+ # No idea why.
+ ignore = $?.signaled? && $?.termsig == Signal.list['PIPE'] && $fuse_t
+ unless ignore
+ fail("exit status: #{$?}")
+ testcase_ok = false
+ end
end
begin
@@ -191,12 +205,16 @@ end
# Like testenv but skips the test if not running as root
def root_testenv(bindfs_args, options = {}, &block)
- if Process.uid == 0
- testenv(bindfs_args, options, &block)
- else
+ if Process.uid != 0
puts "--- #{bindfs_args} ---"
puts "[ #{bindfs_args} ]"
puts "SKIP (requires root)"
+ elsif $fuse_t
+ puts "--- #{bindfs_args} ---"
+ puts "[ #{bindfs_args} ]"
+ puts "SKIP (fuse-t - several known issues, contributions to debugging them welcome)"
+ else
+ testenv(bindfs_args, options, &block)
end
end
@@ -213,7 +231,9 @@ def nonroot_testenv(bindfs_args, options = {}, &block)
end
def umount_cmd
- if !`which fusermount3`.strip.empty?
+ if $fuse_t
+ 'diskutil unmount force'
+ elsif !`which fusermount3`.strip.empty?
'fusermount3 -uz'
elsif !`which fusermount`.strip.empty?
'fusermount -uz'