From 29092d35d33d3a879634e173604edc9d201aa87a Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 5 Aug 2019 10:47:36 +0900 Subject: Moved FailDesc to EnvUtil.failure_description So EnvUtil does not depends on test/unit. --- tool/lib/envutil.rb | 34 +++++++++++++++++++++++++++++++++- tool/lib/test/unit/core_assertions.rb | 32 ++------------------------------ 2 files changed, 35 insertions(+), 31 deletions(-) (limited to 'tool') diff --git a/tool/lib/envutil.rb b/tool/lib/envutil.rb index b4eb63da90..bc08ad3c3b 100644 --- a/tool/lib/envutil.rb +++ b/tool/lib/envutil.rb @@ -150,6 +150,7 @@ module EnvUtil timeout_error = nil else status = terminate(pid, signal, opt[:pgroup], reprieve) + terminated = Time.now end stdout = th_stdout.value if capture_stdout stderr = th_stderr.value if capture_stderr && capture_stderr != :merge_to_stdout @@ -161,7 +162,7 @@ module EnvUtil if timeout_error bt = caller_locations msg = "execution of #{bt.shift.label} expired timeout (#{timeout} sec)" - msg = Test::Unit::Assertions::FailDesc[status, msg, [stdout, stderr].join("\n")].() + msg = failure_description(status, terminated, msg, [stdout, stderr].join("\n")) raise timeout_error, msg, bt.map(&:to_s) end return stdout, stderr, status @@ -286,6 +287,37 @@ module EnvUtil end end + def self.failure_description(status, now, message = "", out = "") + pid = status.pid + if signo = status.termsig + signame = Signal.signame(signo) + sigdesc = "signal #{signo}" + end + log = diagnostic_reports(signame, pid, now) + if signame + sigdesc = "SIG#{signame} (#{sigdesc})" + end + if status.coredump? + sigdesc = "#{sigdesc} (core dumped)" + end + full_message = ''.dup + message = message.call if Proc === message + if message and !message.empty? + full_message << message << "\n" + end + full_message << "pid #{pid}" + full_message << " exit #{status.exitstatus}" if status.exited? + full_message << " killed by #{sigdesc}" if sigdesc + if out and !out.empty? + full_message << "\n" << out.b.gsub(/^/, '| ') + full_message.sub!(/(?