v0.2.1-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-onchain-transport-lib/tests/dependency_boundary.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! Integration canary for the direct dependency firewall of `ksp-onchain-transport-lib`.
|
||||
|
||||
@@ -13,4 +13,5 @@ fn transport_manifest_preserves_ksp_dependency_firewall() {
|
||||
assert!(manifest.contains("ksp-core-lib"));
|
||||
assert!(manifest.contains("ksp-logging-lib"));
|
||||
assert!(manifest.contains("reqwest.workspace = true"));
|
||||
assert!(manifest.contains("tokio = { workspace = true, features = [\"sync\"] }"));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-onchain-transport-lib/tests/public_api.rs
|
||||
// version: 3
|
||||
// version: 4
|
||||
|
||||
//! Integration tests for the public `ksp-onchain-transport-lib` consumer contract.
|
||||
|
||||
@@ -101,3 +101,62 @@ fn public_pool_contract_selects_a_standard_method_without_exposing_url() {
|
||||
assert!(!rendered.contains("SECRET-CANARY"));
|
||||
assert!(!rendered.contains("provider.invalid"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn public_retry_policy_preserves_no_resend_after_ambiguous_write_dispatch() {
|
||||
let method = ksp_onchain_transport_lib::find_http_rpc_method("sendTransaction").expect("sendTransaction must be audited");
|
||||
let settings = ksp_onchain_transport_lib::HttpRetrySettings::new(2, std::time::Duration::from_millis(100), std::time::Duration::from_secs(1));
|
||||
let decision = ksp_onchain_transport_lib::evaluate_transport_retry(
|
||||
method,
|
||||
&settings,
|
||||
ksp_onchain_transport_lib::HttpRetryCause::Timeout,
|
||||
ksp_onchain_transport_lib::HttpDispatchState::DispatchedAmbiguous,
|
||||
0,
|
||||
std::option::Option::None,
|
||||
);
|
||||
assert_eq!(decision, ksp_onchain_transport_lib::HttpRetryDecision::Stop);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn public_async_admission_exposes_bounded_permit_without_endpoint_url() {
|
||||
let url = ksp_onchain_transport_lib::HttpEndpointUrl::parse("https://provider.invalid/rpc?token=ASYNC-SECRET-CANARY")
|
||||
.expect("public URL parser must accept HTTPS endpoint");
|
||||
let role = ksp_onchain_transport_lib::HttpEndpointRoleSettings::new(
|
||||
ksp_onchain_transport_lib::HttpRoleName::new("default"),
|
||||
true,
|
||||
std::vec![ksp_onchain_transport_lib::HttpRequestKind::new("get_balance")],
|
||||
10,
|
||||
ksp_onchain_transport_lib::HttpRoleLimits::new(
|
||||
std::option::Option::None,
|
||||
std::option::Option::None,
|
||||
std::num::NonZeroU32::new(1),
|
||||
std::option::Option::None,
|
||||
),
|
||||
);
|
||||
let endpoint = ksp_onchain_transport_lib::HttpEndpointSettings::new(
|
||||
"primary",
|
||||
true,
|
||||
ksp_onchain_transport_lib::HttpProviderName::new("provider"),
|
||||
ksp_onchain_transport_lib::HttpClusterName::new("devnet"),
|
||||
url,
|
||||
std::time::Duration::from_secs(2),
|
||||
std::time::Duration::from_secs(10),
|
||||
std::option::Option::Some(8),
|
||||
std::vec![role],
|
||||
);
|
||||
let settings = ksp_onchain_transport_lib::HttpTransportSettings::new(
|
||||
std::vec![endpoint],
|
||||
ksp_onchain_transport_lib::HttpRetrySettings::new(1, std::time::Duration::from_millis(10), std::time::Duration::from_millis(50)),
|
||||
);
|
||||
let pool = ksp_onchain_transport_lib::HttpTransportPool::new(settings).expect("public pool constructor must succeed");
|
||||
let method = ksp_onchain_transport_lib::find_http_rpc_method("getBalance").expect("audited method must exist");
|
||||
let permit = pool
|
||||
.acquire_for_method(&ksp_onchain_transport_lib::HttpRoleName::new("default"), method)
|
||||
.await
|
||||
.expect("public async admission must acquire capacity");
|
||||
assert_eq!(permit.selection().endpoint_name(), "primary");
|
||||
assert!(permit.remaining_timeout() > std::time::Duration::ZERO);
|
||||
let rendered = format!("{permit:?}");
|
||||
assert!(!rendered.contains("ASYNC-SECRET-CANARY"));
|
||||
assert!(!rendered.contains("provider.invalid"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user