v0.3.7-pre.005

This commit is contained in:
2026-09-02 12:01:35 +02:00
parent 46a4ad7487
commit 500b87ef57
19 changed files with 686 additions and 29 deletions

View File

@@ -1,7 +1,7 @@
// file: crates/ksp-app-backfill-desk/tests/config_composition.rs
// version: 2
// version: 3
//! Config composite and Transport-readiness contracts for Backfill Desk through pre.004.
//! Config composite, Transport readiness and Store-network composition contracts for Backfill Desk through pre.005.
#![forbid(unsafe_code)]
#![deny(unreachable_pub)]
@@ -156,3 +156,65 @@ fn pre_004_default_composite_builds_http_pool_for_both_backfill_rpc_methods() {
}
}
}
#[test]
fn pre_005_all_composite_profiles_keep_resolved_transport_and_store_networks_identical() {
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 environment = ksp_config_lib::ConfigEnvironment::load();
assert!(environment.is_ok(), "Config environment should load for committed Backfill Desk profiles");
let environment = match environment {
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,
};
for profile_id in ["devnet", "mainnet", "testnet"] {
let composite = engine.load_resolved_composite(&file_id, std::option::Option::Some(profile_id));
assert!(composite.is_ok(), "Backfill Desk composite profile {profile_id} should resolve: {composite:?}");
let composite = match composite {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => continue,
};
let transport = composite.component("transport");
let store = composite.component("store");
assert!(transport.is_some(), "profile {profile_id} should expose Transport");
assert!(store.is_some(), "profile {profile_id} should expose Store");
let (transport, store) = match (transport, store) {
(std::option::Option::Some(transport), std::option::Option::Some(store)) => (transport, store),
_ => continue,
};
let transport = engine.resolve_transport_config_profile(transport.resolved(), &environment);
let store = engine.resolve_store_config_profile(store.resolved(), &environment);
assert!(transport.is_ok(), "profile {profile_id} Transport should map: {transport:?}");
assert!(store.is_ok(), "profile {profile_id} Store should map: {store:?}");
let (transport, store) = match (transport, store) {
(std::result::Result::Ok(transport), std::result::Result::Ok(store)) => (transport, store),
_ => continue,
};
let mut networks = transport
.settings()
.endpoints()
.iter()
.filter_map(|endpoint| {
if endpoint.enabled() {
return std::option::Option::Some(endpoint.cluster().as_str().to_owned());
}
return std::option::Option::None;
})
.collect::<std::vec::Vec<_>>();
networks.sort();
networks.dedup();
assert_eq!(networks.len(), 1, "profile {profile_id} must resolve exactly one enabled HTTP network");
if let std::option::Option::Some(transport_network) = networks.first() {
assert_eq!(transport_network.as_str(), store.settings().network().as_str(), "profile {profile_id} Store/Transport network mismatch");
}
}
}