diff --git a/tool/lib/envutil.rb b/tool/lib/envutil.rb index fedcf475279..5716bf72e9c 100644 --- a/tool/lib/envutil.rb +++ b/tool/lib/envutil.rb @@ -81,6 +81,11 @@ module EnvUtil self.timeout_scale = 10 end + # Read here so that runners other than tool/lib/test/unit.rb, such as + # the test-unit gem in test-bundled-gems, also scale timeouts. + scale = (ENV["RUBY_TEST_TIMEOUT_SCALE"] || ENV["RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE"]).to_f + self.timeout_scale = scale if scale > 0 + def apply_timeout_scale(t) if scale = EnvUtil.timeout_scale t * scale diff --git a/tool/lib/test/unit.rb b/tool/lib/test/unit.rb index 5ff4c66ff97..0dee35c47bc 100644 --- a/tool/lib/test/unit.rb +++ b/tool/lib/test/unit.rb @@ -1383,9 +1383,7 @@ module Test end def non_options(files, options) - if scale = options[:timeout_scale] or - (scale = ENV["RUBY_TEST_TIMEOUT_SCALE"] || ENV["RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE"] and - (scale = scale.to_f) > 0) + if scale = options[:timeout_scale] EnvUtil.timeout_scale = scale end super diff --git a/tool/test/test_envutil.rb b/tool/test/test_envutil.rb index ae508948379..52cfd25dde3 100644 --- a/tool/test/test_envutil.rb +++ b/tool/test/test_envutil.rb @@ -17,6 +17,10 @@ class TestEnvUtil < Test::Unit::TestCase EnvUtil.timeout_scale = original_scale end + def test_timeout_scale_from_env + assert_separately([{"RUBY_TEST_TIMEOUT_SCALE" => "2.5"}], "assert_equal(2.5, EnvUtil.timeout_scale)") + end + def test_invoke_ruby_captures_output_and_status stdout, stderr, status = EnvUtil.invoke_ruby( ["-e", "STDOUT.print('out'); STDERR.print('err')"],