[前][次][番号順一覧][スレッド一覧]

ruby-changes:37725

From: nobu <ko1@a...>
Date: Mon, 2 Mar 2015 15:44:38 +0900 (JST)
Subject: [ruby-changes:37725] nobu:r49806 (trunk): envutil.rb: timeout_error argument to invoke_ruby

nobu	2015-03-02 15:44:34 +0900 (Mon, 02 Mar 2015)

  New Revision: 49806

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49806

  Log:
    envutil.rb: timeout_error argument to invoke_ruby
    
    * test/lib/envutil.rb (invoke_ruby): add `timeout_error` optional
      keyword argument, the exception class to be raised if the target
      process timed out.  if it is nil, no exception will be raised at
      timeout but the terminated output, error, and status will be
      returned.  defaulted to Timeout::Error.
    
    * test/lib/envutil.rb (assert_separately): check outputs and
      status (including diagnostic reports) of timed-out process.

  Modified files:
    trunk/test/lib/envutil.rb
Index: test/lib/envutil.rb
===================================================================
--- test/lib/envutil.rb	(revision 49805)
+++ test/lib/envutil.rb	(revision 49806)
@@ -34,7 +34,7 @@ module EnvUtil https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L34
   DEFAULT_SIGNALS.delete("TERM") if /mswin|mingw/ =~ RUBY_PLATFORM
 
   def invoke_ruby(args, stdin_data = "", capture_stdout = false, capture_stderr = false,
-                  encoding: nil, timeout: 10, reprieve: 1,
+                  encoding: nil, timeout: 10, reprieve: 1, timeout_error: Timeout::Error,
                   stdout_filter: nil, stderr_filter: nil,
                   signal: :TERM,
                   rubybin: EnvUtil.rubybin,
@@ -67,10 +67,7 @@ module EnvUtil https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L67
       th_stderr = Thread.new { err_p.read } if capture_stderr && capture_stderr != :merge_to_stdout
       in_p.write stdin_data.to_str unless stdin_data.empty?
       in_p.close
-      if (!th_stdout || th_stdout.join(timeout)) && (!th_stderr || th_stderr.join(timeout))
-        stdout = th_stdout.value if capture_stdout
-        stderr = th_stderr.value if capture_stderr && capture_stderr != :merge_to_stdout
-      else
+      unless (!th_stdout || th_stdout.join(timeout)) && (!th_stderr || th_stderr.join(timeout))
         signals = Array(signal).select do |sig|
           DEFAULT_SIGNALS[sig.to_s] or
             DEFAULT_SIGNALS[Signal.signame(sig)]
@@ -99,13 +96,17 @@ module EnvUtil https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L96
             end
           end
         end
-        bt = caller_locations
-        raise Timeout::Error, "execution of #{bt.shift.label} expired", bt.map(&:to_s)
+        if timeout_error
+          bt = caller_locations
+          raise timeout_error, "execution of #{bt.shift.label} expired", bt.map(&:to_s)
+        end
+        status = $?
       end
+      stdout = th_stdout.value if capture_stdout
+      stderr = th_stderr.value if capture_stderr && capture_stderr != :merge_to_stdout
       out_p.close if capture_stdout
       err_p.close if capture_stderr && capture_stderr != :merge_to_stdout
-      Process.wait pid
-      status = $?
+      status ||= Process.wait2(pid)[1]
       stdout = stdout_filter.call(stdout) if stdout_filter
       stderr = stderr_filter.call(stderr) if stderr_filter
       return stdout, stderr, status
@@ -385,7 +386,7 @@ module Test https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L386
 eom
         args = args.dup
         args.insert((Hash === args.first ? 1 : 0), "--disable=gems", *$:.map {|l| "-I#{l}"})
-        stdout, stderr, status = EnvUtil.invoke_ruby(args, src, true, true, **opt)
+        stdout, stderr, status = EnvUtil.invoke_ruby(args, src, true, true, timeout_error: nil, **opt)
         abort = status.coredump? || (status.signaled? && ABORT_SIGNALS.include?(status.termsig))
         assert(!abort, FailDesc[status, nil, stderr])
         self._assertions += stdout[/^assertions=(\d+)/, 1].to_i

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]