# # Ruby-Dtrace # (c) 2007 Chris Andrews # require 'dtrace' require 'test/unit' # Tests using the DTrace profile provider. class TestDtraceProfile < Test::Unit::TestCase def test_dprogram_run t = Dtrace.new t.setopt("bufsize", "4m") t.setopt("aggsize", "4m") progtext = 'profile:::profile-1 { trace("foo"); }' prog = t.compile progtext prog.execute t.go sleep 2 c = Dtrace::Consumer.new(t) assert c i = 0 c.consume do |d| assert d assert_equal "profile:::profile-1", d.probe.to_s assert_not_nil d.cpu d.data.each do |r| assert_equal r.value, "foo" end i = i + 1 if i > 10 c.finish end end assert i > 0 end def test_dprogram_aggregate t = Dtrace.new t.setopt("bufsize", "4m") t.setopt("aggsize", "4m") progtext = <= 10 c.finish end end assert i > 0 end def test_dprogram_printf t = Dtrace.new t.setopt("bufsize", "4m") t.setopt("aggsize", "4m") progtext = <= 10 c.finish end end assert i > 0 end def test_dprogram_aggregate_once t = Dtrace.new t.setopt("bufsize", "4m") t.setopt("aggsize", "4m") progtext = < 0 end def test_stack t = Dtrace.new t.setopt("bufsize", "8m") t.setopt("aggsize", "4m") t.setopt("stackframes", "5") t.setopt("strsize", "131072") progtext = "profile-1 { trace(execname); stack(); }" prog = t.compile progtext prog.execute t.go sleep 2 c = Dtrace::Consumer.new(t) i = 0 c.consume do |d| assert d assert_not_nil d.cpu assert_equal "profile:::profile-1", d.probe.to_s assert_equal 2, d.data.length assert_equal Dtrace::Record, d.data[0].class assert_equal Dtrace::StackRecord, d.data[1].class i = i + 1 if i > 10 c.finish end end assert i > 0 end def test_ustack t = Dtrace.new t.setopt("bufsize", "8m") t.setopt("aggsize", "4m") t.setopt("stackframes", "5") t.setopt("strsize", "131072") progtext = "profile-1 { trace(execname); ustack(); }" prog = t.compile progtext prog.execute t.go sleep 2 c = Dtrace::Consumer.new(t) i = 0 c.consume do |d| assert d assert_not_nil d.cpu assert_equal "profile:::profile-1", d.probe.to_s assert_equal 2, d.data.length assert_equal Dtrace::Record, d.data[0].class assert_equal Dtrace::StackRecord, d.data[1].class i = i + 1 if i > 10 c.finish end end assert i > 0 end end