aboutsummaryrefslogtreecommitdiffstats
path: root/test/fileutils
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-25 00:58:54 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-25 00:58:54 +0000
commit98fce6fea8b9bf581341a1b47766cfe262062397 (patch)
treeb326e302e9e1649d3e3e8773e3ada0c8aeb3c549 /test/fileutils
parentd76340fa68f36918b3c6eaff05bde74177f95c62 (diff)
downloadruby-98fce6fea8b9bf581341a1b47766cfe262062397.tar.gz
* test/fileutils/test_fileutils.rb (test_chown_R): Add tests for
chown_R. [Feature #9383][ruby-core:59641] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46092 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/fileutils')
-rw-r--r--test/fileutils/test_fileutils.rb110
1 files changed, 105 insertions, 5 deletions
diff --git a/test/fileutils/test_fileutils.rb b/test/fileutils/test_fileutils.rb
index 2e997a716c..9f862d8294 100644
--- a/test/fileutils/test_fileutils.rb
+++ b/test/fileutils/test_fileutils.rb
@@ -1163,6 +1163,76 @@ class TestFileUtils < Test::Unit::TestCase
}
end
+ def test_chown_R
+ check_singleton :chown_R
+
+ return unless @groups[1]
+
+ input_group_1 = @groups[0]
+ input_group_2 = @groups[1]
+ assert_output_lines([]) {
+ list = ['tmp/dir', 'tmp/dir/a', 'tmp/dir/a/b', 'tmp/dir/a/b/c']
+ mkdir_p 'tmp/dir/a/b/c'
+ touch 'tmp/d'
+ # string input
+ chown_R nil, input_group_1, 'tmp/dir'
+ list.each {|dir|
+ assert_ownership_group @groups[0], dir
+ }
+ chown_R nil, input_group_1, 'tmp/d'
+ assert_ownership_group @groups[0], 'tmp/d'
+ # list input
+ chown_R nil, input_group_2, ['tmp/dir', 'tmp/d']
+ list += ['tmp/d']
+ list.each {|dir|
+ assert_ownership_group @groups[1], dir
+ }
+ }
+ end
+
+ def test_chown_R_verbose
+ assert_output_lines(["chown -R :#{@groups[0]} tmp/dir tmp/d"]) {
+ list = ['tmp/dir', 'tmp/dir/a', 'tmp/dir/a/b', 'tmp/dir/a/b/c']
+ mkdir_p 'tmp/dir/a/b/c'
+ touch 'tmp/d'
+ chown_R nil, @groups[0], ['tmp/dir', 'tmp/d'], :verbose => true
+ list.each {|dir|
+ assert_ownership_group @groups[0], dir
+ }
+ }
+ end
+
+ def test_chown_R_noop
+ return unless @groups[1]
+
+ assert_output_lines([]) {
+ list = ['tmp/dir', 'tmp/dir/a', 'tmp/dir/a/b', 'tmp/dir/a/b/c']
+ mkdir_p 'tmp/dir/a/b/c'
+ chown_R nil, @groups[0], 'tmp/dir', :noop => false
+ list.each {|dir|
+ assert_ownership_group @groups[0], dir
+ }
+ chown_R nil, @groups[1], 'tmp/dir', :noop => true
+ list.each {|dir|
+ assert_ownership_group @groups[0], dir
+ }
+ }
+ end
+
+ def test_chown_R_force
+ assert_output_lines([]) {
+ list = ['tmp/dir', 'tmp/dir/a', 'tmp/dir/a/b', 'tmp/dir/a/b/c']
+ mkdir_p 'tmp/dir/a/b/c'
+ assert_raise_with_message(Errno::ENOENT, /No such file or directory/) {
+ chown_R nil, @groups[0], ['tmp/dir', 'invalid'], :force => false
+ }
+ chown_R nil, @groups[0], ['tmp/dir', 'invalid'], :force => true
+ list.each {|dir|
+ assert_ownership_group @groups[0], dir
+ }
+ }
+ end
+
if root_in_posix?
def test_chown_with_root
uid_1, uid_2 = distinct_uids(2)
@@ -1199,6 +1269,30 @@ class TestFileUtils < Test::Unit::TestCase
assert_ownership_user uid_1, 'tmp/dir/a'
}
end
+
+ def test_chown_R_with_root
+ uid_1, uid_2 = distinct_uids(2)
+ return unless uid_1 and uid_2
+
+ assert_output_lines([]) {
+ list = ['tmp/dir', 'tmp/dir/a', 'tmp/dir/a/b', 'tmp/dir/a/b/c']
+ mkdir_p 'tmp/dir/a/b/c'
+ touch 'tmp/d'
+ # string input
+ chown_R uid_1, nil, 'tmp/dir'
+ list.each {|dir|
+ assert_ownership_user uid_1, dir
+ }
+ chown_R uid_1, nil, 'tmp/d'
+ assert_ownership_user uid_1, 'tmp/d'
+ # list input
+ chown_R uid_2, nil, ['tmp/dir', 'tmp/d']
+ list += ['tmp/d']
+ list.each {|dir|
+ assert_ownership_user uid_2, dir
+ }
+ }
+ end
else
def test_chown_without_permission
uid_1, uid_2 = distinct_uids(2)
@@ -1210,14 +1304,20 @@ class TestFileUtils < Test::Unit::TestCase
chown uid_2, nil, 'tmp/a'
}
end
+
+ def test_chown_R_without_permission
+ uid_1, uid_2 = distinct_uids(2)
+ return unless uid_1 and uid_2
+
+ touch 'tmp/a'
+ exception = assert_raise(Errno::EPERM) {
+ chown_R uid_1, nil, 'tmp/a'
+ chown_R uid_2, nil, 'tmp/a'
+ }
+ end
end
end
- # FIXME: How can I test this method?
- def test_chown_R
- check_singleton :chown_R
- end if have_file_perm?
-
def test_copy_entry
check_singleton :copy_entry