Skip to content

Commit 97fbbff

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

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

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

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,94 @@ 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!("{} - {}", record.level(), record.args());
88+
self.logs.lock().unwrap().push(message);
89+
}
90+
91+
fn flush(&self) {}
92+
}
93+
94+
#[test]
95+
fn test_log_forwarding_enabled() {
96+
let mock_inner_logger = Box::new(MockLogger::new(true));
97+
let mock_otel_logger = Box::new(MockLogger::new(true));
98+
99+
let inner_logs = Arc::clone(&mock_inner_logger.logs);
100+
let otel_logs = Arc::clone(&mock_otel_logger.logs);
101+
102+
let logger = OpenTelemetryLogger {
103+
inner_logger: mock_inner_logger,
104+
otel_logger: mock_otel_logger,
105+
};
106+
107+
let record = Record::builder()
108+
.level(Level::Info)
109+
.args(format_args!("Test log message"))
110+
.build();
111+
112+
logger.log(&record);
113+
114+
let inner_log_messages = inner_logs.lock().unwrap();
115+
let otel_log_messages = otel_logs.lock().unwrap();
116+
117+
assert_eq!(
118+
inner_log_messages.get(0).unwrap(),
119+
"INFO - Test log message"
120+
);
121+
assert_eq!(otel_log_messages.get(0).unwrap(), "INFO - Test log message");
122+
}
123+
124+
#[test]
125+
fn test_log_forwarding_disabled() {
126+
let mock_inner_logger = Box::new(MockLogger::new(false));
127+
let mock_otel_logger = Box::new(MockLogger::new(false));
128+
129+
let inner_logs = Arc::clone(&mock_inner_logger.logs);
130+
let otel_logs = Arc::clone(&mock_otel_logger.logs);
131+
132+
let logger = OpenTelemetryLogger {
133+
inner_logger: mock_inner_logger,
134+
otel_logger: mock_otel_logger,
135+
};
136+
137+
let record = Record::builder()
138+
.level(Level::Info)
139+
.args(format_args!("Test log message"))
140+
.build();
141+
142+
logger.log(&record);
143+
144+
let inner_log_messages = inner_logs.lock().unwrap();
145+
let otel_log_messages = otel_logs.lock().unwrap();
146+
147+
assert_eq!(inner_log_messages.len(), 0);
148+
assert_eq!(otel_log_messages.len(), 0);
149+
}
150+
}

0 commit comments

Comments
 (0)