| 1 |
require "#{File.dirname(__FILE__)}/test_setup" |
|---|
| 2 |
require 'gauge/base' |
|---|
| 3 |
require 'stringio' |
|---|
| 4 |
|
|---|
| 5 |
class BaseTest < Test::Unit::TestCase |
|---|
| 6 |
class MockBase < Gauge::Base |
|---|
| 7 |
class <<self |
|---|
| 8 |
def reset! |
|---|
| 9 |
@@config = {} |
|---|
| 10 |
@@hooks = Hash.new { |h,k| h[k] = {} } |
|---|
| 11 |
Thread.current[:gauge_logger] = nil |
|---|
| 12 |
end |
|---|
| 13 |
end |
|---|
| 14 |
end |
|---|
| 15 |
|
|---|
| 16 |
def setup |
|---|
| 17 |
MockBase.reset! |
|---|
| 18 |
@log = StringIO.new |
|---|
| 19 |
MockBase[:application] = "test" |
|---|
| 20 |
MockBase[:directory] = @log |
|---|
| 21 |
end |
|---|
| 22 |
|
|---|
| 23 |
def teardown |
|---|
| 24 |
MockBase.reset! |
|---|
| 25 |
end |
|---|
| 26 |
|
|---|
| 27 |
def test_config |
|---|
| 28 |
MockBase.config[:one] = "two" |
|---|
| 29 |
assert_equal "two", MockBase.config[:one] |
|---|
| 30 |
|
|---|
| 31 |
MockBase[:three] = "four" |
|---|
| 32 |
assert_equal "four", MockBase[:three] |
|---|
| 33 |
end |
|---|
| 34 |
|
|---|
| 35 |
def test_logger_per_thread |
|---|
| 36 |
log1 = log2 = log3 = nil |
|---|
| 37 |
t1 = Thread.new { log1 = MockBase.logger; log2 = MockBase.logger } |
|---|
| 38 |
t2 = Thread.new { log3 = MockBase.logger } |
|---|
| 39 |
t1.join |
|---|
| 40 |
t2.join |
|---|
| 41 |
assert_same log1, log2 |
|---|
| 42 |
assert_not_same log1, log3 |
|---|
| 43 |
end |
|---|
| 44 |
|
|---|
| 45 |
def test_log_hook_with_no_hooks |
|---|
| 46 |
MockBase.log(:test) |
|---|
| 47 |
assert @log.string.empty? |
|---|
| 48 |
end |
|---|
| 49 |
|
|---|
| 50 |
def test_log_hook_with_no_data |
|---|
| 51 |
MockBase.register(:test, :demo) do |name, data| |
|---|
| 52 |
assert_equal(:demo, name) |
|---|
| 53 |
"" |
|---|
| 54 |
end |
|---|
| 55 |
|
|---|
| 56 |
now = Time.now |
|---|
| 57 |
MockBase.log(:test) |
|---|
| 58 |
io = StringIO.new(@log.string) |
|---|
| 59 |
length = io.read(4).unpack("N").first |
|---|
| 60 |
assert_equal 17, length |
|---|
| 61 |
time, pid, nlen = io.read(13).unpack("GNC") |
|---|
| 62 |
assert_equal now.to_i, time.to_i |
|---|
| 63 |
assert_equal $$, pid |
|---|
| 64 |
assert_equal 4, nlen |
|---|
| 65 |
assert_equal "demo", io.read(4) |
|---|
| 66 |
assert io.eof? |
|---|
| 67 |
end |
|---|
| 68 |
|
|---|
| 69 |
def test_log_hook_with_data |
|---|
| 70 |
MockBase.register(:test, :demo) { |name, data| "\005hello\001\002" } |
|---|
| 71 |
now = Time.now |
|---|
| 72 |
MockBase.log(:test) |
|---|
| 73 |
io = StringIO.new(@log.string) |
|---|
| 74 |
length = io.read(4).unpack("N").first |
|---|
| 75 |
assert_equal 25, length |
|---|
| 76 |
time, pid, nlen = io.read(13).unpack("GNC") |
|---|
| 77 |
assert_equal now.to_i, time.to_i |
|---|
| 78 |
assert_equal $$, pid |
|---|
| 79 |
assert_equal 4, nlen |
|---|
| 80 |
assert_equal "demo", io.read(4) |
|---|
| 81 |
assert_equal "\005hello\001\002", io.read |
|---|
| 82 |
assert io.eof? |
|---|
| 83 |
end |
|---|
| 84 |
|
|---|
| 85 |
end |
|---|