@@ -57,3 +57,101 @@ impl Log for OpenTelemetryLogger {
5757 self . otel_logger . flush ( ) ;
5858 }
5959}
60+
61+ #[ cfg( test) ]
62+ mod tests {
63+ use super :: * ;
64+ use log:: { Level , Metadata , Record } ;
65+ use std:: sync:: { Arc , Mutex } ;
66+
67+ struct MockLogger {
68+ logs : Arc < Mutex < Vec < String > > > ,
69+ enabled : bool ,
70+ }
71+
72+ impl MockLogger {
73+ fn new ( enabled : bool ) -> Self {
74+ MockLogger {
75+ logs : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) ,
76+ enabled,
77+ }
78+ }
79+ }
80+
81+ impl Log for MockLogger {
82+ fn enabled < ' a > ( & self , _metadata : & Metadata < ' a > ) -> bool {
83+ self . enabled
84+ }
85+
86+ fn log < ' a > ( & self , record : & Record < ' a > ) {
87+ let message = format ! (
88+ "{} - {}" ,
89+ record. level( ) ,
90+ record. args( )
91+ ) ;
92+ self . logs . lock ( ) . unwrap ( ) . push ( message) ;
93+ }
94+
95+ fn flush ( & self ) { }
96+ }
97+
98+ #[ test]
99+ fn test_log_forwarding_enabled ( ) {
100+ let mock_inner_logger = Box :: new ( MockLogger :: new ( true ) ) ;
101+ let mock_otel_logger = Box :: new ( MockLogger :: new ( true ) ) ;
102+
103+ let inner_logs = Arc :: clone ( & mock_inner_logger. logs ) ;
104+ let otel_logs = Arc :: clone ( & mock_otel_logger. logs ) ;
105+
106+ let logger = OpenTelemetryLogger {
107+ inner_logger : mock_inner_logger,
108+ otel_logger : mock_otel_logger,
109+ } ;
110+
111+ let record = Record :: builder ( )
112+ . level ( Level :: Info )
113+ . args ( format_args ! ( "Test log message" ) )
114+ . build ( ) ;
115+
116+ logger. log ( & record) ;
117+
118+ let inner_log_messages = inner_logs. lock ( ) . unwrap ( ) ;
119+ let otel_log_messages = otel_logs. lock ( ) . unwrap ( ) ;
120+
121+ assert_eq ! (
122+ inner_log_messages. get( 0 ) . unwrap( ) ,
123+ "INFO - Test log message"
124+ ) ;
125+ assert_eq ! (
126+ otel_log_messages. get( 0 ) . unwrap( ) ,
127+ "INFO - Test log message"
128+ ) ;
129+ }
130+
131+ #[ test]
132+ fn test_log_forwarding_disabled ( ) {
133+ let mock_inner_logger = Box :: new ( MockLogger :: new ( false ) ) ;
134+ let mock_otel_logger = Box :: new ( MockLogger :: new ( false ) ) ;
135+
136+ let inner_logs = Arc :: clone ( & mock_inner_logger. logs ) ;
137+ let otel_logs = Arc :: clone ( & mock_otel_logger. logs ) ;
138+
139+ let logger = OpenTelemetryLogger {
140+ inner_logger : mock_inner_logger,
141+ otel_logger : mock_otel_logger,
142+ } ;
143+
144+ let record = Record :: builder ( )
145+ . level ( Level :: Info )
146+ . args ( format_args ! ( "Test log message" ) )
147+ . build ( ) ;
148+
149+ logger. log ( & record) ;
150+
151+ let inner_log_messages = inner_logs. lock ( ) . unwrap ( ) ;
152+ let otel_log_messages = otel_logs. lock ( ) . unwrap ( ) ;
153+
154+ assert_eq ! ( inner_log_messages. len( ) , 0 ) ;
155+ assert_eq ! ( otel_log_messages. len( ) , 0 ) ;
156+ }
157+ }
0 commit comments