Skip to content

Commit

Permalink
Add initial tests to opentelemetry-appender-log (#1501)
Browse files Browse the repository at this point in the history
  • Loading branch information
mattbodd committed Jan 31, 2024
1 parent 0b2c703 commit d4a6b3e
Showing 1 changed file with 101 additions and 0 deletions.
101 changes: 101 additions & 0 deletions opentelemetry-appender-log/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,104 @@ const fn severity_of_level(level: Level) -> Severity {
Level::Trace => Severity::Trace,
}
}

#[cfg(all(test, feature = "testing", feature = "logs"))]
mod tests {
use super::OpenTelemetryLogBridge;

use opentelemetry_sdk::{logs::LoggerProvider, testing::logs::InMemoryLogsExporter};

use log::{Level, Log};

#[test]
fn logbridge_with_default_metadata_is_enabled() {
let exporter = InMemoryLogsExporter::default();

let logger_provider = LoggerProvider::builder()
.with_simple_exporter(exporter)
.build();

let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);

// As a result of using `with_simple_exporter` while building the logger provider,
// the processor used is a `SimpleLogProcessor` which has an implementation of `event_enabled`
// that always returns true.
#[cfg(feature = "logs_level_enabled")]
assert_eq!(
otel_log_appender.enabled(&log::Metadata::builder().build()),
true
);
#[cfg(not(feature = "logs_level_enabled"))]
assert_eq!(
otel_log_appender.enabled(&log::Metadata::builder().build()),
true
);
}

#[test]
fn logbridge_with_record_can_log() {
let exporter = InMemoryLogsExporter::default();

let logger_provider = LoggerProvider::builder()
.with_simple_exporter(exporter.clone())
.build();

let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);

log::set_boxed_logger(Box::new(otel_log_appender)).unwrap();
log::set_max_level(Level::Trace.to_level_filter());

log::trace!("TRACE");
log::debug!("DEBUG");
log::info!("INFO");
log::warn!("WARN");
log::error!("ERROR");

let logs = exporter.get_emitted_logs().unwrap();

assert_eq!(logs.len(), 5);
for log in logs {
let body: String = match log.record.body.as_ref().unwrap() {
super::AnyValue::String(s) => s.to_string(),
_ => panic!("AnyValue::String expected"),
};
assert_eq!(body, log.record.severity_text.unwrap());
}
}

#[test]
fn test_flush() {
let exporter = InMemoryLogsExporter::default();

let logger_provider = LoggerProvider::builder()
.with_simple_exporter(exporter)
.build();

let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);
otel_log_appender.flush();
}

#[test]
fn check_level_severities() {
assert_eq!(
super::severity_of_level(log::Level::Error),
opentelemetry::logs::Severity::Error
);
assert_eq!(
super::severity_of_level(log::Level::Warn),
opentelemetry::logs::Severity::Warn
);
assert_eq!(
super::severity_of_level(log::Level::Info),
opentelemetry::logs::Severity::Info
);
assert_eq!(
super::severity_of_level(log::Level::Debug),
opentelemetry::logs::Severity::Debug
);
assert_eq!(
super::severity_of_level(log::Level::Trace),
opentelemetry::logs::Severity::Trace
);
}
}

0 comments on commit d4a6b3e

Please sign in to comment.