v0.3.7-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/unit_tests/dto_common.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
#[test]
|
||||
fn command_error_projection_excludes_arbitrary_context_and_source_values() {
|
||||
@@ -12,3 +12,23 @@ fn command_error_projection_excludes_arbitrary_context_and_source_values() {
|
||||
assert_eq!(dto.code, "failed");
|
||||
assert_eq!(dto.message, "safe message");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn transport_options_projection_contains_only_safe_transport_metadata() {
|
||||
let dto = crate::BackfillDeskOptionsDto {
|
||||
compatible_roles: vec!["default".to_owned()],
|
||||
configured_networks: vec!["devnet".to_owned()],
|
||||
transport_diagnostic: std::option::Option::None,
|
||||
transport_ready: true,
|
||||
};
|
||||
let value = serde_json::to_value(dto);
|
||||
assert!(value.is_ok());
|
||||
if let std::result::Result::Ok(value) = value {
|
||||
let serialized = value.to_string();
|
||||
assert!(serialized.contains("default"));
|
||||
assert!(serialized.contains("devnet"));
|
||||
assert!(!serialized.contains("provider"));
|
||||
assert!(!serialized.contains("url"));
|
||||
assert!(!serialized.contains("endpoint"));
|
||||
}
|
||||
}
|
||||
|
||||
101
crates/ksp-app-backfill-desk/unit_tests/transport_runtime.rs
Normal file
101
crates/ksp-app-backfill-desk/unit_tests/transport_runtime.rs
Normal file
@@ -0,0 +1,101 @@
|
||||
// file: crates/ksp-app-backfill-desk/unit_tests/transport_runtime.rs
|
||||
// version: 1
|
||||
|
||||
fn endpoint(
|
||||
name: &str,
|
||||
cluster: &str,
|
||||
role_name: &str,
|
||||
request_kinds: std::vec::Vec<ksp_onchain_transport_lib::HttpRequestKind>,
|
||||
) -> ksp_core_lib::Result<ksp_onchain_transport_lib::HttpEndpointSettings> {
|
||||
let url = ksp_onchain_transport_lib::HttpEndpointUrl::parse(format!("https://{name}.example.invalid"));
|
||||
let url = match url {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let role = ksp_onchain_transport_lib::HttpEndpointRoleSettings::new(
|
||||
ksp_onchain_transport_lib::HttpRoleName::new(role_name),
|
||||
true,
|
||||
request_kinds,
|
||||
0,
|
||||
ksp_onchain_transport_lib::HttpRoleLimits::new(
|
||||
std::option::Option::None,
|
||||
std::option::Option::None,
|
||||
std::option::Option::None,
|
||||
std::option::Option::None,
|
||||
),
|
||||
);
|
||||
return std::result::Result::Ok(ksp_onchain_transport_lib::HttpEndpointSettings::new(
|
||||
name,
|
||||
true,
|
||||
ksp_onchain_transport_lib::HttpProviderName::new("fixture"),
|
||||
ksp_onchain_transport_lib::HttpClusterName::new(cluster),
|
||||
url,
|
||||
std::time::Duration::from_secs(1),
|
||||
std::time::Duration::from_secs(2),
|
||||
std::option::Option::Some(1),
|
||||
vec![role],
|
||||
));
|
||||
}
|
||||
|
||||
fn pool(endpoints: std::vec::Vec<ksp_onchain_transport_lib::HttpEndpointSettings>) -> ksp_core_lib::Result<ksp_onchain_transport_lib::HttpTransportPool> {
|
||||
let settings = ksp_onchain_transport_lib::HttpTransportSettings::new(
|
||||
endpoints,
|
||||
ksp_onchain_transport_lib::HttpRetrySettings::new(0, std::time::Duration::from_millis(10), std::time::Duration::from_millis(10)),
|
||||
);
|
||||
return ksp_onchain_transport_lib::HttpTransportPool::new(settings);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compatible_roles_require_both_backfill_rpc_methods() {
|
||||
let signatures = ksp_onchain_transport_lib::find_http_rpc_method("getSignaturesForAddress");
|
||||
let transaction = ksp_onchain_transport_lib::find_http_rpc_method("getTransaction");
|
||||
assert!(signatures.is_some());
|
||||
assert!(transaction.is_some());
|
||||
let signatures = match signatures {
|
||||
std::option::Option::Some(value) => ksp_onchain_transport_lib::HttpRequestKind::new(value.request_kind()),
|
||||
std::option::Option::None => return,
|
||||
};
|
||||
let transaction = match transaction {
|
||||
std::option::Option::Some(value) => ksp_onchain_transport_lib::HttpRequestKind::new(value.request_kind()),
|
||||
std::option::Option::None => return,
|
||||
};
|
||||
let complete = endpoint("complete", "devnet", "complete", vec![signatures.clone(), transaction]);
|
||||
let complete = match complete {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let partial = endpoint("partial", "devnet", "partial", vec![signatures]);
|
||||
let partial = match partial {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let runtime_pool = pool(vec![complete, partial]);
|
||||
assert!(runtime_pool.is_ok());
|
||||
let runtime_pool = match runtime_pool {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let snapshot = runtime_pool.snapshot();
|
||||
let roles = super::compatible_backfill_roles(&runtime_pool, &snapshot);
|
||||
assert!(roles.is_ok());
|
||||
if let std::result::Result::Ok(roles) = roles {
|
||||
assert_eq!(roles, vec!["complete".to_owned()]);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn configured_networks_are_safe_sorted_and_deduplicated() {
|
||||
let one = endpoint("one", "testnet", "default", vec![ksp_onchain_transport_lib::HttpRequestKind::wildcard()]);
|
||||
let two = endpoint("two", "devnet", "default", vec![ksp_onchain_transport_lib::HttpRequestKind::wildcard()]);
|
||||
let three = endpoint("three", "devnet", "default", vec![ksp_onchain_transport_lib::HttpRequestKind::wildcard()]);
|
||||
let (one, two, three) = match (one, two, three) {
|
||||
(std::result::Result::Ok(one), std::result::Result::Ok(two), std::result::Result::Ok(three)) => (one, two, three),
|
||||
_ => return,
|
||||
};
|
||||
let runtime_pool = pool(vec![one, two, three]);
|
||||
assert!(runtime_pool.is_ok());
|
||||
if let std::result::Result::Ok(runtime_pool) = runtime_pool {
|
||||
let values = super::configured_networks(&runtime_pool.snapshot());
|
||||
assert_eq!(values, vec!["devnet".to_owned(), "testnet".to_owned()]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user