summaryrefslogtreecommitdiff
path: root/test/rubygems
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-19 08:15:16 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-19 08:15:16 +0000
commit332938df510b510589561b41249e1eb34954c259 (patch)
tree6b569182ad54e824508fe9d0c271b221328ca4d9 /test/rubygems
parentd11ce2be2ed285d6959977d5d7ee2f0f110141d1 (diff)
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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@62834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems')
-rw-r--r--test/rubygems/test_gem.rb2
-rw-r--r--test/rubygems/test_gem_commands_cleanup_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb1
-rw-r--r--test/rubygems/test_gem_install_update_options.rb2
-rw-r--r--test/rubygems/test_gem_installer.rb4
-rw-r--r--test/rubygems/test_gem_rdoc.rb2
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb2
-rw-r--r--test/rubygems/test_gem_specification.rb3
-rw-r--r--test/rubygems/test_require.rb30
9 files changed, 25 insertions, 23 deletions
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index 8a11cc2ecf..3b08e61374 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -463,7 +463,7 @@ class TestGem < Gem::TestCase
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
diff --git a/test/rubygems/test_gem_commands_cleanup_command.rb b/test/rubygems/test_gem_commands_cleanup_command.rb
index c55e195975..a222659ead 100644
--- a/test/rubygems/test_gem_commands_cleanup_command.rb
+++ b/test/rubygems/test_gem_commands_cleanup_command.rb
@@ -158,7 +158,7 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
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]
diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb
index dd86a85038..fefc5c7059 100644
--- a/test/rubygems/test_gem_commands_install_command.rb
+++ b/test/rubygems/test_gem_commands_install_command.rb
@@ -131,6 +131,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
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
diff --git a/test/rubygems/test_gem_install_update_options.rb b/test/rubygems/test_gem_install_update_options.rb
index e2d546307d..69a2b61041 100644
--- a/test/rubygems/test_gem_install_update_options.rb
+++ b/test/rubygems/test_gem_install_update_options.rb
@@ -141,6 +141,8 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
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]
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index 39095c7dee..63acc3d130 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -437,6 +437,8 @@ gem 'other', version
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
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
diff --git a/test/rubygems/test_gem_rdoc.rb b/test/rubygems/test_gem_rdoc.rb
index 76ca8c45a9..3961a8e3f9 100644
--- a/test/rubygems/test_gem_rdoc.rb
+++ b/test/rubygems/test_gem_rdoc.rb
@@ -223,6 +223,7 @@ class TestGemRDoc < Gem::TestCase
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
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
diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb
index ee5ac77717..fc51b06f1b 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -431,7 +431,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
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
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
index bb6acbc7de..77e4d7122d 100644
--- a/test/rubygems/test_gem_specification.rb
+++ b/test/rubygems/test_gem_specification.rb
@@ -1461,6 +1461,7 @@ dependencies: []
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: []
@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
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
index a846f46833..a106fc21a6 100644
--- a/test/rubygems/test_require.rb
+++ b/test/rubygems/test_require.rb
@@ -38,18 +38,6 @@ class TestGemRequire < Gem::TestCase
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
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
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
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