summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--KNOWNBUGS.rb4
-rwxr-xr-xbootstraptest/runner.rb29
3 files changed, 30 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index cf99bf708a..d7efba55dd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Feb 17 21:26:53 2010 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb (assert_normal_exit): add :timeout option.
+
Wed Feb 17 17:05:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vm_insnhelper.c (vm_call_cfunc): removed unused variable.
diff --git a/KNOWNBUGS.rb b/KNOWNBUGS.rb
index a1b426a6d4..eec83331ff 100644
--- a/KNOWNBUGS.rb
+++ b/KNOWNBUGS.rb
@@ -3,7 +3,7 @@
# So all tests will cause failure.
#
-assert_finish 1, %q{
+assert_normal_exit %q{
open("tst-remove-load.rb", "w") {|f|
f << <<'End'
module Kernel
@@ -13,4 +13,4 @@ raise
End
}
load "tst-remove-load.rb"
-}, '[ruby-dev:40234] [ruby-core:27959]'
+}, '[ruby-dev:40234] [ruby-core:27959]', :timeout => 1
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