From 205f0dcf3aafffc1f7a26628845bf6e1b71441da Mon Sep 17 00:00:00 2001 From: mame Date: Wed, 10 Jan 2018 13:30:25 +0000 Subject: 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 --- spec/ruby/core/dir/mkdir_spec.rb | 24 ++++--- spec/ruby/core/dir/shared/delete.rb | 16 +++-- spec/ruby/core/file/chmod_spec.rb | 102 ++++++++++++++------------- spec/ruby/core/file/open_spec.rb | 32 +++++---- spec/ruby/core/file/owned_spec.rb | 8 ++- spec/ruby/core/file/stat/owned_spec.rb | 10 +-- spec/ruby/core/kernel/shared/require.rb | 32 +++++---- spec/ruby/core/process/initgroups_spec.rb | 26 +++---- spec/ruby/library/socket/socket/bind_spec.rb | 16 +++-- spec/ruby/shared/file/writable.rb | 4 +- 10 files changed, 150 insertions(+), 120 deletions(-) diff --git a/spec/ruby/core/dir/mkdir_spec.rb b/spec/ruby/core/dir/mkdir_spec.rb index 7eb8a8fe6c..e724840160 100644 --- a/spec/ruby/core/dir/mkdir_spec.rb +++ b/spec/ruby/core/dir/mkdir_spec.rb @@ -66,20 +66,22 @@ end # 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. platform_is_not :windows do - describe "Dir.mkdir" do - before :each do - @dir = tmp "noperms" - end + as_user do + describe "Dir.mkdir" do + before :each do + @dir = tmp "noperms" + end - after :each do - File.chmod 0777, @dir - rm_r @dir - end + after :each do + File.chmod 0777, @dir + rm_r @dir + end - it "raises a SystemCallError when lacking adequate permissions in the parent dir" do - Dir.mkdir @dir, 0000 + it "raises a SystemCallError when lacking adequate permissions in the parent dir" do + 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 diff --git a/spec/ruby/core/dir/shared/delete.rb b/spec/ruby/core/dir/shared/delete.rb index 8db17d985f..649708cd76 100644 --- a/spec/ruby/core/dir/shared/delete.rb +++ b/spec/ruby/core/dir/shared/delete.rb @@ -49,13 +49,15 @@ describe :dir_delete, shared: true do # this won't work on Windows, since chmod(0000) does not remove all permissions platform_is_not :windows do - it "raises an Errno::EACCES if lacking adequate permissions to remove the directory" do - parent = DirSpecs.mock_rmdir("noperm") - child = DirSpecs.mock_rmdir("noperm", "child") - File.chmod(0000, parent) - lambda do - Dir.send @method, child - end.should raise_error(Errno::EACCES) + as_user do + it "raises an Errno::EACCES if lacking adequate permissions to remove the directory" do + parent = DirSpecs.mock_rmdir("noperm") + child = DirSpecs.mock_rmdir("noperm", "child") + File.chmod(0000, parent) + lambda do + Dir.send @method, child + end.should raise_error(Errno::EACCES) + end end end end diff --git a/spec/ruby/core/file/chmod_spec.rb b/spec/ruby/core/file/chmod_spec.rb index 8590f3008d..a741ebb966 100644 --- a/spec/ruby/core/file/chmod_spec.rb +++ b/spec/ruby/core/file/chmod_spec.rb @@ -71,37 +71,39 @@ describe "File#chmod" do end platform_is_not :windows do - it "with '0222' makes file writable but not readable or executable" do - @file.chmod(0222) - File.readable?(@filename).should == false - File.writable?(@filename).should == true - File.executable?(@filename).should == false - end - - it "with '0444' makes file readable but not writable or executable" do - @file.chmod(0444) - File.readable?(@filename).should == true - File.writable?(@filename).should == false - File.executable?(@filename).should == false - end - - it "with '0666' makes file readable and writable but not executable" do - @file.chmod(0666) - File.readable?(@filename).should == true - File.writable?(@filename).should == true - File.executable?(@filename).should == false - end - - it "with '0111' makes file executable but not readable or writable" do - @file.chmod(0111) - File.readable?(@filename).should == false - File.writable?(@filename).should == false - File.executable?(@filename).should == true - end - - it "modifies the permission bits of the files specified" do - @file.chmod(0755) - File.stat(@filename).mode.should == 33261 + as_user do + it "with '0222' makes file writable but not readable or executable" do + @file.chmod(0222) + File.readable?(@filename).should == false + File.writable?(@filename).should == true + File.executable?(@filename).should == false + end + + it "with '0444' makes file readable but not writable or executable" do + @file.chmod(0444) + File.readable?(@filename).should == true + File.writable?(@filename).should == false + File.executable?(@filename).should == false + end + + it "with '0666' makes file readable and writable but not executable" do + @file.chmod(0666) + File.readable?(@filename).should == true + File.writable?(@filename).should == true + File.executable?(@filename).should == false + end + + it "with '0111' makes file executable but not readable or writable" do + @file.chmod(0111) + File.readable?(@filename).should == false + File.writable?(@filename).should == false + File.executable?(@filename).should == true + end + + it "modifies the permission bits of the files specified" do + @file.chmod(0755) + File.stat(@filename).mode.should == 33261 + end end end end @@ -204,18 +206,20 @@ describe "File.chmod" do end platform_is_not :windows do - it "with '0222' makes file writable but not readable or executable" do - File.chmod(0222, @file) - File.readable?(@file).should == false - File.writable?(@file).should == true - File.executable?(@file).should == false - end - - it "with '0444' makes file readable but not writable or executable" do - File.chmod(0444, @file) - File.readable?(@file).should == true - File.writable?(@file).should == false - File.executable?(@file).should == false + as_user do + it "with '0222' makes file writable but not readable or executable" do + File.chmod(0222, @file) + File.readable?(@file).should == false + File.writable?(@file).should == true + File.executable?(@file).should == false + end + + it "with '0444' makes file readable but not writable or executable" do + File.chmod(0444, @file) + File.readable?(@file).should == true + File.writable?(@file).should == false + File.executable?(@file).should == false + end end 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 end - it "with '0111' makes file executable but not readable or writable" do - File.chmod(0111, @file) - File.readable?(@file).should == false - File.writable?(@file).should == false - File.executable?(@file).should == true + as_user do + it "with '0111' makes file executable but not readable or writable" do + File.chmod(0111, @file) + File.readable?(@file).should == false + File.writable?(@file).should == false + File.executable?(@file).should == true + end end it "modifies the permission bits of the files specified" do diff --git a/spec/ruby/core/file/open_spec.rb b/spec/ruby/core/file/open_spec.rb index 440921a796..9d0ef62939 100644 --- a/spec/ruby/core/file/open_spec.rb +++ b/spec/ruby/core/file/open_spec.rb @@ -147,11 +147,13 @@ describe "File.open" do end platform_is_not :windows do - it "creates a new write-only file when invoked with 'w' and '0222'" do - rm_r @file - File.open(@file, 'w', 0222) {} - File.readable?(@file).should == false - File.writable?(@file).should == true + as_user do + it "creates a new write-only file when invoked with 'w' and '0222'" do + rm_r @file + File.open(@file, 'w', 0222) {} + File.readable?(@file).should == false + File.writable?(@file).should == true + end end end @@ -464,17 +466,21 @@ describe "File.open" do end platform_is_not :windows do - it "raises an Errno::EACCES when opening non-permitted file" do - @fh = File.open(@file, "w") - @fh.chmod(000) - lambda { fh1 = File.open(@file); fh1.close }.should raise_error(Errno::EACCES) + as_user do + it "raises an Errno::EACCES when opening non-permitted file" do + @fh = File.open(@file, "w") + @fh.chmod(000) + lambda { fh1 = File.open(@file); fh1.close }.should raise_error(Errno::EACCES) + end end end - it "raises an Errno::EACCES when opening read-only file" do - @fh = File.open(@file, "w") - @fh.chmod(0444) - lambda { File.open(@file, "w") }.should raise_error(Errno::EACCES) + as_user do + it "raises an Errno::EACCES when opening read-only file" do + @fh = File.open(@file, "w") + @fh.chmod(0444) + lambda { File.open(@file, "w") }.should raise_error(Errno::EACCES) + end end it "opens a file for binary read" do diff --git a/spec/ruby/core/file/owned_spec.rb b/spec/ruby/core/file/owned_spec.rb index d19e9cb278..c2d8a74b49 100644 --- a/spec/ruby/core/file/owned_spec.rb +++ b/spec/ruby/core/file/owned_spec.rb @@ -24,9 +24,11 @@ describe "File.owned?" do end platform_is_not :windows do - it "returns false when the file is not owned by the user" do - system_file = '/etc/passwd' - File.owned?(system_file).should == false + as_user do + it "returns false when the file is not owned by the user" do + system_file = '/etc/passwd' + File.owned?(system_file).should == false + end end end diff --git a/spec/ruby/core/file/stat/owned_spec.rb b/spec/ruby/core/file/stat/owned_spec.rb index 4c4d843bbe..f321aefe7a 100644 --- a/spec/ruby/core/file/stat/owned_spec.rb +++ b/spec/ruby/core/file/stat/owned_spec.rb @@ -22,10 +22,12 @@ describe "File::Stat#owned?" do end platform_is_not :windows do - it "returns false if the file is not owned by the user" do - system_file = '/etc/passwd' - st = File.stat(system_file) - st.owned?.should == false + as_user do + it "returns false if the file is not owned by the user" do + system_file = '/etc/passwd' + st = File.stat(system_file) + st.owned?.should == false + end end end end diff --git a/spec/ruby/core/kernel/shared/require.rb b/spec/ruby/core/kernel/shared/require.rb index 3296c7f42a..bf92b5509c 100644 --- a/spec/ruby/core/kernel/shared/require.rb +++ b/spec/ruby/core/kernel/shared/require.rb @@ -27,21 +27,23 @@ describe :kernel_require_basic, shared: true do # Can't make a file unreadable on these platforms platform_is_not :windows, :cygwin do - describe "with an unreadable file" do - before :each do - @path = tmp("unreadable_file.rb") - touch @path - File.chmod 0000, @path - end - - after :each do - File.chmod 0666, @path - rm_r @path - end - - it "raises a LoadError" do - File.exist?(@path).should be_true - lambda { @object.send(@method, @path) }.should raise_error(LoadError) + as_user do + describe "with an unreadable file" do + before :each do + @path = tmp("unreadable_file.rb") + touch @path + File.chmod 0000, @path + end + + after :each do + File.chmod 0666, @path + rm_r @path + end + + it "raises a LoadError" do + File.exist?(@path).should be_true + lambda { @object.send(@method, @path) }.should raise_error(LoadError) + end end end end diff --git a/spec/ruby/core/process/initgroups_spec.rb b/spec/ruby/core/process/initgroups_spec.rb index 084c52652c..a4edf1b8ff 100644 --- a/spec/ruby/core/process/initgroups_spec.rb +++ b/spec/ruby/core/process/initgroups_spec.rb @@ -2,18 +2,20 @@ require File.expand_path('../../../spec_helper', __FILE__) describe "Process.initgroups" do platform_is_not :windows do - it "initializes the supplemental group access list" do - name = `id -un`.strip - groups = Process.groups - gid = groups.max.to_i + 1 - augmented_groups = `id -G`.scan(/\d+/).map {|i| i.to_i} << gid - if Process.uid == 0 - Process.groups = [] - Process.initgroups(name, gid).sort.should == augmented_groups.sort - Process.groups.sort.should == augmented_groups.sort - Process.groups = groups - else - lambda { Process.initgroups(name, gid) }.should raise_error(Errno::EPERM) + as_user do + it "initializes the supplemental group access list" do + name = `id -un`.strip + groups = Process.groups + gid = groups.max.to_i + 1 + augmented_groups = `id -G`.scan(/\d+/).map {|i| i.to_i} << gid + if Process.uid == 0 + Process.groups = [] + Process.initgroups(name, gid).sort.should == augmented_groups.sort + Process.groups.sort.should == augmented_groups.sort + Process.groups = groups + else + lambda { Process.initgroups(name, gid) }.should raise_error(Errno::EPERM) + end end end end diff --git a/spec/ruby/library/socket/socket/bind_spec.rb b/spec/ruby/library/socket/socket/bind_spec.rb index 399c988b32..f5b19979ea 100644 --- a/spec/ruby/library/socket/socket/bind_spec.rb +++ b/spec/ruby/library/socket/socket/bind_spec.rb @@ -34,9 +34,11 @@ describe "Socket#bind on SOCK_DGRAM socket" do end platform_is_not :windows, :cygwin do - it "raises Errno::EACCES when the current user does not have permission to bind" do - sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") - lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) + as_user do + it "raises Errno::EACCES when the current user does not have permission to bind" do + sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") + lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) + end end end end @@ -73,9 +75,11 @@ describe "Socket#bind on SOCK_STREAM socket" do end platform_is_not :windows, :cygwin do - it "raises Errno::EACCES when the current user does not have permission to bind" do - sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") - lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) + as_user do + it "raises Errno::EACCES when the current user does not have permission to bind" do + sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") + lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) + end end end end diff --git a/spec/ruby/shared/file/writable.rb b/spec/ruby/shared/file/writable.rb index e8296928f3..902d545da1 100644 --- a/spec/ruby/shared/file/writable.rb +++ b/spec/ruby/shared/file/writable.rb @@ -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 platform_is_not :windows do - @object.send(@method, "/etc/passwd").should == false + as_user do + @object.send(@method, "/etc/passwd").should == false + end end File.open(@file,'w') { @object.send(@method, @file).should == true } end -- cgit v1.2.3