v0.2.11-pre.008

This commit is contained in:
2026-08-26 10:23:42 +02:00
parent 5aeff5ca14
commit 87d7314bf4
13 changed files with 972 additions and 63 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-offchain-transport-lib/tests/dependency_boundary.rs
// version: 8
// version: 9
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -107,3 +107,21 @@ fn pre_007_birdeye_and_registry_remain_provider_owned_generic_and_fixed_origin()
assert!(!registry.contains("Jupiter"));
assert!(!registry.contains("Kraken"));
}
#[test]
fn pre_008_refresh_service_owns_dispatch_while_registry_and_consumer_surface_stay_generic() {
let crate_root = include_str!("../src/lib.rs");
let registry = include_str!("../src/market_price_registry.rs");
let service = include_str!("../src/market_price_service.rs");
assert!(crate_root.contains("mod market_price_service;"));
assert!(crate_root.contains("pub use self::market_price_service::MarketPriceService;"));
assert!(!registry.contains("MarketPriceProviderSetup::"));
assert!(service.contains("pub async fn refresh("));
assert!(service.contains("pub async fn refresh_many("));
assert!(service.contains("pub async fn refresh_all("));
assert!(service.contains("is_refresh_eligible_at"));
assert!(!service.contains("std::thread::sleep"));
assert!(!service.contains("tokio::time::sleep"));
assert!(!service.contains("fallback_provider"));
assert!(!service.contains("consensus"));
}

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-offchain-transport-lib/tests/public_api.rs
// version: 8
// version: 9
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -183,6 +183,29 @@ fn public_pre_007_birdeye_and_provider_registry_are_available_from_crate_root()
return std::result::Result::Ok(());
}
#[tokio::test]
async fn public_pre_008_generic_refresh_service_is_available_without_provider_branching_at_callsite() -> ksp_core_lib::Result<()> {
let settings = match ksp_offchain_transport_lib::MarketPriceCoinPaprikaSettings::new(false) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let service =
match ksp_offchain_transport_lib::MarketPriceService::new(std::vec![ksp_offchain_transport_lib::MarketPriceProviderSetup::CoinPaprika(settings),]) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let registry = service.registry();
let provider_id = registry.entries()[0].descriptor().id().clone();
let outcome = match service.refresh(&provider_id).await {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
assert_eq!(outcome.provider_id(), &provider_id);
assert!(!outcome.refreshed());
assert_eq!(outcome.state().availability(), ksp_offchain_transport_lib::MarketPriceProviderAvailability::Disabled);
return std::result::Result::Ok(());
}
#[test]
fn offchain_error_codes_use_owned_domain() {
let codes = [
@@ -203,9 +226,11 @@ fn offchain_error_codes_use_owned_domain() {
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_PROVIDER_DESCRIPTOR_INVALID,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_PROVIDER_DISABLED,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_PROVIDER_ID_INVALID,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_PROVIDER_NOT_FOUND,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_PROVIDER_RESPONSE_INVALID,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_OBSERVATION_INVALID,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_PROVIDER_SETTINGS_INVALID,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_REFRESH_INVALID,
ksp_offchain_transport_lib::ERROR_CODE_MARKET_PRICE_REGISTRY_INVALID,
];
for code in codes {