forked from TwP/logging
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_mapped_diagnostic_context.rb
135 lines (100 loc) · 3.5 KB
/
test_mapped_diagnostic_context.rb
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