// file: crates/ksp-logging-lib/unit_tests/settings.rs // version: 1 #[test] fn level_variants_are_distinct() { assert_ne!(crate::LogFilterLevel::Off, crate::LogFilterLevel::Error); assert_ne!(crate::LogFilterLevel::Error, crate::LogFilterLevel::Warn); assert_ne!(crate::LogFilterLevel::Warn, crate::LogFilterLevel::Info); assert_ne!(crate::LogFilterLevel::Info, crate::LogFilterLevel::Debug); assert_ne!(crate::LogFilterLevel::Debug, crate::LogFilterLevel::Trace); } #[test] fn target_filter_preserves_prefix_and_level() { let filter = crate::TargetFilter::new("ksp-store-lib", crate::LogFilterLevel::Trace); assert_eq!(filter.target_prefix(), "ksp-store-lib"); assert_eq!(filter.level(), crate::LogFilterLevel::Trace); } #[test] fn console_settings_select_requested_stream() { assert_eq!(crate::ConsoleSettings::stdout().output(), crate::ConsoleOutput::Stdout); assert_eq!(crate::ConsoleSettings::stderr().output(), crate::ConsoleOutput::Stderr); } #[test] fn file_settings_preserve_values() { let settings = crate::FileSettings::new("logs", "ksp", crate::FileRotation::Daily); assert_eq!(settings.directory(), std::path::Path::new("logs")); assert_eq!(settings.file_name_prefix(), "ksp"); assert_eq!(settings.rotation(), crate::FileRotation::Daily); } #[test] fn logging_settings_preserve_explicit_values() { let settings = crate::LoggingSettings::new( crate::LogFilterLevel::Info, crate::SpanEvents::NewAndClose, std::option::Option::Some(crate::ConsoleSettings::stdout()), std::option::Option::Some(crate::FileSettings::new("logs", "ksp", crate::FileRotation::Hourly)), ) .with_target_filter(crate::TargetFilter::new("ksp-store-lib", crate::LogFilterLevel::Trace)); assert_eq!(settings.default_filter(), crate::LogFilterLevel::Info); assert_eq!(settings.span_events(), crate::SpanEvents::NewAndClose); assert_eq!(settings.target_filters().len(), 1); assert_eq!(settings.target_filters()[0].target_prefix(), "ksp-store-lib"); assert_eq!(settings.console(), std::option::Option::Some(&crate::ConsoleSettings::stdout())); assert_eq!(settings.file().map(crate::FileSettings::rotation), std::option::Option::Some(crate::FileRotation::Hourly)); } #[test] fn validation_rejects_empty_target_prefix() { 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("", crate::LogFilterLevel::Debug)); assert!(settings.validate().is_err()); } #[test] fn validation_rejects_external_target_prefix() { 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("sqlx", crate::LogFilterLevel::Debug)); assert!(settings.validate().is_err()); } #[test] fn validation_rejects_empty_file_prefix() { let settings = crate::LoggingSettings::new( crate::LogFilterLevel::Info, crate::SpanEvents::Off, std::option::Option::None, std::option::Option::Some(crate::FileSettings::new("logs", "", crate::FileRotation::Never)), ); assert!(settings.validate().is_err()); } #[test] fn validation_accepts_ksp_outputs_and_filters() { let settings = crate::LoggingSettings::new( crate::LogFilterLevel::Info, crate::SpanEvents::Full, std::option::Option::Some(crate::ConsoleSettings::stderr()), std::option::Option::Some(crate::FileSettings::new("logs", "worker", crate::FileRotation::Daily)), ) .with_target_filter(crate::TargetFilter::new("ksp-worker-", crate::LogFilterLevel::Debug)); assert!(settings.validate().is_ok()); } #[test] fn settings_allow_logging_to_be_disabled() { let settings = crate::LoggingSettings::new(crate::LogFilterLevel::Off, crate::SpanEvents::Off, std::option::Option::None, std::option::Option::None); assert!(settings.validate().is_ok()); }