diff options
author | Martin Pärtel <martin.partel@gmail.com> | 2017-01-29 17:09:33 +0000 |
---|---|---|
committer | Martin Pärtel <martin.partel@gmail.com> | 2017-01-29 17:09:33 +0000 |
commit | 8f4b7de90989ab17260b6d7b926b2b71012475b3 (patch) | |
tree | de0b08e038cc2272c80d067502f248cdde0a3067 /tests | |
parent | 18300876c860cad126fb316a82509a95c002d766 (diff) | |
download | bindfs-8f4b7de90989ab17260b6d7b926b2b71012475b3.tar.gz |
Fixed #47 by not setting `-ofsname=` when it would contain a comma.
Also banned some other characters that are likely to lead to trouble.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/common.rb | 16 | ||||
-rwxr-xr-x | tests/test_bindfs.rb | 31 |
2 files changed, 42 insertions, 5 deletions
diff --git a/tests/common.rb b/tests/common.rb index 518aab2..81d45fc 100644 --- a/tests/common.rb +++ b/tests/common.rb @@ -19,6 +19,7 @@ # require 'fileutils' +require 'shellwords' include FileUtils # Set the default umask for all tests @@ -92,7 +93,9 @@ def testenv(bindfs_args, options = {}, &block) options = { :title => bindfs_args, :valgrind => valgrind_options != nil, - :valgrind_opts => valgrind_options + :valgrind_opts => valgrind_options, + :srcdir_name => 'src', + :mntdir_name => 'mnt' }.merge(options) # todo: less repetitive and more careful error handling and cleanup @@ -100,6 +103,9 @@ def testenv(bindfs_args, options = {}, &block) puts "--- #{options[:title]} ---" puts "[ #{bindfs_args} ]" + srcdir = options[:srcdir_name] + mntdir = options[:mntdir_name] + begin Dir.mkdir TESTDIR_NAME rescue Exception => ex @@ -108,15 +114,15 @@ def testenv(bindfs_args, options = {}, &block) begin Dir.chdir TESTDIR_NAME - Dir.mkdir 'src' - Dir.mkdir 'mnt' + Dir.mkdir srcdir + Dir.mkdir mntdir rescue Exception => ex fail!("ERROR preparing testdir at #{TESTDIR_NAME}", ex) end bindfs_pid = nil begin - cmd = "../#{EXECUTABLE_PATH} #{bindfs_args} -f src mnt" + cmd = "../#{EXECUTABLE_PATH} #{bindfs_args} -f #{Shellwords.escape(srcdir)} #{Shellwords.escape(mntdir)}" if options[:valgrind] cmd = "valgrind --error-exitcode=100 #{options[:valgrind_opts]} #{cmd}" end @@ -146,7 +152,7 @@ def testenv(bindfs_args, options = {}, &block) end begin - unless system(umount_cmd + ' mnt') + unless system(umount_cmd + ' ' + Shellwords.escape(mntdir)) raise Exception.new(umount_cmd + " failed with status #{$?}") end Process.wait bindfs_pid diff --git a/tests/test_bindfs.rb b/tests/test_bindfs.rb index 39f709e..96d6660 100755 --- a/tests/test_bindfs.rb +++ b/tests/test_bindfs.rb @@ -695,6 +695,37 @@ testenv("", :title => "reading directory with rewind") do end end +# Issue 47 +testenv("", :title => "srcdir with comma", :srcdir_name => "a,b") do + touch('a,b/f') + assert { File.exist?('mnt/f') } +end + +testenv("", :title => "mntdir with comma", :mntdir_name => "a,b") do + touch('src/f') + assert { File.exist?('a,b/f') } +end + +testenv("", :title => "srcdir with space", :srcdir_name => "a b") do + touch('a b/f') + assert { File.exist?('mnt/f') } +end + +testenv("", :title => "mntdir with space", :mntdir_name => "a b") do + touch('src/f') + assert { File.exist?('a b/f') } +end + +testenv("", :title => "srcdir with newline", :srcdir_name => "a\nb") do + touch("a\nb/f") + assert { File.exist?('mnt/f') } +end + +testenv("", :title => "mntdir with newline", :mntdir_name => "a\nb") do + touch('src/f') + assert { File.exist?("a\nb/f") } +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 |