// file: crates/ksp-logging-lib/unit_tests/runtime.rs // version: 4 #[test] fn level_mapping_covers_all_ksp_levels() { assert_eq!(super::map_filter_level(crate::LogFilterLevel::Off), tracing_subscriber::filter::LevelFilter::OFF); assert_eq!(super::map_filter_level(crate::LogFilterLevel::Error), tracing_subscriber::filter::LevelFilter::ERROR); assert_eq!(super::map_filter_level(crate::LogFilterLevel::Warn), tracing_subscriber::filter::LevelFilter::WARN); assert_eq!(super::map_filter_level(crate::LogFilterLevel::Info), tracing_subscriber::filter::LevelFilter::INFO); assert_eq!(super::map_filter_level(crate::LogFilterLevel::Debug), tracing_subscriber::filter::LevelFilter::DEBUG); assert_eq!(super::map_filter_level(crate::LogFilterLevel::Trace), tracing_subscriber::filter::LevelFilter::TRACE); } #[test] fn takeover_filter_silences_external_targets_and_applies_ksp_overrides() { let settings = crate::LoggingSettings::new( crate::LogFilterLevel::Info, crate::SpanEvents::Off, std::option::Option::Some(crate::ConsoleSettings::stdout()), std::option::Option::None, ) .with_target_filter(crate::TargetFilter::new("ksp-logging-lib", crate::LogFilterLevel::Trace)); let filter = super::build_target_filter(&settings); assert!(filter.would_enable("ksp-store-lib", &tracing::Level::INFO)); assert!(!filter.would_enable("ksp-store-lib", &tracing::Level::DEBUG)); assert!(filter.would_enable("ksp-logging-lib", &tracing::Level::TRACE)); assert!(!filter.would_enable("sqlx", &tracing::Level::ERROR)); assert!(!filter.would_enable("hyper", &tracing::Level::ERROR)); } #[test] fn span_event_mapping_supports_disabled_timing_and_full_lifecycle() { assert_eq!(super::map_span_events(crate::SpanEvents::Off), tracing_subscriber::fmt::format::FmtSpan::NONE); assert_eq!( super::map_span_events(crate::SpanEvents::NewAndClose), tracing_subscriber::fmt::format::FmtSpan::NEW | tracing_subscriber::fmt::format::FmtSpan::CLOSE, ); assert_eq!(super::map_span_events(crate::SpanEvents::Full), tracing_subscriber::fmt::format::FmtSpan::FULL); } #[test] fn file_rotation_mapping_covers_supported_cadences() { assert_eq!(super::map_file_rotation(crate::FileRotation::Never), tracing_appender::rolling::Rotation::NEVER); assert_eq!(super::map_file_rotation(crate::FileRotation::Hourly), tracing_appender::rolling::Rotation::HOURLY); assert_eq!(super::map_file_rotation(crate::FileRotation::Daily), tracing_appender::rolling::Rotation::DAILY); } #[test] fn disabled_runtime_has_no_layers_or_outputs() { let settings = crate::LoggingSettings::new(crate::LogFilterLevel::Info, crate::SpanEvents::Off, std::option::Option::None, std::option::Option::None); let result = super::prepare_runtime(&settings); assert!(result.is_ok()); let prepared = match result { std::result::Result::Ok(prepared) => prepared, std::result::Result::Err(_) => return, }; assert!(prepared.layers.is_empty()); assert!(prepared.outputs.console.is_none()); assert!(prepared.outputs.file.is_none()); } #[test] fn console_runtime_composes_takeover_filter_before_formatter_and_owns_guard() { let settings = crate::LoggingSettings::new( crate::LogFilterLevel::Info, crate::SpanEvents::Off, std::option::Option::Some(crate::ConsoleSettings::stdout()), std::option::Option::None, ); let result = super::prepare_runtime(&settings); assert!(result.is_ok()); let prepared = match result { std::result::Result::Ok(prepared) => prepared, std::result::Result::Err(_) => return, }; assert_eq!(prepared.layers.len(), 1); assert!(prepared.outputs.console.is_some()); assert!(prepared.outputs.file.is_none()); assert_eq!(prepared.outputs.dropped_lines(), crate::DroppedLines::zero()); } #[test] fn dropped_line_snapshots_add_saturating_by_sink() { let first = crate::DroppedLines { console: usize::MAX, file: 4 }; let second = crate::DroppedLines { console: 1, file: 7 }; let combined = first.saturating_add(second); assert_eq!(combined.console(), usize::MAX); assert_eq!(combined.file(), 11); assert_eq!(combined.total(), usize::MAX); }