Skip to content

Commit b0d6e5b

Browse files
committed
add unit tests for OpenTelemetryLogger
1 parent fe8ff10 commit b0d6e5b

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

rust/cubestore/cubestore/src/telemetry/otel_tracing.rs

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)