v0.2.4-pre.009
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-onchain-transport-lib/tests/public_api.rs
|
||||
// version: 22
|
||||
// version: 23
|
||||
|
||||
//! Integration tests for the public `ksp-onchain-transport-lib` consumer contract.
|
||||
|
||||
@@ -396,6 +396,7 @@ fn public_v0_2_4_pre_003_simple_block_wrappers_are_available_from_crate_root() {
|
||||
let _minimum_ledger_slot = ksp_onchain_transport_lib::HttpTransportPool::minimum_ledger_slot;
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn public_v0_2_4_pre_004_range_and_performance_wrappers_are_available_from_crate_root() {
|
||||
let _get_blocks = ksp_onchain_transport_lib::HttpTransportPool::get_blocks;
|
||||
@@ -405,7 +406,9 @@ fn public_v0_2_4_pre_004_range_and_performance_wrappers_are_available_from_crate
|
||||
|
||||
#[test]
|
||||
fn public_v0_2_4_pre_005_block_production_wrapper_is_available_from_crate_root() {
|
||||
let identity = "11111111111111111111111111111111".parse::<ksp_core_lib::Pubkey>().expect("public fixture identity must parse");
|
||||
let identity = "11111111111111111111111111111111"
|
||||
.parse::<ksp_core_lib::Pubkey>()
|
||||
.expect("public fixture identity must parse");
|
||||
let range = ksp_onchain_transport_lib::SolanaBlockProductionRange::new(10, std::option::Option::Some(20));
|
||||
let config = ksp_onchain_transport_lib::SolanaBlockProductionConfig::new(
|
||||
std::option::Option::Some(ksp_onchain_transport_lib::SolanaCommitment::Finalized),
|
||||
@@ -417,6 +420,7 @@ fn public_v0_2_4_pre_005_block_production_wrapper_is_available_from_crate_root()
|
||||
let _method = ksp_onchain_transport_lib::HttpTransportPool::get_block_production;
|
||||
}
|
||||
|
||||
|
||||
#[allow(deprecated)]
|
||||
#[test]
|
||||
fn public_v0_2_4_pre_006_get_block_complete_request_forms_are_available_from_crate_root() {
|
||||
@@ -436,6 +440,7 @@ fn public_v0_2_4_pre_006_get_block_complete_request_forms_are_available_from_cra
|
||||
assert_eq!(config.rewards(), std::option::Option::Some(true));
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn public_v0_2_4_pre_007_simple_economics_wrappers_are_available_from_crate_root() {
|
||||
let _get_inflation_governor = ksp_onchain_transport_lib::HttpTransportPool::get_inflation_governor;
|
||||
@@ -463,3 +468,62 @@ fn public_v0_2_4_pre_008_inflation_reward_wrapper_is_available_from_crate_root()
|
||||
assert_eq!(config.commitment(), std::option::Option::Some(ksp_onchain_transport_lib::SolanaCommitment::Confirmed));
|
||||
assert_eq!(config.min_context_slot(), std::option::Option::Some(431_000_000));
|
||||
}
|
||||
|
||||
#[allow(deprecated)]
|
||||
#[test]
|
||||
fn public_v0_2_4_pre_009_all_52_current_typed_wrappers_and_legacy_forms_are_available_from_crate_root() {
|
||||
let _get_account_info = ksp_onchain_transport_lib::HttpTransportPool::get_account_info;
|
||||
let _get_balance = ksp_onchain_transport_lib::HttpTransportPool::get_balance;
|
||||
let _get_largest_accounts = ksp_onchain_transport_lib::HttpTransportPool::get_largest_accounts;
|
||||
let _get_minimum_balance_for_rent_exemption = ksp_onchain_transport_lib::HttpTransportPool::get_minimum_balance_for_rent_exemption;
|
||||
let _get_multiple_accounts = ksp_onchain_transport_lib::HttpTransportPool::get_multiple_accounts;
|
||||
let _get_program_accounts = ksp_onchain_transport_lib::HttpTransportPool::get_program_accounts;
|
||||
let _get_token_account_balance = ksp_onchain_transport_lib::HttpTransportPool::get_token_account_balance;
|
||||
let _get_token_accounts_by_delegate = ksp_onchain_transport_lib::HttpTransportPool::get_token_accounts_by_delegate;
|
||||
let _get_token_accounts_by_owner = ksp_onchain_transport_lib::HttpTransportPool::get_token_accounts_by_owner;
|
||||
let _get_token_largest_accounts = ksp_onchain_transport_lib::HttpTransportPool::get_token_largest_accounts;
|
||||
let _get_token_supply = ksp_onchain_transport_lib::HttpTransportPool::get_token_supply;
|
||||
let _get_fee_for_message = ksp_onchain_transport_lib::HttpTransportPool::get_fee_for_message;
|
||||
let _get_latest_blockhash = ksp_onchain_transport_lib::HttpTransportPool::get_latest_blockhash;
|
||||
let _get_recent_prioritization_fees = ksp_onchain_transport_lib::HttpTransportPool::get_recent_prioritization_fees;
|
||||
let _get_signatures_for_address = ksp_onchain_transport_lib::HttpTransportPool::get_signatures_for_address;
|
||||
let _get_signature_statuses = ksp_onchain_transport_lib::HttpTransportPool::get_signature_statuses;
|
||||
let _get_transaction = ksp_onchain_transport_lib::HttpTransportPool::get_transaction;
|
||||
let _get_transaction_count = ksp_onchain_transport_lib::HttpTransportPool::get_transaction_count;
|
||||
let _is_blockhash_valid = ksp_onchain_transport_lib::HttpTransportPool::is_blockhash_valid;
|
||||
let _request_airdrop = ksp_onchain_transport_lib::HttpTransportPool::request_airdrop;
|
||||
let _send_transaction = ksp_onchain_transport_lib::HttpTransportPool::send_transaction;
|
||||
let _simulate_transaction = ksp_onchain_transport_lib::HttpTransportPool::simulate_transaction;
|
||||
let _get_block = ksp_onchain_transport_lib::HttpTransportPool::get_block;
|
||||
let _get_block_commitment = ksp_onchain_transport_lib::HttpTransportPool::get_block_commitment;
|
||||
let _get_block_height = ksp_onchain_transport_lib::HttpTransportPool::get_block_height;
|
||||
let _get_block_production = ksp_onchain_transport_lib::HttpTransportPool::get_block_production;
|
||||
let _get_blocks = ksp_onchain_transport_lib::HttpTransportPool::get_blocks;
|
||||
let _get_blocks_with_limit = ksp_onchain_transport_lib::HttpTransportPool::get_blocks_with_limit;
|
||||
let _get_block_time = ksp_onchain_transport_lib::HttpTransportPool::get_block_time;
|
||||
let _get_first_available_block = ksp_onchain_transport_lib::HttpTransportPool::get_first_available_block;
|
||||
let _get_recent_performance_samples = ksp_onchain_transport_lib::HttpTransportPool::get_recent_performance_samples;
|
||||
let _minimum_ledger_slot = ksp_onchain_transport_lib::HttpTransportPool::minimum_ledger_slot;
|
||||
let _get_cluster_nodes = ksp_onchain_transport_lib::HttpTransportPool::get_cluster_nodes;
|
||||
let _get_epoch_info = ksp_onchain_transport_lib::HttpTransportPool::get_epoch_info;
|
||||
let _get_epoch_schedule = ksp_onchain_transport_lib::HttpTransportPool::get_epoch_schedule;
|
||||
let _get_genesis_hash = ksp_onchain_transport_lib::HttpTransportPool::get_genesis_hash;
|
||||
let _get_health = ksp_onchain_transport_lib::HttpTransportPool::get_health;
|
||||
let _get_highest_snapshot_slot = ksp_onchain_transport_lib::HttpTransportPool::get_highest_snapshot_slot;
|
||||
let _get_identity = ksp_onchain_transport_lib::HttpTransportPool::get_identity;
|
||||
let _get_leader_schedule = ksp_onchain_transport_lib::HttpTransportPool::get_leader_schedule;
|
||||
let _get_max_retransmit_slot = ksp_onchain_transport_lib::HttpTransportPool::get_max_retransmit_slot;
|
||||
let _get_max_shred_insert_slot = ksp_onchain_transport_lib::HttpTransportPool::get_max_shred_insert_slot;
|
||||
let _get_slot = ksp_onchain_transport_lib::HttpTransportPool::get_slot;
|
||||
let _get_slot_leader = ksp_onchain_transport_lib::HttpTransportPool::get_slot_leader;
|
||||
let _get_slot_leaders = ksp_onchain_transport_lib::HttpTransportPool::get_slot_leaders;
|
||||
let _get_version = ksp_onchain_transport_lib::HttpTransportPool::get_version;
|
||||
let _get_vote_accounts = ksp_onchain_transport_lib::HttpTransportPool::get_vote_accounts;
|
||||
let _get_inflation_governor = ksp_onchain_transport_lib::HttpTransportPool::get_inflation_governor;
|
||||
let _get_inflation_rate = ksp_onchain_transport_lib::HttpTransportPool::get_inflation_rate;
|
||||
let _get_inflation_reward = ksp_onchain_transport_lib::HttpTransportPool::get_inflation_reward;
|
||||
let _get_stake_minimum_delegation = ksp_onchain_transport_lib::HttpTransportPool::get_stake_minimum_delegation;
|
||||
let _get_supply = ksp_onchain_transport_lib::HttpTransportPool::get_supply;
|
||||
let _get_block_legacy = ksp_onchain_transport_lib::HttpTransportPool::get_block_legacy;
|
||||
let _get_transaction_legacy = ksp_onchain_transport_lib::HttpTransportPool::get_transaction_legacy;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-onchain-transport-lib/tests/release_completeness.rs
|
||||
// version: 20
|
||||
// version: 21
|
||||
|
||||
//! Release-level completeness canaries for the staged HTTP wrapper sequence.
|
||||
|
||||
@@ -445,7 +445,13 @@ fn release_v0_2_4_descriptor_set_is_exact_and_remains_read_retry_safe_through_wr
|
||||
"getRecentPerformanceSamples",
|
||||
"minimumLedgerSlot",
|
||||
];
|
||||
let mut expected_economics = std::vec!["getInflationGovernor", "getInflationRate", "getInflationReward", "getStakeMinimumDelegation", "getSupply",];
|
||||
let mut expected_economics = std::vec![
|
||||
"getInflationGovernor",
|
||||
"getInflationRate",
|
||||
"getInflationReward",
|
||||
"getStakeMinimumDelegation",
|
||||
"getSupply",
|
||||
];
|
||||
let mut actual_blocks = std::vec::Vec::new();
|
||||
let mut actual_economics = std::vec::Vec::new();
|
||||
for descriptor in ksp_onchain_transport_lib::current_http_rpc_methods() {
|
||||
@@ -497,6 +503,7 @@ fn release_v0_2_4_pre_003_simple_blocks_subset_is_exact_and_retry_safe() {
|
||||
assert_eq!(actual.len(), 5);
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn release_v0_2_4_pre_004_range_performance_subset_is_exact_and_retry_safe() {
|
||||
let mut expected = std::vec!["getBlocks", "getBlocksWithLimit", "getRecentPerformanceSamples"];
|
||||
@@ -531,6 +538,7 @@ fn release_v0_2_4_pre_005_block_production_subset_is_exact_and_retry_safe() {
|
||||
assert_eq!(descriptor.transport_retry_class(), ksp_onchain_transport_lib::TransportRetryClass::RetrySafe);
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn release_v0_2_4_pre_006_get_block_completes_all_ten_block_wrappers_with_legacy_marker() {
|
||||
let expected = std::vec![
|
||||
@@ -564,6 +572,7 @@ fn release_v0_2_4_pre_006_get_block_completes_all_ten_block_wrappers_with_legacy
|
||||
assert!(get_block.request_form_status().has_deprecated_legacy());
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn release_v0_2_4_pre_007_simple_economics_subset_is_exact_and_retry_safe() {
|
||||
let mut expected = std::vec!["getInflationGovernor", "getInflationRate", "getStakeMinimumDelegation", "getSupply"];
|
||||
@@ -608,3 +617,128 @@ fn release_v0_2_4_pre_008_completes_all_five_economics_wrappers_exactly_and_retr
|
||||
assert_eq!(actual, expected);
|
||||
assert_eq!(actual.len(), 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn release_v0_2_4_pre_009_final_http_inventory_and_coverage_partition_are_exact() {
|
||||
let expected_current = std::vec![
|
||||
"getAccountInfo",
|
||||
"getBalance",
|
||||
"getBlock",
|
||||
"getBlockCommitment",
|
||||
"getBlockHeight",
|
||||
"getBlockProduction",
|
||||
"getBlocks",
|
||||
"getBlocksWithLimit",
|
||||
"getBlockTime",
|
||||
"getClusterNodes",
|
||||
"getEpochInfo",
|
||||
"getEpochSchedule",
|
||||
"getFeeForMessage",
|
||||
"getFirstAvailableBlock",
|
||||
"getGenesisHash",
|
||||
"getHealth",
|
||||
"getHighestSnapshotSlot",
|
||||
"getIdentity",
|
||||
"getInflationGovernor",
|
||||
"getInflationRate",
|
||||
"getInflationReward",
|
||||
"getLargestAccounts",
|
||||
"getLatestBlockhash",
|
||||
"getLeaderSchedule",
|
||||
"getMaxRetransmitSlot",
|
||||
"getMaxShredInsertSlot",
|
||||
"getMinimumBalanceForRentExemption",
|
||||
"getMultipleAccounts",
|
||||
"getProgramAccounts",
|
||||
"getRecentPerformanceSamples",
|
||||
"getRecentPrioritizationFees",
|
||||
"getSignaturesForAddress",
|
||||
"getSignatureStatuses",
|
||||
"getSlot",
|
||||
"getSlotLeader",
|
||||
"getSlotLeaders",
|
||||
"getStakeMinimumDelegation",
|
||||
"getSupply",
|
||||
"getTokenAccountBalance",
|
||||
"getTokenAccountsByDelegate",
|
||||
"getTokenAccountsByOwner",
|
||||
"getTokenLargestAccounts",
|
||||
"getTokenSupply",
|
||||
"getTransaction",
|
||||
"getTransactionCount",
|
||||
"getVersion",
|
||||
"getVoteAccounts",
|
||||
"isBlockhashValid",
|
||||
"minimumLedgerSlot",
|
||||
"requestAirdrop",
|
||||
"sendTransaction",
|
||||
"simulateTransaction",
|
||||
];
|
||||
let expected_historical = std::vec![
|
||||
"confirmTransaction",
|
||||
"getConfirmedBlock",
|
||||
"getConfirmedBlocks",
|
||||
"getConfirmedBlocksWithLimit",
|
||||
"getConfirmedSignaturesForAddress2",
|
||||
"getConfirmedTransaction",
|
||||
"getFeeCalculatorForBlockhash",
|
||||
"getFeeRateGovernor",
|
||||
"getFees",
|
||||
"getRecentBlockhash",
|
||||
"getSignatureConfirmation",
|
||||
"getSignatureStatus",
|
||||
"getSnapshotSlot",
|
||||
"getStakeActivation",
|
||||
];
|
||||
|
||||
let current = ksp_onchain_transport_lib::current_http_rpc_methods();
|
||||
let historical = ksp_onchain_transport_lib::historical_http_rpc_methods();
|
||||
let mut actual_current = std::vec::Vec::with_capacity(current.len());
|
||||
let mut actual_historical = std::vec::Vec::with_capacity(historical.len());
|
||||
let mut v0_2_1 = 0_usize;
|
||||
let mut v0_2_2 = 0_usize;
|
||||
let mut v0_2_3 = 0_usize;
|
||||
let mut v0_2_4 = 0_usize;
|
||||
let mut historical_current = 0_usize;
|
||||
|
||||
for descriptor in current {
|
||||
actual_current.push(descriptor.method());
|
||||
assert_eq!(descriptor.runtime_status(), ksp_onchain_transport_lib::RpcRuntimeStatus::Supported);
|
||||
assert_ne!(descriptor.documentation_status(), ksp_onchain_transport_lib::RpcDocumentationStatus::Deprecated);
|
||||
match descriptor.coverage_release() {
|
||||
ksp_onchain_transport_lib::HttpRpcCoverageRelease::V0_2_1 => v0_2_1 += 1,
|
||||
ksp_onchain_transport_lib::HttpRpcCoverageRelease::V0_2_2 => v0_2_2 += 1,
|
||||
ksp_onchain_transport_lib::HttpRpcCoverageRelease::V0_2_3 => v0_2_3 += 1,
|
||||
ksp_onchain_transport_lib::HttpRpcCoverageRelease::V0_2_4 => v0_2_4 += 1,
|
||||
ksp_onchain_transport_lib::HttpRpcCoverageRelease::Historical => historical_current += 1,
|
||||
}
|
||||
match descriptor.operation_kind() {
|
||||
ksp_onchain_transport_lib::RpcOperationKind::Read | ksp_onchain_transport_lib::RpcOperationKind::Simulation => {
|
||||
assert_eq!(descriptor.transport_retry_class(), ksp_onchain_transport_lib::TransportRetryClass::RetrySafe);
|
||||
},
|
||||
ksp_onchain_transport_lib::RpcOperationKind::WriteSubmission => {
|
||||
assert_eq!(descriptor.transport_retry_class(), ksp_onchain_transport_lib::TransportRetryClass::NeverAfterDispatch);
|
||||
},
|
||||
}
|
||||
}
|
||||
for descriptor in historical {
|
||||
actual_historical.push(descriptor.method());
|
||||
assert_eq!(descriptor.documentation_status(), ksp_onchain_transport_lib::RpcDocumentationStatus::Deprecated);
|
||||
assert_eq!(descriptor.runtime_status(), ksp_onchain_transport_lib::RpcRuntimeStatus::Removed);
|
||||
assert_eq!(descriptor.coverage_release(), ksp_onchain_transport_lib::HttpRpcCoverageRelease::Historical);
|
||||
assert_eq!(descriptor.transport_retry_class(), ksp_onchain_transport_lib::TransportRetryClass::NotApplicable);
|
||||
}
|
||||
|
||||
actual_current.sort_unstable();
|
||||
actual_historical.sort_unstable();
|
||||
let mut expected_current = expected_current;
|
||||
let mut expected_historical = expected_historical;
|
||||
expected_current.sort_unstable();
|
||||
expected_historical.sort_unstable();
|
||||
assert_eq!(actual_current, expected_current);
|
||||
assert_eq!(actual_historical, expected_historical);
|
||||
assert_eq!(actual_current.len(), 52);
|
||||
assert_eq!(actual_historical.len(), 14);
|
||||
assert_eq!((v0_2_1, v0_2_2, v0_2_3, v0_2_4), (4, 22, 11, 15));
|
||||
assert_eq!(historical_current, 0);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// file: crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
//! Opt-in live Devnet smoke for representative pure Transport Accounts/Tokens/Cluster/Transactions reads.
|
||||
//! Opt-in live Devnet smoke for representative pure Transport reads across the complete HTTP typed surface.
|
||||
|
||||
fn devnet_pool() -> ksp_core_lib::Result<ksp_onchain_transport_lib::HttpTransportPool> {
|
||||
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
|
||||
@@ -42,7 +42,7 @@ fn devnet_pool() -> ksp_core_lib::Result<ksp_onchain_transport_lib::HttpTranspor
|
||||
|
||||
#[tokio::test(flavor = "current_thread")]
|
||||
#[ignore = "opt-in live Solana Devnet smoke; performs external network requests"]
|
||||
async fn programmatic_devnet_transport_reaches_accounts_tokens_cluster_and_transaction_read_wrappers() {
|
||||
async fn programmatic_devnet_transport_reaches_accounts_tokens_cluster_transactions_blocks_and_economics_reads() {
|
||||
let pool = devnet_pool().expect("programmatic Devnet Transport settings must construct a pool");
|
||||
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
|
||||
|
||||
@@ -117,4 +117,22 @@ async fn programmatic_devnet_transport_reaches_accounts_tokens_cluster_and_trans
|
||||
.await
|
||||
.expect("Devnet getTransactionCount smoke must succeed");
|
||||
assert!(transaction_count > 0);
|
||||
|
||||
let block_height = pool
|
||||
.get_block_height(&role, std::option::Option::Some(&transaction_context))
|
||||
.await
|
||||
.expect("Devnet getBlockHeight smoke must succeed");
|
||||
assert!(block_height > 0);
|
||||
|
||||
let inflation_rate = pool.get_inflation_rate(&role).await.expect("Devnet getInflationRate smoke must succeed");
|
||||
assert!(inflation_rate.total().is_finite());
|
||||
assert!(inflation_rate.validator().is_finite());
|
||||
assert!(inflation_rate.foundation().is_finite());
|
||||
|
||||
let stake_minimum_delegation = pool
|
||||
.get_stake_minimum_delegation(&role, std::option::Option::Some(&transaction_context))
|
||||
.await
|
||||
.expect("Devnet getStakeMinimumDelegation smoke must succeed");
|
||||
assert!(stake_minimum_delegation.context().slot() > 0);
|
||||
assert!(*stake_minimum_delegation.value() > 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user