1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
require File.expand_path('../setup', __FILE__)
module TestLogging
class TestMappedDiagnosticContext < Test::Unit::TestCase
include LoggingTestCase
def test_key_value_access
assert_nil Logging.mdc['foo']
Logging.mdc['foo'] = 'bar'
assert_equal 'bar', Logging.mdc[:foo]
assert_same Logging.mdc['foo'], Logging.mdc[:foo]
Logging.mdc.delete(:foo)
assert_nil Logging.mdc['foo']
end
def test_clear
Logging.mdc['foo'] = 'bar'
Logging.mdc['baz'] = 'buz'
assert_equal 'bar', Logging.mdc[:foo]
assert_equal 'buz', Logging.mdc[:baz]
Logging.mdc.clear
assert_nil Logging.mdc['foo']
assert_nil Logging.mdc['baz']
end
def test_context_update
Logging.mdc.update(:foo => 'bar', :baz => 'buz')
assert_equal 'bar', Logging.mdc[:foo]
assert_equal 'buz', Logging.mdc[:baz]
Logging.mdc.update('foo' => 1, 'baz' => 2)
assert_equal 1, Logging.mdc[:foo]
assert_equal 2, Logging.mdc[:baz]
assert_equal 1, Logging.mdc.stack.length
end
def test_context_pushing
assert Logging.mdc.context.empty?
assert_equal 1, Logging.mdc.stack.length
Logging.mdc.push(:foo => 'bar', :baz => 'buz')
assert_equal 'bar', Logging.mdc[:foo]
assert_equal 'buz', Logging.mdc[:baz]
assert_equal 2, Logging.mdc.stack.length
Logging.mdc.push(:foo => 1, :baz => 2, :foobar => 3)
assert_equal 1, Logging.mdc[:foo]
assert_equal 2, Logging.mdc[:baz]
assert_equal 3, Logging.mdc[:foobar]
assert_equal 3, Logging.mdc.stack.length
Logging.mdc.pop
assert_equal 'bar', Logging.mdc[:foo]
assert_equal 'buz', Logging.mdc[:baz]
assert_nil Logging.mdc[:foobar]
assert_equal 2, Logging.mdc.stack.length
Logging.mdc.pop
assert Logging.mdc.context.empty?
assert_equal 1, Logging.mdc.stack.length
Logging.mdc.pop
assert Logging.mdc.context.empty?
assert_equal 1, Logging.mdc.stack.length
end
def test_thread_uniqueness
Logging.mdc['foo'] = 'bar'
Logging.mdc['baz'] = 'buz'
t = Thread.new {
sleep
Logging.mdc.clear
assert_nil Logging.mdc['foo']
assert_nil Logging.mdc['baz']
Logging.mdc['foo'] = 42
assert_equal 42, Logging.mdc['foo']
}
Thread.pass until t.status == 'sleep'
t.run
t.join
assert_equal 'bar', Logging.mdc['foo']
assert_equal 'buz', Logging.mdc['baz']
end
def test_thread_inheritance
Logging.mdc['foo'] = 'bar'
Logging.mdc['baz'] = 'buz'
Logging.mdc.push(:foo => 1, 'foobar' => 'something else')
t = Thread.new(Logging.mdc.context) { |context|
sleep
assert_not_equal context.object_id, Logging.mdc.context.object_id
if Logging::INHERIT_CONTEXT
assert_equal 1, Logging.mdc['foo']
assert_equal 'buz', Logging.mdc['baz']
assert_equal 'something else', Logging.mdc['foobar']
assert_nil Logging.mdc['unique']
assert_equal 1, Logging.mdc.stack.length
else
assert_nil Logging.mdc['foo']
assert_nil Logging.mdc['baz']
assert_nil Logging.mdc['foobar']
assert_nil Logging.mdc['unique']
assert_equal 1, Logging.mdc.stack.length
end
}
Thread.pass until t.status == 'sleep'
Logging.mdc.pop
Logging.mdc['unique'] = 'value'
t.run
t.join
end
end # class TestMappedDiagnosticContext
end # module TestLogging
|