Files
khadhroony-solana-project/crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
2026-08-18 09:48:11 +02:00

85 lines
3.9 KiB
Rust

// file: crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
// version: 1
//! Opt-in live Devnet smoke for the pure Transport Accounts/Tokens/Cluster path.
fn devnet_pool() -> ksp_onchain_transport_lib::HttpTransportPool {
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
let role_settings = ksp_onchain_transport_lib::HttpEndpointRoleSettings::new(
role,
true,
std::vec![ksp_onchain_transport_lib::HttpRequestKind::wildcard()],
0,
ksp_onchain_transport_lib::HttpRoleLimits::new(
std::option::Option::None,
std::option::Option::None,
std::option::Option::None,
std::option::Option::None,
),
);
let endpoint_url =
ksp_onchain_transport_lib::HttpEndpointUrl::parse("https://api.devnet.solana.com").expect("official Solana Devnet endpoint URL must remain valid");
let endpoint = ksp_onchain_transport_lib::HttpEndpointSettings::new(
"solana_devnet_public",
true,
ksp_onchain_transport_lib::HttpProviderName::new("solana-public"),
ksp_onchain_transport_lib::HttpClusterName::new("devnet"),
endpoint_url,
std::time::Duration::from_secs(5),
std::time::Duration::from_secs(20),
std::option::Option::Some(4),
std::vec![role_settings],
);
let settings = ksp_onchain_transport_lib::HttpTransportSettings::new(
std::vec![endpoint],
ksp_onchain_transport_lib::HttpRetrySettings::new(1, std::time::Duration::from_millis(250), std::time::Duration::from_secs(2)),
);
return ksp_onchain_transport_lib::HttpTransportPool::new(settings).expect("programmatic Devnet Transport settings must construct a pool");
}
#[tokio::test(flavor = "current_thread")]
#[ignore = "opt-in live Solana Devnet smoke; performs external network requests"]
async fn programmatic_devnet_transport_reaches_accounts_tokens_and_cluster_wrappers() {
let pool = devnet_pool();
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
let account_config = ksp_onchain_transport_lib::SolanaAccountInfoConfig::new(
std::option::Option::Some(ksp_onchain_transport_lib::SolanaAccountEncoding::Base64),
std::option::Option::None,
std::option::Option::Some(ksp_onchain_transport_lib::SolanaCommitment::Finalized),
std::option::Option::None,
);
let account = pool
.get_account_info(&role, &ksp_core_lib::PRGIDPK_SOLANA_SYSTEM, std::option::Option::Some(&account_config))
.await
.expect("Devnet getAccountInfo smoke must succeed");
assert!(account.context().slot() > 0);
assert!(account.value().is_some());
// Current official getTokenSupply documentation uses this Devnet mint in its example.
let token_mint = "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E"
.parse::<ksp_core_lib::Pubkey>()
.expect("official Devnet token mint example must remain a valid Pubkey literal");
let token_supply = pool
.get_token_supply(&role, &token_mint, std::option::Option::None)
.await
.expect("Devnet getTokenSupply smoke must succeed for the documented mint");
assert!(token_supply.context().slot() > 0);
assert!(!token_supply.value().amount().is_empty());
let epoch = pool
.get_epoch_info(
&role,
std::option::Option::Some(&ksp_onchain_transport_lib::SolanaContextConfig::new(
std::option::Option::Some(ksp_onchain_transport_lib::SolanaCommitment::Finalized),
std::option::Option::None,
)),
)
.await
.expect("Devnet getEpochInfo smoke must succeed");
assert!(epoch.absolute_slot() > 0);
let vote_accounts = pool.get_vote_accounts(&role, std::option::Option::None).await.expect("Devnet getVoteAccounts smoke must succeed");
assert!(!vote_accounts.current().is_empty() || !vote_accounts.delinquent().is_empty());
}