diff options
author | Martin Pärtel <martin.partel@gmail.com> | 2017-03-14 00:09:20 +0000 |
---|---|---|
committer | Martin Pärtel <martin.partel@gmail.com> | 2017-03-14 00:09:20 +0000 |
commit | ef44d5b2b3ba4ff4f1c8d60f125f521be9cd0e78 (patch) | |
tree | 90c931c596a10004ff578cf57dd192c98353f193 /tests | |
parent | 3f10f219d18e42967c67349f6e5f4340769e524d (diff) | |
download | bindfs-ef44d5b2b3ba4ff4f1c8d60f125f521be9cd0e78.tar.gz |
Run tests on FreeBSD 10.3 and fix tests so they pass.
Fully fixes issue #51.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/common.rb | 7 | ||||
-rw-r--r-- | tests/readdir_inode.c | 9 | ||||
-rwxr-xr-x | tests/test_bindfs.rb | 42 |
3 files changed, 35 insertions, 23 deletions
diff --git a/tests/common.rb b/tests/common.rb index b3a14e4..24fd036 100644 --- a/tests/common.rb +++ b/tests/common.rb @@ -123,7 +123,12 @@ def testenv(bindfs_args, options = {}, &block) bindfs_pid = nil begin - cmd = "../#{EXECUTABLE_PATH} #{bindfs_args} -f #{Shellwords.escape(srcdir)} #{Shellwords.escape(mntdir)}" + extra_args = "-f" + # Don't rely on user_allow_other in /etc/fuse.conf. + # On FreeBSD it isn't even possible to set that. + extra_args += " --no-allow-other" if Process.uid != 0 + + cmd = "../#{EXECUTABLE_PATH} #{bindfs_args} #{extra_args} #{Shellwords.escape(srcdir)} #{Shellwords.escape(mntdir)}" if options[:valgrind] cmd = "valgrind --error-exitcode=100 #{options[:valgrind_opts]} #{cmd}" end diff --git a/tests/readdir_inode.c b/tests/readdir_inode.c index ed413be..532d2e2 100644 --- a/tests/readdir_inode.c +++ b/tests/readdir_inode.c @@ -20,15 +20,16 @@ int main(int argc, char* argv[]) return 2; } + errno = 0; dent = readdir(dirp); while (dent != NULL) { - if (errno != 0) { - perror("failed to read directory entry"); - return 3; - } printf("%llu %s\n", (unsigned long long)dent->d_ino, dent->d_name); dent = readdir(dirp); } + if (errno != 0) { + perror("failed to read directory entry"); + return 3; + } closedir(dirp); diff --git a/tests/test_bindfs.rb b/tests/test_bindfs.rb index 2badd30..ba30528 100755 --- a/tests/test_bindfs.rb +++ b/tests/test_bindfs.rb @@ -22,6 +22,7 @@ $LOAD_PATH << (ENV['srcdir'] || '.') require 'common.rb' +require 'etc' include Errno @@ -49,6 +50,7 @@ end $nobody_uid = nobody_uid = Etc.getpwnam('nobody').uid $nobody_gid = nobody_gid = Etc.getpwnam('nobody').gid $nobody_group = nobody_group = Etc.getgrgid(nobody_gid).name +$root_group = root_group = Etc.getgrgid(0).name $tests_dir = File.realpath('.') @@ -247,18 +249,20 @@ root_testenv("--mirror=root") do assert { File.stat('mnt/file').gid == $nobody_gid } end -testenv("--chmod-allow-x --chmod-ignore") do - touch('src/file') +if `uname`.strip != 'FreeBSD' # FreeBSD doesn't let us set the sticky bit on files + testenv("--chmod-allow-x --chmod-ignore") do + touch('src/file') - chmod(01700, 'src/file') # sticky bit set + chmod(01700, 'src/file') # sticky bit set - chmod(00077, 'mnt/file') # should change x bits; should not unset sticky bit - assert { File.stat('src/file').mode & 07777 == 01611 } + chmod(00077, 'mnt/file') # should change x bits; should not unset sticky bit + assert { File.stat('src/file').mode & 07777 == 01611 } - mkdir('src/dir') - chmod(0700, 'src/dir') - chmod(0077, 'mnt/dir') # bits on dir should not change - assert { File.stat('src/dir').mode & 0777 == 0700 } + mkdir('src/dir') + chmod(0700, 'src/dir') + chmod(0077, 'mnt/dir') # bits on dir should not change + assert { File.stat('src/dir').mode & 0777 == 0700 } + end end testenv("--chmod-deny --chmod-allow-x") do @@ -289,7 +293,7 @@ testenv("--chmod-filter=g-w,o-rwx") do assert { File.stat('src/file').mode & 0777 == 0640 } end -root_testenv("--map=nobody/root:@#{nobody_group}/@root") do +root_testenv("--map=nobody/root:@#{nobody_group}/@#{root_group}") do touch('src/file') chown('nobody', nobody_group, 'src/file') @@ -310,7 +314,7 @@ root_testenv("--map=nobody/root:@#{nobody_group}/@root") do assert { File.stat('mnt/newdir').gid == 0 } end -root_testenv("--map=@#{nobody_group}/@root") do +root_testenv("--map=@#{nobody_group}/@#{root_group}") do touch('src/file') chown('nobody', nobody_group, 'src/file') @@ -377,20 +381,21 @@ end root_testenv("--uid-offset=2 --gid-offset=20", :title => "file creation with --uid-offset and --gid-offset") do touch('mnt/file') - assert { File.stat('mnt/file').uid == 2 } - assert { File.stat('mnt/file').gid == 20 } assert { File.stat('src/file').uid == 0 } - assert { File.stat('src/file').gid == 0 } + assert { File.stat('mnt/file').uid == 2 } + # Note: BSDs tend to inherit group from parent dir while Linux uses the effective GID. + # This check works for both. + assert { File.stat('mnt/file').gid == File.stat('src/file').gid + 20 } end root_testenv("--uid-offset=2 --gid-offset=20", :title => "chown/chgrp with --uid-offset and --gid-offset") do touch('src/file') chown(6, 25, 'mnt/file') - assert { File.stat('mnt/file').uid == 6 } - assert { File.stat('mnt/file').gid == 25 } assert { File.stat('src/file').uid == 4 } assert { File.stat('src/file').gid == 5 } + assert { File.stat('mnt/file').uid == 6 } + assert { File.stat('mnt/file').gid == 25 } end testenv("", :title => "preserves inode numbers") do @@ -400,7 +405,7 @@ testenv("", :title => "preserves inode numbers") do assert { File.stat('mnt/dir').ino == File.stat('src/dir').ino } end -testenv("", :title => "has readdir inode numbers") do +testenv("", :title => "preserves readdir inode numbers") do touch('src/file') mkdir('src/dir') @@ -744,7 +749,8 @@ end # FIXME: this stuff around testenv is a hax, and testenv may also exit(), which defeats the 'ensure' below. # the test setup ought to be refactored. It might well use MiniTest or something. -if Process.uid == 0 +# TODO: support FreeBSD in this test (different group management commands) +if Process.uid == 0 && `uname`.strip == 'Linux' begin `groupdel bindfs_test_group 2>&1` `groupadd -f bindfs_test_group` |