[前][次][番号順一覧][スレッド一覧]

ruby-changes:50669

From: naruse <ko1@a...>
Date: Mon, 19 Mar 2018 17:15:23 +0900 (JST)
Subject: [ruby-changes:50669] naruse:r62834 (ruby_2_5): merge revision(s) 61501, 61758: [Backport #14481]

naruse	2018-03-19 17:15:16 +0900 (Mon, 19 Mar 2018)

  New Revision: 62834

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=62834

  Log:
    merge revision(s) 61501,61758: [Backport #14481]
    
    fix concurrent test.
    
    * test/rubygems/test_require.rb (test_concurrent_require):
      Synchronizations should be in ensure clause. Sometimes
      `require` fails (not sure why) and latch is not released.
      Such case introduces unlimited awaiting.
      This patch soleve this problem.
    
    
    skip some tests so that no failure occurs in root privilege
    
    Some tests had failed on `sudo make test-all`, mainly because root can
    access any files regardless of permission.  This change adds `skip`
    guards into such tests.
    
    Note that almost all tests in which `skip` guards is added, already have
    "windows" guard.  This is because there is no support to avoid read
    access by owner on Windows.

  Modified directories:
    branches/ruby_2_5/
  Modified files:
    branches/ruby_2_5/test/dbm/test_dbm.rb
    branches/ruby_2_5/test/gdbm/test_gdbm.rb
    branches/ruby_2_5/test/irb/test_workspace.rb
    branches/ruby_2_5/test/pathname/test_pathname.rb
    branches/ruby_2_5/test/rdoc/test_rdoc_options.rb
    branches/ruby_2_5/test/rdoc/test_rdoc_rdoc.rb
    branches/ruby_2_5/test/rdoc/test_rdoc_rubygems_hook.rb
    branches/ruby_2_5/test/rubygems/test_gem.rb
    branches/ruby_2_5/test/rubygems/test_gem_commands_cleanup_command.rb
    branches/ruby_2_5/test/rubygems/test_gem_commands_install_command.rb
    branches/ruby_2_5/test/rubygems/test_gem_install_update_options.rb
    branches/ruby_2_5/test/rubygems/test_gem_installer.rb
    branches/ruby_2_5/test/rubygems/test_gem_rdoc.rb
    branches/ruby_2_5/test/rubygems/test_gem_remote_fetcher.rb
    branches/ruby_2_5/test/rubygems/test_gem_specification.rb
    branches/ruby_2_5/test/rubygems/test_require.rb
    branches/ruby_2_5/test/sdbm/test_sdbm.rb
    branches/ruby_2_5/test/test_find.rb
    branches/ruby_2_5/version.h
Index: ruby_2_5/test/gdbm/test_gdbm.rb
===================================================================
--- ruby_2_5/test/gdbm/test_gdbm.rb	(revision 62833)
+++ ruby_2_5/test/gdbm/test_gdbm.rb	(revision 62834)
@@ -43,6 +43,8 @@ if defined? GDBM https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/gdbm/test_gdbm.rb#L43
     end
 
     def test_delete_rdonly
+      skip("skipped because root can open anything") if Process.uid == 0
+
       if /^CYGWIN_9/ !~ SYSTEM
         assert_raise(GDBMError) {
           @gdbm_rdonly.delete("foo")
@@ -211,6 +213,8 @@ if defined? GDBM https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/gdbm/test_gdbm.rb#L213
     end if defined? GDBM::NOLOCK # gdbm 1.8.0 specific
 
     def test_s_open_error
+    skip if Process.uid == 0 # because root can open anything
+
       assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0))
       assert_raise(Errno::EACCES, Errno::EWOULDBLOCK) {
         GDBM.open("#{@tmpdir}/#{@prefix}", 0)
Index: ruby_2_5/test/sdbm/test_sdbm.rb
===================================================================
--- ruby_2_5/test/sdbm/test_sdbm.rb	(revision 62833)
+++ ruby_2_5/test/sdbm/test_sdbm.rb	(revision 62834)
@@ -108,6 +108,7 @@ class TestSDBM < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/sdbm/test_sdbm.rb#L108
 
   def test_s_open_error
     skip "doesn't support to avoid read access by owner on Windows" if /mswin|mingw/ =~ RUBY_PLATFORM
+    skip "skipped because root can open anything" if Process.uid == 0
     assert_instance_of(SDBM, sdbm = SDBM.open("#{@tmpdir}/#{@prefix}", 0))
     assert_raise(Errno::EACCES) {
       SDBM.open("#{@tmpdir}/#{@prefix}", 0)
@@ -519,6 +520,7 @@ class TestSDBM < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/sdbm/test_sdbm.rb#L520
   end
 
   def test_readonly
+    skip "skipped because root can read anything" if /mswin|mingw/ !~ RUBY_PLATFORM && Process.uid == 0
     @sdbm["bar"] = "baz"
     @sdbm.close
     File.chmod(0444, @path + ".dir")
Index: ruby_2_5/test/rubygems/test_require.rb
===================================================================
--- ruby_2_5/test/rubygems/test_require.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_require.rb	(revision 62834)
@@ -38,18 +38,6 @@ class TestGemRequire < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_require.rb#L38
     assert require(path), "'#{path}' was already required"
   end
 
-  def append_latch spec
-    dir = spec.gem_dir
-    Dir.chdir dir do
-      spec.files.each do |file|
-        File.open file, 'a' do |fp|
-          fp.puts "FILE_ENTERED_LATCH.release"
-          fp.puts "FILE_EXIT_LATCH.await"
-        end
-      end
-    end
-  end
-
   # Providing -I on the commandline should always beat gems
   def test_dash_i_beats_gems
     a1 = new_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
@@ -80,6 +68,15 @@ class TestGemRequire < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_require.rb#L68
     Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
   end
 
+  def create_sync_thread
+    Thread.new do
+      yield
+    ensure
+      FILE_ENTERED_LATCH.release
+      FILE_EXIT_LATCH.await
+    end
+  end
+
   def test_concurrent_require
     skip 'deadlock' if /^1\.8\./ =~ RUBY_VERSION
 
@@ -91,11 +88,8 @@ class TestGemRequire < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_require.rb#L88
 
     install_specs a1, b1
 
-    append_latch a1
-    append_latch b1
-
-    t1 = Thread.new { assert_require 'a' }
-    t2 = Thread.new { assert_require 'b' }
+    t1 = create_sync_thread{ assert_require 'a' }
+    t2 = create_sync_thread{ assert_require 'b' }
 
     # wait until both files are waiting on the exit latch
     FILE_ENTERED_LATCH.await
@@ -106,8 +100,6 @@ class TestGemRequire < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_require.rb#L100
     assert t1.join, "thread 1 should exit"
     assert t2.join, "thread 2 should exit"
   ensure
-    return if $! # skipping
-
     Object.send :remove_const, :FILE_ENTERED_LATCH
     Object.send :remove_const, :FILE_EXIT_LATCH
   end
Index: ruby_2_5/test/rubygems/test_gem_rdoc.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem_rdoc.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem_rdoc.rb	(revision 62834)
@@ -223,6 +223,7 @@ class TestGemRDoc < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_rdoc.rb#L223
 
   def test_remove_unwritable
     skip 'chmod not supported' if Gem.win_platform?
+    skip 'skipped in root privilege' if Process.uid == 0
     FileUtils.mkdir_p @a.base_dir
     FileUtils.chmod 0, @a.base_dir
 
@@ -251,6 +252,7 @@ class TestGemRDoc < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_rdoc.rb#L252
 
   def test_setup_unwritable
     skip 'chmod not supported' if Gem.win_platform?
+    skip 'skipped in root privilege' if Process.uid == 0
     FileUtils.mkdir_p @a.doc_dir
     FileUtils.chmod 0, @a.doc_dir
 
Index: ruby_2_5/test/rubygems/test_gem_commands_cleanup_command.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem_commands_cleanup_command.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem_commands_cleanup_command.rb	(revision 62834)
@@ -158,7 +158,7 @@ class TestGemCommandsCleanupCommand < Ge https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_commands_cleanup_command.rb#L158
     assert_path_exists @a_1_1.gem_dir
   ensure
     FileUtils.chmod 0755, @gemhome
-  end unless win_platform?
+  end unless win_platform? || Process.uid == 0
 
   def test_execute_dry_run
     @cmd.options[:args] = %w[a]
Index: ruby_2_5/test/rubygems/test_gem_commands_install_command.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem_commands_install_command.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem_commands_install_command.rb	(revision 62834)
@@ -131,6 +131,7 @@ class TestGemCommandsInstallCommand < Ge https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_commands_install_command.rb#L131
 
   def test_execute_no_user_install
     skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
+    skip 'skipped in root privilege' if Process.uid == 0
 
     specs = spec_fetcher do |fetcher|
       fetcher.gem 'a', 2
Index: ruby_2_5/test/rubygems/test_gem_remote_fetcher.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem_remote_fetcher.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem_remote_fetcher.rb	(revision 62834)
@@ -431,7 +431,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg== https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_remote_fetcher.rb#L431
     assert File.exist?(a1_cache_gem)
   end
 
-  unless win_platform? # File.chmod doesn't work
+  unless win_platform? || Process.uid == 0 # File.chmod doesn't work
     def test_download_local_read_only
       FileUtils.mv @a1_gem, @tempdir
       local_path = File.join @tempdir, @a1.file_name
Index: ruby_2_5/test/rubygems/test_gem_installer.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem_installer.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem_installer.rb	(revision 62834)
@@ -437,6 +437,8 @@ gem 'other', version https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_installer.rb#L437
 
     if win_platform?
       skip('test_generate_bin_script_no_perms skipped on MS Windows')
+    elsif Process.uid == 0
+      skip('test_generate_bin_script_no_perms skipped in root privilege')
     else
       FileUtils.chmod 0000, util_inst_bindir
 
@@ -529,6 +531,8 @@ gem 'other', version https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_installer.rb#L531
 
     if win_platform?
       skip('test_generate_bin_symlink_no_perms skipped on MS Windows')
+    elsif Process.uid == 0
+      skip('test_user_install_disabled_read_only test skipped in root privilege')
     else
       FileUtils.chmod 0000, util_inst_bindir
 
Index: ruby_2_5/test/rubygems/test_gem_specification.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem_specification.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem_specification.rb	(revision 62834)
@@ -1461,6 +1461,7 @@ dependencies: [] https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_specification.rb#L1461
 
   def test_build_extensions_extensions_dir_unwritable
     skip 'chmod not supported' if Gem.win_platform?
+    skip 'skipped in root privilege' if Process.uid == 0
 
     ext_spec
 
@@ -1486,7 +1487,7 @@ dependencies: [] https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_specification.rb#L1487
     @ext.build_extensions
     refute_path_exists @ext.extension_dir
   ensure
-    unless ($DEBUG or win_platform?) then
+    unless ($DEBUG or win_platform? or Process.uid == 0) then
       FileUtils.chmod 0755, File.join(@ext.base_dir, 'extensions')
       FileUtils.chmod 0755, @ext.base_dir
     end
Index: ruby_2_5/test/rubygems/test_gem.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem.rb	(revision 62834)
@@ -463,7 +463,7 @@ class TestGem < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem.rb#L463
     assert File.directory?(util_cache_dir)
   end
 
-  unless win_platform? then # only for FS that support write protection
+  unless win_platform? || Process.uid == 0 then # only for FS that support write protection
     def test_self_ensure_gem_directories_write_protected
       gemdir = File.join @tempdir, "egd"
       FileUtils.rm_r gemdir rescue nil
Index: ruby_2_5/test/rubygems/test_gem_install_update_options.rb
===================================================================
--- ruby_2_5/test/rubygems/test_gem_install_update_options.rb	(revision 62833)
+++ ruby_2_5/test/rubygems/test_gem_install_update_options.rb	(revision 62834)
@@ -141,6 +141,8 @@ class TestGemInstallUpdateOptions < Gem: https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rubygems/test_gem_install_update_options.rb#L141
   def test_user_install_disabled_read_only
     if win_platform?
       skip('test_user_install_disabled_read_only test skipped on MS Windows')
+    elsif Process.uid == 0
+      skip('test_user_install_disabled_read_only test skipped in root privilege')
     else
       @cmd.handle_options %w[--no-user-install]
 
Index: ruby_2_5/test/pathname/test_pathname.rb
===================================================================
--- ruby_2_5/test/pathname/test_pathname.rb	(revision 62833)
+++ ruby_2_5/test/pathname/test_pathname.rb	(revision 62834)
@@ -1336,6 +1336,7 @@ class TestPathname < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/pathname/test_pathname.rb#L1336
         assert_equal([Pathname("d"), Pathname("d/x")], a)
 
         skip "no meaning test on Windows" if /mswin|mingw/ =~ RUBY_PLATFORM
+        skip 'skipped in root privilege' if Process.uid == 0
         a = [];
         assert_raise_with_message(Errno::EACCES, %r{d/x}) do
           Pathname(".").find(ignore_error: false) {|v| a << v }
Index: ruby_2_5/test/irb/test_workspace.rb
===================================================================
--- ruby_2_5/test/irb/test_workspace.rb	(revision 62833)
+++ ruby_2_5/test/irb/test_workspace.rb	(revision 62834)
@@ -34,6 +34,7 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/irb/test_workspace.rb#L34
 
     def test_code_around_binding_with_existing_unreadable_file
       skip 'chmod cannot make file unreadable on windows' if windows?
+      skip 'skipped in root privilege' if Process.uid == 0
 
       Tempfile.create do |f|
         code = "IRB::WorkSpace.new(binding)\n"
Index: ruby_2_5/test/rdoc/test_rdoc_rdoc.rb
===================================================================
--- ruby_2_5/test/rdoc/test_rdoc_rdoc.rb	(revision 62833)
+++ ruby_2_5/test/rdoc/test_rdoc_rdoc.rb	(revision 62834)
@@ -296,6 +296,7 @@ class TestRDocRDoc < RDoc::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rdoc/test_rdoc_rdoc.rb#L296
 
   def test_parse_file_forbidden
     skip 'chmod not supported' if Gem.win_platform?
+    skip 'skipped in root privilege' if Process.uid == 0
 
     @rdoc.store = RDoc::Store.new
 
Index: ruby_2_5/test/rdoc/test_rdoc_rubygems_hook.rb
===================================================================
--- ruby_2_5/test/rdoc/test_rdoc_rubygems_hook.rb	(revision 62833)
+++ ruby_2_5/test/rdoc/test_rdoc_rubygems_hook.rb	(revision 62834)
@@ -200,6 +200,7 @@ class TestRDocRubygemsHook < Gem::TestCa https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rdoc/test_rdoc_rubygems_hook.rb#L200
 
   def test_remove_unwritable
     skip 'chmod not supported' if Gem.win_platform?
+    skip 'skipped in root privilege' if Process.uid == 0
     FileUtils.mkdir_p @a.base_dir
     FileUtils.chmod 0, @a.base_dir
 
@@ -228,6 +229,7 @@ class TestRDocRubygemsHook < Gem::TestCa https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rdoc/test_rdoc_rubygems_hook.rb#L229
 
   def test_setup_unwritable
     skip 'chmod not supported' if Gem.win_platform?
+    skip 'skipped in root privilege' if Process.uid == 0
     FileUtils.mkdir_p @a.doc_dir
     FileUtils.chmod 0, @a.doc_dir
 
Index: ruby_2_5/test/rdoc/test_rdoc_options.rb
===================================================================
--- ruby_2_5/test/rdoc/test_rdoc_options.rb	(revision 62833)
+++ ruby_2_5/test/rdoc/test_rdoc_options.rb	(revision 62834)
@@ -18,6 +18,7 @@ class TestRDocOptions < RDoc::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/rdoc/test_rdoc_options.rb#L18
 
   def test_check_files
     skip "assumes UNIX permission model" if /mswin|mingw/ =~ RUBY_PLATFORM
+    skip "skipped in root privilege" if Process.uid == 0
 
     out, err = capture_io do
       temp_dir do
Index: ruby_2_5/test/test_find.rb
===================================================================
--- ruby_2_5/test/test_find.rb	(revision 62833)
+++ ruby_2_5/test/test_find.rb	(revision 62834)
@@ -104,6 +104,8 @@ class TestFind < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/test_find.rb#L104
 
   def test_unreadable_dir
     skip "no meaning test on Windows" if /mswin|mingw/ =~ RUBY_PLATFORM
+    skip if Process.uid == 0 # because root can read anything
+
     Dir.mktmpdir {|d|
       Dir.mkdir(dir = "#{d}/dir")
       File.open("#{dir}/foo", "w"){}
@@ -157,6 +159,8 @@ class TestFind < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/test_find.rb#L159
         assert_equal([d, dir, file], a)
 
         skip "no meaning test on Windows" if /mswin|mingw/ =~ RUBY_PLATFORM
+        skip "skipped because root can read anything" if Process.uid == 0
+
         a = []
         assert_raise_with_message(Errno::EACCES, /#{Regexp.quote(file)}/) do
           Find.find(d, ignore_error: false) {|f| a << f }
Index: ruby_2_5/test/dbm/test_dbm.rb
===================================================================
--- ruby_2_5/test/dbm/test_dbm.rb	(revision 62833)
+++ ruby_2_5/test/dbm/test_dbm.rb	(revision 62834)
@@ -47,6 +47,8 @@ if defined? DBM https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/dbm/test_dbm.rb#L47
     end
 
     def test_delete_rdonly
+      skip("skipped because root can read anything") if Process.uid == 0
+
       if /^CYGWIN_9/ !~ SYSTEM
         assert_raise(DBMError) {
           @dbm_rdonly.delete("foo")
Index: ruby_2_5/version.h
===================================================================
--- ruby_2_5/version.h	(revision 62833)
+++ ruby_2_5/version.h	(revision 62834)
@@ -1,10 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_5/version.h#L1
 #define RUBY_VERSION "2.5.0"
-#define RUBY_RELEASE_DATE "2018-03-15"
-#define RUBY_PATCHLEVEL 40
+#define RUBY_RELEASE_DATE "2018-03-19"
+#define RUBY_PATCHLEVEL 41
 
 #define RUBY_RELEASE_YEAR 2018
 #define RUBY_RELEASE_MONTH 3
-#define RUBY_RELEASE_DAY 15
+#define RUBY_RELEASE_DAY 19
 
 #include "ruby/version.h"
 
Index: ruby_2_5
===================================================================
--- ruby_2_5	(revision 62833)
+++ ruby_2_5	(revision 62834)

Property changes on: ruby_2_5
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,1 ##
   Merged /trunk:r61501,61758

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]