Files
khadhroony-solana-project/crates/ksp-app-config-desk/unit_tests/logging_editor.rs
2026-08-16 17:38:23 +02:00

134 lines
6.6 KiB
Rust

// file: crates/ksp-app-config-desk/unit_tests/logging_editor.rs
// version: 2
#[test]
fn committed_logging_document_maps_complete_read_only_editor_contract() {
let management = committed_management();
assert!(management.is_ok(), "committed management should construct: {management:?}");
if let std::result::Result::Ok(management) = management {
let document = super::document_from_management(&management);
assert!(document.is_ok(), "Logging editor document should load: {document:?}");
if let std::result::Result::Ok(document) = document {
assert_eq!(document.file_id, ksp_config_lib::FILE_ID_STD_LOGGING);
assert_eq!(document.format_version, 1);
assert_eq!(document.logs_directory, "${KSP_LOGS_DIRECTORY:-logs}");
assert_eq!(document.default_profile, "local_dev");
assert_eq!(document.profiles.len(), 1);
let profile = &document.profiles[0];
assert_eq!(profile.profile_id, "local_dev");
assert_eq!(profile.default_filter, "warn");
assert_eq!(profile.span_events, "new_and_close");
assert!(profile.console.enabled);
assert_eq!(profile.console.output, "stderr");
assert_eq!(profile.console.format, "compact");
assert_eq!(profile.console.filter.level, "debug");
assert_eq!(profile.console.filter.targets, std::vec!["*".to_owned()]);
assert_eq!(profile.console.filter.domains, std::vec!["*".to_owned()]);
assert_eq!(profile.files.len(), 2);
assert_eq!(profile.files[0].output_id, "file.all.debug");
assert_eq!(profile.files[0].filter.targets, std::vec!["*".to_owned()]);
assert_eq!(profile.files[0].filter.domains, std::vec!["*".to_owned()]);
assert_eq!(profile.target_filters.len(), 3);
assert_eq!(profile.target_filters[2].target_prefix, "ksp-app-config-desk");
assert_eq!(profile.target_filters[2].level, "debug");
}
}
}
#[test]
fn logging_editor_mapping_preserves_multiple_targets_and_domains() {
let filter = ksp_config_lib::LoggingOutputFilterConfig::new(
"trace",
std::vec!["ksp-config-lib".to_owned(), "ksp-app-config-desk".to_owned()],
std::vec!["config".to_owned(), "frontend".to_owned()],
);
let mapped = super::project_output_filter(&filter);
assert_eq!(mapped.level, "trace");
assert_eq!(mapped.targets, std::vec!["ksp-config-lib".to_owned(), "ksp-app-config-desk".to_owned()]);
assert_eq!(mapped.domains, std::vec!["config".to_owned(), "frontend".to_owned()]);
}
fn committed_management() -> ksp_core_lib::Result<ksp_config_lib::ConfigManagement> {
let workspace = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../..");
let bootstrap = ksp_config_lib::ConfigBootstrapOptions::from_paths(workspace.join("config"), workspace.join("config/schemas"));
let bootstrap = match bootstrap {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let registry = ksp_config_lib::ConfigFileRegistry::defaults();
let registry = match registry {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
return std::result::Result::Ok(ksp_config_lib::ConfigManagement::new(ksp_config_lib::ConfigDocumentEngine::new(bootstrap, registry)));
}
#[test]
fn editor_candidate_round_trips_through_typed_config_contract() {
let management = committed_management();
assert!(management.is_ok(), "committed management should construct: {management:?}");
if let std::result::Result::Ok(management) = management {
let document = super::document_from_management(&management);
assert!(document.is_ok(), "Logging editor document should load: {document:?}");
if let std::result::Result::Ok(document) = document {
let candidate = super::LoggingDocumentCandidateDto {
logs_directory: document.logs_directory.clone(),
default_profile: document.default_profile.clone(),
profiles: document.profiles.clone(),
};
let config = super::config_candidate(candidate);
assert_eq!(config.logs_directory(), document.logs_directory);
assert_eq!(config.default_profile(), document.default_profile);
assert_eq!(config.profiles().len(), document.profiles.len());
assert_eq!(config.profiles()[0].files()[0].ansi(), document.profiles[0].files[0].ansi);
}
}
}
#[test]
fn profile_candidate_preserves_multi_file_and_target_filter_shape() {
let profile = super::LoggingProfileDto {
profile_id: "clone_test".to_owned(),
default_filter: "info".to_owned(),
span_events: "full".to_owned(),
console: super::LoggingConsoleDto {
enabled: true,
output: "stdout".to_owned(),
ansi: false,
format: "human".to_owned(),
filter: super::LoggingOutputFilterDto { level: "info".to_owned(), targets: std::vec!["*".to_owned()], domains: std::vec!["*".to_owned()] },
},
files: std::vec![
super::LoggingFileDto {
output_id: "file.one".to_owned(),
enabled: true,
path: "one.log".to_owned(),
rotation: "daily".to_owned(),
format: "human".to_owned(),
ansi: false,
filter: super::LoggingOutputFilterDto { level: "debug".to_owned(), targets: std::vec!["*".to_owned()], domains: std::vec!["*".to_owned()] },
},
super::LoggingFileDto {
output_id: "file.two".to_owned(),
enabled: false,
path: "two.jsonl".to_owned(),
rotation: "hourly".to_owned(),
format: "json".to_owned(),
ansi: false,
filter: super::LoggingOutputFilterDto {
level: "error".to_owned(),
targets: std::vec!["ksp-config-lib".to_owned()],
domains: std::vec!["config".to_owned()],
},
},
],
target_filters: std::vec![super::LoggingTargetFilterDto { target_prefix: "ksp-app-config-desk".to_owned(), level: "trace".to_owned() }],
};
let config = super::config_profile(profile);
assert_eq!(config.profile_id(), "clone_test");
assert_eq!(config.files().len(), 2);
assert_eq!(config.files()[1].rotation(), "hourly");
assert_eq!(config.target_filters().len(), 1);
assert_eq!(config.target_filters()[0].level(), "trace");
}