summaryrefslogtreecommitdiff
path: root/test/dtrace/helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/dtrace/helper.rb')
-rw-r--r--test/dtrace/helper.rb24
1 files changed, 21 insertions, 3 deletions
diff --git a/test/dtrace/helper.rb b/test/dtrace/helper.rb
index 5a2ff796823..4beda271c83 100644
--- a/test/dtrace/helper.rb
+++ b/test/dtrace/helper.rb
@@ -10,6 +10,16 @@ elsif (sudo = ENV["SUDO"]) and !sudo.empty? and (`#{sudo} echo ok` rescue false)
else
ok = false
end
+if ok
+ case RUBY_PLATFORM
+ when /darwin/i
+ begin
+ require 'pty'
+ rescue LoadError
+ ok = false
+ end
+ end
+end
ok &= (`dtrace -V` rescue false)
module DTrace
class TestCase < Test::Unit::TestCase
@@ -19,10 +29,20 @@ module DTrace
when /solaris/i
# increase bufsize to 8m (default 4m on Solaris)
DTRACE_CMD = %w[dtrace -b 8m]
+ when /darwin/i
+ READ_PROBES = proc do |cmd|
+ PTY.spawn(*cmd) do |io, _|
+ break io.readlines
+ end
+ end
end
DTRACE_CMD ||= %w[dtrace]
+ READ_PROBES ||= proc do |cmd|
+ IO.popen(cmd, err: [:child, :out], &:readlines)
+ end
+
case rubybin = EnvUtil.rubybin
when /\/ruby-runner#{Regexp.quote(RbConfig::CONFIG["EXEEXT"])}\z/
RUBYBIN = File.dirname(rubybin)+"/miniruby#{RbConfig::CONFIG["EXEEXT"]}"
@@ -51,9 +71,7 @@ module DTrace
end
cmd.unshift(sudo)
end
- probes = IO.popen(cmd, err: [:child, :out]) do |io|
- io.readlines
- end
+ probes = READ_PROBES.(cmd)
d.close(true)
rb.close(true)
yield(d_path, rb_path, probes)