v0.3.7-pre.004

This commit is contained in:
2026-09-02 11:00:20 +02:00
parent 03a94f4fb6
commit 46a4ad7487
17 changed files with 630 additions and 60 deletions

View File

@@ -1,7 +1,7 @@
// file: crates/ksp-app-backfill-desk/tests/config_composition.rs
// version: 1
// version: 2
//! Config composite contracts for Backfill Desk pre.003.
//! Config composite and Transport-readiness contracts for Backfill Desk through pre.004.
#![forbid(unsafe_code)]
#![deny(unreachable_pub)]
@@ -86,3 +86,73 @@ fn pre_003_named_profiles_keep_transport_and_store_network_selection_paired() {
}
}
}
#[test]
fn pre_004_default_composite_builds_http_pool_for_both_backfill_rpc_methods() {
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_BACKFILL_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);
assert!(composite.is_ok(), "committed Backfill Desk composite should resolve: {composite:?}");
let composite = match composite {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let transport = composite.component("transport");
assert!(transport.is_some(), "Backfill Desk composite should expose Transport");
let transport = match transport {
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 committed public devnet profile");
let environment = match environment {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let resolved = engine.resolve_transport_config_profile(transport.resolved(), &environment);
assert!(resolved.is_ok(), "composite-selected Transport should map: {resolved:?}");
let resolved = match resolved {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert_eq!(resolved.profile_id(), "devnet_public");
assert_eq!(resolved.selection_source(), ksp_config_lib::ConfigProfileSelectionSource::Composite);
let pool = ksp_onchain_transport_lib::HttpTransportPool::new(resolved.into_settings());
assert!(pool.is_ok(), "composite-selected Transport settings should construct an HTTP pool");
let pool = match pool {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let snapshot = pool.snapshot();
let mut clusters = snapshot
.endpoints()
.iter()
.filter_map(|endpoint| {
if endpoint.enabled() {
return std::option::Option::Some(endpoint.cluster().to_owned());
}
return std::option::Option::None;
})
.collect::<std::vec::Vec<_>>();
clusters.sort();
clusters.dedup();
assert_eq!(clusters, vec!["devnet".to_owned()]);
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
for method in ["getSignaturesForAddress", "getTransaction"] {
let descriptor = ksp_onchain_transport_lib::find_http_rpc_method(method);
assert!(descriptor.is_some(), "required Transport method {method} should exist");
if let std::option::Option::Some(descriptor) = descriptor {
let selection = pool.select_for_method(&role, descriptor);
assert!(selection.is_ok(), "role default should route {method}: {selection:?}");
}
}
}