Files
khadhroony-solana-project/crates/ksp-logging-lib/tests/public_api.rs
2026-08-15 20:22:02 +02:00

94 lines
4.3 KiB
Rust

// file: crates/ksp-logging-lib/tests/public_api.rs
// version: 6
//! 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 _reinitialize = ksp_logging_lib::reinitialize;
let _already_initialized = ksp_logging_lib::ERROR_CODE_ALREADY_INITIALIZED;
let _reload_failed = ksp_logging_lib::ERROR_CODE_RELOAD_FAILED;
let _file_initialization_failed = ksp_logging_lib::ERROR_CODE_FILE_OUTPUT_INITIALIZATION_FAILED;
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);
}