From 693cba1a136aafb0faa25f93434a2e8dbad320de Mon Sep 17 00:00:00 2001 From: Kazuhiro NISHIYAMA Date: Fri, 6 Dec 2019 00:11:11 +0900 Subject: [PATCH] Detect started threads when require only --- test/ruby/test_require_lib.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 test/ruby/test_require_lib.rb diff --git a/test/ruby/test_require_lib.rb b/test/ruby/test_require_lib.rb new file mode 100644 index 00000000000000..4af57173b833c5 --- /dev/null +++ b/test/ruby/test_require_lib.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: false +require 'test/unit' + +class TestRequireLib < Test::Unit::TestCase + TEST_RATIO = ENV["TEST_REQUIRE_THREAD_RATIO"]&.tap {|s|break s.to_f} || 0.05 # testing all files needs too long time... + + Dir.glob(File.expand_path('../../lib/**/*.rb', __dir__)).each do |lib| + # skip some problems + next if %r!/lib/(?:bundler|rubygems)\b! =~ lib + next if %r!/lib/(?:debug|mkmf)\.rb\z! =~ lib + # skip because "in `': undefined method `add_maker' for RSS::Maker:Module (NoMethodError)" + next if %r!/lib/rss\b! =~ lib + # skip many files that almost use no threads + next if TEST_RATIO < rand(0.0..1.0) + define_method "test_thread_size:#{lib}" do + assert_separately(['--disable-gems', '-W0'], "#{<<~"begin;"}\n#{<<~"end;"}") + begin; + n = Thread.list.size + begin + require #{lib.dump} + rescue Exception + skip $! + end + assert_equal n, Thread.list.size + end; + end + end +end