// file: crates/ksp-logging-lib/tests/public_api.rs // version: 7 //! Integration tests for the public crate-root surface of `ksp-logging-lib`. const TEST_TARGET: &str = "ksp-logging-lib"; #[test] fn public_settings_surface_is_usable() { let console_filter = ksp_logging_lib::OutputFilter::new(ksp_logging_lib::LogFilterLevel::Debug, std::vec![TEST_TARGET.to_string()], std::vec!["logging".to_string()]); let file_filter = ksp_logging_lib::OutputFilter::new( ksp_logging_lib::LogFilterLevel::Error, std::vec![TEST_TARGET.to_string()], std::vec!["logging.runtime".to_string()], ); let settings = ksp_logging_lib::LoggingSettings::new( ksp_logging_lib::LogFilterLevel::Info, ksp_logging_lib::SpanEvents::NewAndClose, std::option::Option::Some(ksp_logging_lib::ConsoleSettings::new( true, ksp_logging_lib::ConsoleOutput::Stdout, true, ksp_logging_lib::LogFormat::Compact, console_filter, )), std::vec![ksp_logging_lib::FileSettings::new( "file.logging.error", true, "logs", "error.jsonl", ksp_logging_lib::FileRotation::Daily, ksp_logging_lib::LogFormat::Json, file_filter, )], ) .with_target_filter(ksp_logging_lib::TargetFilter::new(TEST_TARGET, ksp_logging_lib::LogFilterLevel::Trace)); assert!(settings.validate().is_ok()); assert_eq!(settings.default_filter(), ksp_logging_lib::LogFilterLevel::Info); assert_eq!(settings.console().map(ksp_logging_lib::ConsoleSettings::output), std::option::Option::Some(ksp_logging_lib::ConsoleOutput::Stdout)); assert_eq!(settings.console().map(ksp_logging_lib::ConsoleSettings::format), std::option::Option::Some(ksp_logging_lib::LogFormat::Compact)); assert_eq!(settings.files().len(), 1); assert_eq!(settings.files()[0].output_id(), "file.logging.error"); assert_eq!(settings.files()[0].format(), ksp_logging_lib::LogFormat::Json); } #[test] fn public_event_macros_are_usable() { ksp_logging_lib::error!(target: TEST_TARGET, operation = "public_api", "error event"); ksp_logging_lib::warn!(target: TEST_TARGET, operation = "public_api", "warn event"); ksp_logging_lib::info!(target: TEST_TARGET, operation = "public_api", "info event"); ksp_logging_lib::debug!(target: TEST_TARGET, operation = "public_api", "debug event"); ksp_logging_lib::trace!(target: TEST_TARGET, operation = "public_api", "trace event"); } #[test] fn public_span_surface_is_usable_for_sync_and_async() { let span = ksp_logging_lib::trace_span!(target: TEST_TARGET, "public_sync", domain = "logging"); let value = span.in_scope(|| -> u32 { return 7; }); assert_eq!(value, 7); let async_span = ksp_logging_lib::debug_span!(target: TEST_TARGET, "public_async", component = "test"); let future = ksp_logging_lib::instrument(async_span, std::future::ready(9_u32)); let mut future = std::boxed::Box::pin(future); let waker = std::task::Waker::noop(); let mut context = std::task::Context::from_waker(waker); let poll = std::future::Future::poll(future.as_mut(), &mut context); assert_eq!(poll, std::task::Poll::Ready(9_u32)); } #[test] fn all_span_levels_are_usable() { let _error = ksp_logging_lib::error_span!(target: TEST_TARGET, "error_span"); let _warn = ksp_logging_lib::warn_span!(target: TEST_TARGET, "warn_span"); let _info = ksp_logging_lib::info_span!(target: TEST_TARGET, "info_span"); let _debug = ksp_logging_lib::debug_span!(target: TEST_TARGET, "debug_span"); let _trace = ksp_logging_lib::trace_span!(target: TEST_TARGET, "trace_span"); } #[test] fn public_runtime_surface_is_addressable_without_installing_it() { let _initialize = ksp_logging_lib::initialize; let _initialize_with_identity = ksp_logging_lib::initialize_with_identity; let _reinitialize = ksp_logging_lib::reinitialize; let identity = ksp_logging_lib::LoggingRuntimeIdentity::new("ksp-test", "20260816-182519.123Z-p4242"); assert!(identity.is_ok()); let _already_initialized = ksp_logging_lib::ERROR_CODE_ALREADY_INITIALIZED; let _invalid_runtime_identity = ksp_logging_lib::ERROR_CODE_INVALID_RUNTIME_IDENTITY; let _reload_failed = ksp_logging_lib::ERROR_CODE_RELOAD_FAILED; let _file_initialization_failed = ksp_logging_lib::ERROR_CODE_FILE_OUTPUT_INITIALIZATION_FAILED; let _runtime_identity = ksp_logging_lib::LoggingGuard::runtime_identity; let _active_file_outputs = ksp_logging_lib::LoggingGuard::active_file_outputs; let _per_file_counter = ksp_logging_lib::LoggingGuard::dropped_file_lines; let dropped = ksp_logging_lib::DroppedLines::zero(); assert_eq!(dropped.console(), 0); assert_eq!(dropped.file(), 0); assert_eq!(dropped.total(), 0); }