// file: crates/ksp-app-solprices-desk/tests/config_composition.rs // version: 2 //! Config composition contracts for SOL Prices Desk `0.2.12-pre.003`. fn workspace_engine() -> ksp_core_lib::Result { 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(); return match registry { std::result::Result::Ok(value) => std::result::Result::Ok(ksp_config_lib::ConfigDocumentEngine::new(bootstrap, value)), std::result::Result::Err(error) => std::result::Result::Err(error), }; } fn assert_component(composite: &ksp_config_lib::ResolvedConfigComposite, component_id: &str, file_id: &str, profile_id: &str) { let component = composite.component(component_id); assert!(component.is_some(), "missing component {component_id}"); if let std::option::Option::Some(component) = component { assert_eq!(component.resolved().file_id().as_str(), file_id); assert_eq!(component.resolved().profile_id(), profile_id); assert_eq!(component.resolved().selection_source(), ksp_config_lib::ConfigProfileSelectionSource::Composite); } } #[test] fn solprices_desk_composite_profiles_select_logging_and_offchain_transport_by_file_id() { let engine = workspace_engine(); assert!(engine.is_ok(), "workspace Config engine should be constructible: {engine:?}"); let engine = match engine { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let file_id = ksp_config_lib::ConfigFileId::new(ksp_config_lib::FILE_ID_COMPOSITE_KSP_APP_SOLPRICES_DESK); assert!(file_id.is_ok(), "SOL Prices Desk composite file_id should be valid: {file_id:?}"); let file_id = match file_id { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; for (selection, expected_composite_profile, expected_offchain_profile) in [ (std::option::Option::None, "public_keyless", "public_keyless"), (std::option::Option::Some("all_free"), "all_free", "all_free"), (std::option::Option::Some("tests"), "tests", "public_keyless"), ] { let composite = engine.load_resolved_composite(&file_id, selection); assert!(composite.is_ok(), "committed SOL Prices Desk composite profile should resolve: {composite:?}"); if let std::result::Result::Ok(composite) = composite { assert_eq!(composite.profile_id(), expected_composite_profile); assert_component(&composite, "logging", ksp_config_lib::FILE_ID_STD_LOGGING, "console_info"); assert_component(&composite, "offchain_transport", ksp_config_lib::FILE_ID_STD_OFFCHAIN_TRANSPORT, expected_offchain_profile); } } } #[test] fn solprices_desk_default_composite_builds_provider_neutral_offchain_service() { let engine = workspace_engine(); let engine = match engine { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let file_id = ksp_config_lib::ConfigFileId::new(ksp_config_lib::FILE_ID_COMPOSITE_KSP_APP_SOLPRICES_DESK); let file_id = match file_id { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let composite = engine.load_resolved_composite(&file_id, std::option::Option::None); let composite = match composite { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let component = composite.component("offchain_transport"); let component = match component { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let environment = ksp_config_lib::ConfigEnvironment::load(); assert!(environment.is_ok(), "Config environment should load for the public_keyless profile"); let environment = match environment { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let resolved = engine.resolve_offchain_transport_config_profile(component.resolved(), &environment); assert!(resolved.is_ok(), "public_keyless composite-selected Off-chain Transport should map: {resolved:?}"); if let std::result::Result::Ok(resolved) = resolved { assert_eq!(resolved.profile_id(), "public_keyless"); assert_eq!(resolved.selection_source(), ksp_config_lib::ConfigProfileSelectionSource::Composite); assert_eq!(resolved.service().registry().len(), 8); } }