Generalize timeout_scale

* test/lib/test/unit.rb (Test::Unit::TimeoutOption): renamed
  SubprocessOption.

* test/lib/test/unit.rb (Test::Unit::TimeoutOption#setup_options):
  prefer `--timeout-scale` option.

* test/lib/test/unit.rb (Test::Unit::TimeoutOption#non_options):
  prefer `ENV["RUBY_TEST_TIMEOUT_SCALE"]`.
This commit is contained in:
Nobuyoshi Nakada 2019-06-11 11:03:55 +09:00
parent 39ae88ad0d
commit eb016d8353
No known key found for this signature in database
GPG Key ID: 4BC7D6DF58D8DF60
4 changed files with 17 additions and 16 deletions

View File

@ -71,9 +71,9 @@ for:
- set /a JOBS=%NUMBER_OF_PROCESSORS% - set /a JOBS=%NUMBER_OF_PROCESSORS%
- nmake -l "TESTOPTS=-v -q" btest - nmake -l "TESTOPTS=-v -q" btest
- nmake -l "TESTOPTS=-v -q" test-basic - nmake -l "TESTOPTS=-v -q" test-basic
- nmake -l "TESTOPTS=-q --subprocess-timeout-scale=3.0 --excludes=../test/excludes/_appveyor -j%JOBS% --exclude readline --exclude win32ole --exclude test_bignum --exclude test_syntax --exclude test_open-uri --exclude test_bundled_ca --exclude test_gc_compact" test-all - nmake -l "TESTOPTS=-q --timeout-scale=3.0 --excludes=../test/excludes/_appveyor -j%JOBS% --exclude readline --exclude win32ole --exclude test_bignum --exclude test_syntax --exclude test_open-uri --exclude test_bundled_ca --exclude test_gc_compact" test-all
# separately execute tests without -j which may crash worker with -j. # separately execute tests without -j which may crash worker with -j.
- nmake -l "TESTOPTS=-v --subprocess-timeout-scale=3.0 --excludes=../test/excludes/_appveyor" test-all TESTS="../test/win32ole ../test/ruby/test_bignum.rb ../test/ruby/test_syntax.rb ../test/open-uri/test_open-uri.rb ../test/rubygems/test_bundled_ca.rb ../test/ruby/test_gc_compact.rb" - nmake -l "TESTOPTS=-v --timeout-scale=3.0 --excludes=../test/excludes/_appveyor" test-all TESTS="../test/win32ole ../test/ruby/test_bignum.rb ../test/ruby/test_syntax.rb ../test/open-uri/test_open-uri.rb ../test/rubygems/test_bundled_ca.rb ../test/ruby/test_gc_compact.rb"
- nmake -l test-spec MSPECOPT=-fs # not using `-j` because sometimes `mspec -j` silently dies on Windows - nmake -l test-spec MSPECOPT=-fs # not using `-j` because sometimes `mspec -j` silently dies on Windows
- -
matrix: matrix:
@ -118,9 +118,9 @@ for:
- if not "%GEMS_FOR_TEST%" == "" ..\install\bin\gem install --no-document %GEMS_FOR_TEST% - if not "%GEMS_FOR_TEST%" == "" ..\install\bin\gem install --no-document %GEMS_FOR_TEST%
test_script: test_script:
- mingw32-make test - mingw32-make test
- mingw32-make test-all TESTOPTS="--retry --job-status=normal --show-skip --subprocess-timeout-scale=1.5 --excludes=../ruby/test/excludes/_appveyor -j %JOBS% --exclude win32ole --exclude test_open-uri --exclude test_gc_compact" - mingw32-make test-all TESTOPTS="--retry --job-status=normal --show-skip --timeout-scale=1.5 --excludes=../ruby/test/excludes/_appveyor -j %JOBS% --exclude win32ole --exclude test_open-uri --exclude test_gc_compact"
# separately execute tests without -j which may crash worker with -j. # separately execute tests without -j which may crash worker with -j.
- mingw32-make test-all TESTOPTS="--retry --job-status=normal --show-skip --subprocess-timeout-scale=1.5 --excludes=../ruby/test/excludes/_appveyor" TESTS="../ruby/test/win32ole ../ruby/test/open-uri/test_open-uri.rb ../ruby/test/ruby/test_gc_compact.rb" - mingw32-make test-all TESTOPTS="--retry --job-status=normal --show-skip --timeout-scale=1.5 --excludes=../ruby/test/excludes/_appveyor" TESTS="../ruby/test/win32ole ../ruby/test/open-uri/test_open-uri.rb ../ruby/test/ruby/test_gc_compact.rb"
- mingw32-make test-spec MSPECOPT=-fs # not using `-j` because sometimes `mspec -j` silently dies on Windows - mingw32-make test-spec MSPECOPT=-fs # not using `-j` because sometimes `mspec -j` silently dies on Windows
notifications: notifications:
# Using "Webhook" with templated body to skip notification on Pull Request # Using "Webhook" with templated body to skip notification on Pull Request

View File

@ -45,7 +45,7 @@ module EnvUtil
RUBYLIB = ENV["RUBYLIB"] RUBYLIB = ENV["RUBYLIB"]
class << self class << self
attr_accessor :subprocess_timeout_scale attr_accessor :timeout_scale
attr_reader :original_internal_encoding, :original_external_encoding, attr_reader :original_internal_encoding, :original_external_encoding,
:original_verbose :original_verbose
@ -57,7 +57,7 @@ module EnvUtil
end end
def apply_timeout_scale(t) def apply_timeout_scale(t)
if scale = EnvUtil.subprocess_timeout_scale if scale = EnvUtil.timeout_scale
t * scale t * scale
else else
t t

View File

@ -195,10 +195,10 @@ module Test
class Worker class Worker
def self.launch(ruby,args=[]) def self.launch(ruby,args=[])
scale = EnvUtil.subprocess_timeout_scale scale = EnvUtil.timeout_scale
io = IO.popen([*ruby, "-W1", io = IO.popen([*ruby, "-W1",
"#{File.dirname(__FILE__)}/unit/parallel.rb", "#{File.dirname(__FILE__)}/unit/parallel.rb",
*("--subprocess-timeout-scale=#{scale}" if scale), *("--timeout-scale=#{scale}" if scale),
*args], "rb+") *args], "rb+")
new(io, io.pid, :waiting) new(io, io.pid, :waiting)
end end
@ -1031,11 +1031,11 @@ module Test
end end
end end
module SubprocessOption module TimeoutOption
def setup_options(parser, options) def setup_options(parser, options)
super super
parser.separator "subprocess options:" parser.separator "timeout options:"
parser.on '--subprocess-timeout-scale NUM', "Scale subprocess timeout", Float do |scale| parser.on '--timeout-scale NUM', '--subprocess-timeout-scale NUM', "Scale timeout", Float do |scale|
raise OptionParser::InvalidArgument, "timeout scale must be positive" unless scale > 0 raise OptionParser::InvalidArgument, "timeout scale must be positive" unless scale > 0
options[:timeout_scale] = scale options[:timeout_scale] = scale
end end
@ -1043,8 +1043,9 @@ module Test
def non_options(files, options) def non_options(files, options)
if scale = options[:timeout_scale] or if scale = options[:timeout_scale] or
(scale = ENV["RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE"] and (scale = scale.to_f) > 0) (scale = ENV["RUBY_TEST_TIMEOUT_SCALE"] || ENV["RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE"] and
EnvUtil.subprocess_timeout_scale = scale (scale = scale.to_f) > 0)
EnvUtil.timeout_scale = scale
end end
super super
end end
@ -1061,7 +1062,7 @@ module Test
include Test::Unit::LoadPathOption include Test::Unit::LoadPathOption
include Test::Unit::GCStressOption include Test::Unit::GCStressOption
include Test::Unit::ExcludesOption include Test::Unit::ExcludesOption
include Test::Unit::SubprocessOption include Test::Unit::TimeoutOption
include Test::Unit::RunCount include Test::Unit::RunCount
class << self; undef autorun; end class << self; undef autorun; end

View File

@ -61,7 +61,7 @@ mjit-test1:
code: /usr/bin/sudo -H -u test -- make test-spec RUN_OPTS="--disable-gems --jit --jit-warnings" code: /usr/bin/sudo -H -u test -- make test-spec RUN_OPTS="--disable-gems --jit --jit-warnings"
- script: - script:
name: make test-all (JIT) name: make test-all (JIT)
code: /usr/local/bin/mjit-debug-on-fail /usr/bin/sudo -H -u test -- make test-all RUN_OPTS="--disable-gems --jit-verbose=1 --jit-save-temps --jit-warnings" TESTOPTS="-v --color=never --job-status=normal --longest 10 --subprocess-timeout-scale=3.0 --excludes=test/excludes/_wercker/jit" code: /usr/local/bin/mjit-debug-on-fail /usr/bin/sudo -H -u test -- make test-all RUN_OPTS="--disable-gems --jit-verbose=1 --jit-save-temps --jit-warnings" TESTOPTS="-v --color=never --job-status=normal --longest 10 --timeout-scale=3.0 --excludes=test/excludes/_wercker/jit"
# --jit-wait (test, test-spec) # --jit-wait (test, test-spec)
- script: - script:
@ -100,7 +100,7 @@ mjit-test2:
# --jit-wait (test-all) # --jit-wait (test-all)
- script: - script:
name: make test-all (JIT wait) name: make test-all (JIT wait)
code: /usr/bin/sudo -H -u test -- make test-all RUN_OPTS="--disable-gems --jit-wait --jit-warnings" TESTOPTS="-v --test-order=random --color=never --job-status=normal --subprocess-timeout-scale=3.0 --excludes=test/excludes/_wercker/jit-wait" code: /usr/bin/sudo -H -u test -- make test-all RUN_OPTS="--disable-gems --jit-wait --jit-warnings" TESTOPTS="-v --test-order=random --color=never --job-status=normal --timeout-scale=3.0 --excludes=test/excludes/_wercker/jit-wait"
after-steps: after-steps:
- wantedly/pretty-slack-notify: - wantedly/pretty-slack-notify: