diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-02-17 12:27:34 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-02-17 12:27:34 +0000 |
commit | 24421c835d85bdff2a8878cab1befc3255685b67 (patch) | |
tree | 13c3e48c84effd0dd93abddd47d946a7e6bf91d8 /bootstraptest | |
parent | 50c8982ea8e4c25e154084af1864617e7bd330ae (diff) |
* bootstraptest/runner.rb (assert_normal_exit): add :timeout option.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bootstraptest')
-rwxr-xr-x | bootstraptest/runner.rb | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/bootstraptest/runner.rb b/bootstraptest/runner.rb index b48329665a..9d98afcb89 100755 --- a/bootstraptest/runner.rb +++ b/bootstraptest/runner.rb @@ -213,16 +213,32 @@ def assert_valid_syntax(testsrc, message = '') } end -def assert_normal_exit(testsrc, message = '', ignore_signals = nil) +def assert_normal_exit(testsrc, *rest) + opt = {} + opt = rest.pop if Hash === rest.last + message, ignore_signals = rest + message ||= '' + timeout = opt[:timeout] newtest $stderr.puts "\##{@count} #{@location}" if @verbose faildesc = nil filename = make_srcfile(testsrc) old_stderr = $stderr.dup + timeout_signaled = false begin - $stderr.reopen("assert_normal_exit_stderr.log", "w") - `#{@ruby} -W0 #{filename}` - status = $? + $stderr.reopen("assert_normal_exit.log", "w") + io = IO.popen("#{@ruby} -W0 #{filename}") + pid = io.pid + th = Thread.new { + io.read + io.close + $? + } + if !th.join(timeout) + Process.kill :KILL, pid + timeout_signaled = true + end + status = th.value ensure $stderr.reopen(old_stderr) old_stderr.close @@ -235,8 +251,11 @@ def assert_normal_exit(testsrc, message = '', ignore_signals = nil) if signame sigdesc = "SIG#{signame} (#{sigdesc})" end + if timeout_signaled + sigdesc << " (timeout)" + end faildesc = pretty(testsrc, "killed by #{sigdesc}", nil) - stderr_log = File.read("assert_normal_exit_stderr.log") + stderr_log = File.read("assert_normal_exit.log") if !stderr_log.empty? faildesc << "\n" if /\n\z/ !~ faildesc stderr_log << "\n" if /\n\z/ !~ stderr_log |