File: test_mapped_diagnostic_context.rb

package info (click to toggle)
ruby-logging 2.2.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 660 kB
  • sloc: ruby: 6,139; sh: 11; makefile: 2
file content (135 lines) | stat: -rw-r--r-- 3,582 bytes parent folder | download | duplicates (2)
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