spec/: skip some specs so that no failure occurs in root privilege

Follow up of r61757,  This change makes `sudo make test-spec` pass on my
machine.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2018-01-10 13:30:25 +00:00
parent 5d0103f973
commit 205f0dcf3a
10 changed files with 143 additions and 113 deletions

View File

@ -66,20 +66,22 @@ end
# The permissions flag are not supported on Windows as stated in documentation: # The permissions flag are not supported on Windows as stated in documentation:
# The permissions may be modified by the value of File.umask, and are ignored on NT. # The permissions may be modified by the value of File.umask, and are ignored on NT.
platform_is_not :windows do platform_is_not :windows do
describe "Dir.mkdir" do as_user do
before :each do describe "Dir.mkdir" do
@dir = tmp "noperms" before :each do
end @dir = tmp "noperms"
end
after :each do after :each do
File.chmod 0777, @dir File.chmod 0777, @dir
rm_r @dir rm_r @dir
end end
it "raises a SystemCallError when lacking adequate permissions in the parent dir" do it "raises a SystemCallError when lacking adequate permissions in the parent dir" do
Dir.mkdir @dir, 0000 Dir.mkdir @dir, 0000
lambda { Dir.mkdir "#{@dir}/subdir" }.should raise_error(SystemCallError) lambda { Dir.mkdir "#{@dir}/subdir" }.should raise_error(SystemCallError)
end
end end
end end
end end

View File

@ -49,13 +49,15 @@ describe :dir_delete, shared: true do
# this won't work on Windows, since chmod(0000) does not remove all permissions # this won't work on Windows, since chmod(0000) does not remove all permissions
platform_is_not :windows do platform_is_not :windows do
it "raises an Errno::EACCES if lacking adequate permissions to remove the directory" do as_user do
parent = DirSpecs.mock_rmdir("noperm") it "raises an Errno::EACCES if lacking adequate permissions to remove the directory" do
child = DirSpecs.mock_rmdir("noperm", "child") parent = DirSpecs.mock_rmdir("noperm")
File.chmod(0000, parent) child = DirSpecs.mock_rmdir("noperm", "child")
lambda do File.chmod(0000, parent)
Dir.send @method, child lambda do
end.should raise_error(Errno::EACCES) Dir.send @method, child
end.should raise_error(Errno::EACCES)
end
end end
end end
end end

View File

@ -71,37 +71,39 @@ describe "File#chmod" do
end end
platform_is_not :windows do platform_is_not :windows do
it "with '0222' makes file writable but not readable or executable" do as_user do
@file.chmod(0222) it "with '0222' makes file writable but not readable or executable" do
File.readable?(@filename).should == false @file.chmod(0222)
File.writable?(@filename).should == true File.readable?(@filename).should == false
File.executable?(@filename).should == false File.writable?(@filename).should == true
end File.executable?(@filename).should == false
end
it "with '0444' makes file readable but not writable or executable" do it "with '0444' makes file readable but not writable or executable" do
@file.chmod(0444) @file.chmod(0444)
File.readable?(@filename).should == true File.readable?(@filename).should == true
File.writable?(@filename).should == false File.writable?(@filename).should == false
File.executable?(@filename).should == false File.executable?(@filename).should == false
end end
it "with '0666' makes file readable and writable but not executable" do it "with '0666' makes file readable and writable but not executable" do
@file.chmod(0666) @file.chmod(0666)
File.readable?(@filename).should == true File.readable?(@filename).should == true
File.writable?(@filename).should == true File.writable?(@filename).should == true
File.executable?(@filename).should == false File.executable?(@filename).should == false
end end
it "with '0111' makes file executable but not readable or writable" do it "with '0111' makes file executable but not readable or writable" do
@file.chmod(0111) @file.chmod(0111)
File.readable?(@filename).should == false File.readable?(@filename).should == false
File.writable?(@filename).should == false File.writable?(@filename).should == false
File.executable?(@filename).should == true File.executable?(@filename).should == true
end end
it "modifies the permission bits of the files specified" do it "modifies the permission bits of the files specified" do
@file.chmod(0755) @file.chmod(0755)
File.stat(@filename).mode.should == 33261 File.stat(@filename).mode.should == 33261
end
end end
end end
end end
@ -204,18 +206,20 @@ describe "File.chmod" do
end end
platform_is_not :windows do platform_is_not :windows do
it "with '0222' makes file writable but not readable or executable" do as_user do
File.chmod(0222, @file) it "with '0222' makes file writable but not readable or executable" do
File.readable?(@file).should == false File.chmod(0222, @file)
File.writable?(@file).should == true File.readable?(@file).should == false
File.executable?(@file).should == false File.writable?(@file).should == true
end File.executable?(@file).should == false
end
it "with '0444' makes file readable but not writable or executable" do it "with '0444' makes file readable but not writable or executable" do
File.chmod(0444, @file) File.chmod(0444, @file)
File.readable?(@file).should == true File.readable?(@file).should == true
File.writable?(@file).should == false File.writable?(@file).should == false
File.executable?(@file).should == false File.executable?(@file).should == false
end
end end
it "with '0666' makes file readable and writable but not executable" do it "with '0666' makes file readable and writable but not executable" do
@ -225,11 +229,13 @@ describe "File.chmod" do
File.executable?(@file).should == false File.executable?(@file).should == false
end end
it "with '0111' makes file executable but not readable or writable" do as_user do
File.chmod(0111, @file) it "with '0111' makes file executable but not readable or writable" do
File.readable?(@file).should == false File.chmod(0111, @file)
File.writable?(@file).should == false File.readable?(@file).should == false
File.executable?(@file).should == true File.writable?(@file).should == false
File.executable?(@file).should == true
end
end end
it "modifies the permission bits of the files specified" do it "modifies the permission bits of the files specified" do

View File

@ -147,11 +147,13 @@ describe "File.open" do
end end
platform_is_not :windows do platform_is_not :windows do
it "creates a new write-only file when invoked with 'w' and '0222'" do as_user do
rm_r @file it "creates a new write-only file when invoked with 'w' and '0222'" do
File.open(@file, 'w', 0222) {} rm_r @file
File.readable?(@file).should == false File.open(@file, 'w', 0222) {}
File.writable?(@file).should == true File.readable?(@file).should == false
File.writable?(@file).should == true
end
end end
end end
@ -464,17 +466,21 @@ describe "File.open" do
end end
platform_is_not :windows do platform_is_not :windows do
it "raises an Errno::EACCES when opening non-permitted file" do as_user do
@fh = File.open(@file, "w") it "raises an Errno::EACCES when opening non-permitted file" do
@fh.chmod(000) @fh = File.open(@file, "w")
lambda { fh1 = File.open(@file); fh1.close }.should raise_error(Errno::EACCES) @fh.chmod(000)
lambda { fh1 = File.open(@file); fh1.close }.should raise_error(Errno::EACCES)
end
end end
end end
it "raises an Errno::EACCES when opening read-only file" do as_user do
@fh = File.open(@file, "w") it "raises an Errno::EACCES when opening read-only file" do
@fh.chmod(0444) @fh = File.open(@file, "w")
lambda { File.open(@file, "w") }.should raise_error(Errno::EACCES) @fh.chmod(0444)
lambda { File.open(@file, "w") }.should raise_error(Errno::EACCES)
end
end end
it "opens a file for binary read" do it "opens a file for binary read" do

View File

@ -24,9 +24,11 @@ describe "File.owned?" do
end end
platform_is_not :windows do platform_is_not :windows do
it "returns false when the file is not owned by the user" do as_user do
system_file = '/etc/passwd' it "returns false when the file is not owned by the user" do
File.owned?(system_file).should == false system_file = '/etc/passwd'
File.owned?(system_file).should == false
end
end end
end end

View File

@ -22,10 +22,12 @@ describe "File::Stat#owned?" do
end end
platform_is_not :windows do platform_is_not :windows do
it "returns false if the file is not owned by the user" do as_user do
system_file = '/etc/passwd' it "returns false if the file is not owned by the user" do
st = File.stat(system_file) system_file = '/etc/passwd'
st.owned?.should == false st = File.stat(system_file)
st.owned?.should == false
end
end end
end end
end end

View File

@ -27,21 +27,23 @@ describe :kernel_require_basic, shared: true do
# Can't make a file unreadable on these platforms # Can't make a file unreadable on these platforms
platform_is_not :windows, :cygwin do platform_is_not :windows, :cygwin do
describe "with an unreadable file" do as_user do
before :each do describe "with an unreadable file" do
@path = tmp("unreadable_file.rb") before :each do
touch @path @path = tmp("unreadable_file.rb")
File.chmod 0000, @path touch @path
end File.chmod 0000, @path
end
after :each do after :each do
File.chmod 0666, @path File.chmod 0666, @path
rm_r @path rm_r @path
end end
it "raises a LoadError" do it "raises a LoadError" do
File.exist?(@path).should be_true File.exist?(@path).should be_true
lambda { @object.send(@method, @path) }.should raise_error(LoadError) lambda { @object.send(@method, @path) }.should raise_error(LoadError)
end
end end
end end
end end

View File

@ -2,18 +2,20 @@ require File.expand_path('../../../spec_helper', __FILE__)
describe "Process.initgroups" do describe "Process.initgroups" do
platform_is_not :windows do platform_is_not :windows do
it "initializes the supplemental group access list" do as_user do
name = `id -un`.strip it "initializes the supplemental group access list" do
groups = Process.groups name = `id -un`.strip
gid = groups.max.to_i + 1 groups = Process.groups
augmented_groups = `id -G`.scan(/\d+/).map {|i| i.to_i} << gid gid = groups.max.to_i + 1
if Process.uid == 0 augmented_groups = `id -G`.scan(/\d+/).map {|i| i.to_i} << gid
Process.groups = [] if Process.uid == 0
Process.initgroups(name, gid).sort.should == augmented_groups.sort Process.groups = []
Process.groups.sort.should == augmented_groups.sort Process.initgroups(name, gid).sort.should == augmented_groups.sort
Process.groups = groups Process.groups.sort.should == augmented_groups.sort
else Process.groups = groups
lambda { Process.initgroups(name, gid) }.should raise_error(Errno::EPERM) else
lambda { Process.initgroups(name, gid) }.should raise_error(Errno::EPERM)
end
end end
end end
end end

View File

@ -34,9 +34,11 @@ describe "Socket#bind on SOCK_DGRAM socket" do
end end
platform_is_not :windows, :cygwin do platform_is_not :windows, :cygwin do
it "raises Errno::EACCES when the current user does not have permission to bind" do as_user do
sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") it "raises Errno::EACCES when the current user does not have permission to bind" do
lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1")
lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES)
end
end end
end end
end end
@ -73,9 +75,11 @@ describe "Socket#bind on SOCK_STREAM socket" do
end end
platform_is_not :windows, :cygwin do platform_is_not :windows, :cygwin do
it "raises Errno::EACCES when the current user does not have permission to bind" do as_user do
sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") it "raises Errno::EACCES when the current user does not have permission to bind" do
lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1")
lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES)
end
end end
end end
end end

View File

@ -9,7 +9,9 @@ describe :file_writable, shared: true do
it "returns true if named file is writable by the effective user id of the process, otherwise false" do it "returns true if named file is writable by the effective user id of the process, otherwise false" do
platform_is_not :windows do platform_is_not :windows do
@object.send(@method, "/etc/passwd").should == false as_user do
@object.send(@method, "/etc/passwd").should == false
end
end end
File.open(@file,'w') { @object.send(@method, @file).should == true } File.open(@file,'w') { @object.send(@method, @file).should == true }
end end