1+ # Copyright The OpenTelemetry Authors
2+ #
3+ # Licensed under the Apache License, Version 2.0 (the "License");
4+ # you may not use this file except in compliance with the License.
5+ # You may obtain a copy of the License at
6+ #
7+ # http://www.apache.org/licenses/LICENSE-2.0
8+ #
9+ # Unless required by applicable law or agreed to in writing, software
10+ # distributed under the License is distributed on an "AS IS" BASIS,
11+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+ # See the License for the specific language governing permissions and
13+ # limitations under the License.
14+
15+ import re
16+ import unittest
17+
18+ from opentelemetry .baggage import set_baggage
19+ from opentelemetry .context import attach , detach
20+ from opentelemetry .processor .baggage import (
21+ ALLOW_ALL_BAGGAGE_KEYS ,
22+ BaggageLogProcessor ,
23+ )
24+ from opentelemetry .sdk ._logs import LoggerProvider , LogRecordProcessor
25+ from opentelemetry .sdk ._logs .export import (
26+ InMemoryLogRecordExporter ,
27+ BatchLogRecordProcessor ,
28+ )
29+
30+ class BaggageLogProcessorTest (unittest .TestCase ):
31+ def setUp (self ):
32+ self .exporter = InMemoryLogRecordExporter ()
33+ self .logger_provider = LoggerProvider ()
34+ self .logger_provider .add_log_record_processor (
35+ BaggageLogProcessor (ALLOW_ALL_BAGGAGE_KEYS )
36+ )
37+ self .logger_provider .add_log_record_processor (
38+ BatchLogRecordProcessor (self .exporter )
39+ )
40+ self .logger = self .logger_provider .get_logger ("test-logger" )
41+
42+ def _get_attributes (self ):
43+ self .logger_provider .force_flush ()
44+ logs = self .exporter .get_finished_logs ()
45+ self .assertTrue (len (logs ) > 0 )
46+ return logs [- 1 ].log_record .attributes
47+
48+ def test_check_the_baggage (self ):
49+ self .assertIsInstance (
50+ BaggageLogProcessor (ALLOW_ALL_BAGGAGE_KEYS ), LogRecordProcessor
51+ )
52+
53+ def test_baggage_added_to_log_record (self ):
54+ token = attach (set_baggage ("queen" , "bee" ))
55+ self .logger .emit (None )
56+ attributes = self ._get_attributes ()
57+ self .assertEqual (attributes .get ("queen" ), "bee" )
58+ detach (token )
59+
60+ def test_baggage_with_prefix (self ):
61+ token = attach (set_baggage ("queen" , "bee" ))
62+ logger_provider = LoggerProvider ()
63+ logger_provider .add_log_record_processor (
64+ BaggageLogProcessor (lambda key : key .startswith ("que" ))
65+ )
66+ exporter = InMemoryLogRecordExporter ()
67+ logger_provider .add_log_record_processor (
68+ BatchLogRecordProcessor (exporter )
69+ )
70+ logger = logger_provider .get_logger ("test-logger" )
71+ logger .emit (None )
72+ logger_provider .force_flush ()
73+ logs = exporter .get_finished_logs ()
74+ attributes = logs [- 1 ].log_record .attributes
75+ self .assertEqual (attributes .get ("queen" ), "bee" )
76+ detach (token )
77+
78+ def test_baggage_with_regex (self ):
79+ token = attach (set_baggage ("queen" , "bee" ))
80+ logger_provider = LoggerProvider ()
81+ logger_provider .add_log_record_processor (
82+ BaggageLogProcessor (
83+ lambda key : re .match (r"que.*" , key ) is not None
84+ )
85+ )
86+ exporter = InMemoryLogRecordExporter ()
87+ logger_provider .add_log_record_processor (
88+ BatchLogRecordProcessor (exporter )
89+ )
90+ logger = logger_provider .get_logger ("test-logger" )
91+ logger .emit (None )
92+ logger_provider .force_flush ()
93+ logs = exporter .get_finished_logs ()
94+ attributes = logs [- 1 ].log_record .attributes
95+ self .assertEqual (attributes .get ("queen" ), "bee" )
96+ detach (token )
97+
98+ def test_no_baggage_not_added (self ):
99+ self .logger .emit (None )
100+ self .logger_provider .force_flush ()
101+ logs = self .exporter .get_finished_logs ()
102+ self .assertTrue (len (logs ) > 0 )
103+ attributes = logs [- 1 ].log_record .attributes
104+ self .assertNotIn ("queen" , attributes )
105+
106+ @staticmethod
107+ def has_prefix (baggage_key : str ) -> bool :
108+ return baggage_key .startswith ("que" )
109+
110+ @staticmethod
111+ def matches_regex (baggage_key : str ) -> bool :
112+ return re .match (r"que.*" , baggage_key ) is not None
113+
114+
115+ if __name__ == "__main__" :
116+ unittest .main ()
0 commit comments