Files
2026-08-14 15:35:19 +02:00

90 lines
3.2 KiB
Rust

// file: crates/ksp-core-lib/unit_tests/program_ids.rs
// version: 1
fn assert_program_id_types(program_id: &'static str, pubkey: crate::Pubkey) {
assert_eq!(pubkey, crate::Pubkey::from_str_const(program_id));
return;
}
#[test]
fn declared_program_ids_have_matching_text_and_pubkey_forms() {
assert_program_id_types(crate::PRGID_SOLANA_SYSTEM, crate::PRGIDPK_SOLANA_SYSTEM);
assert_program_id_types(crate::PRGID_SOLANA_STAKE, crate::PRGIDPK_SOLANA_STAKE);
assert_program_id_types(crate::PRGID_SOLANA_VOTE, crate::PRGIDPK_SOLANA_VOTE);
assert_program_id_types(crate::PRGID_SOLANA_SLASHING, crate::PRGIDPK_SOLANA_SLASHING);
return;
}
#[test]
fn registry_contains_the_eighteen_core_program_ids() {
assert_eq!(crate::entries().len(), 18);
assert_eq!(crate::native_program_ids().count(), 18);
return;
}
#[test]
fn registry_codes_program_ids_and_pubkeys_are_unique() {
for left_index in 0..crate::entries().len() {
for right_index in (left_index + 1)..crate::entries().len() {
let left = &crate::entries()[left_index];
let right = &crate::entries()[right_index];
assert_ne!(left.code(), right.code());
assert_ne!(left.program_id(), right.program_id());
assert_ne!(left.pubkey(), right.pubkey());
}
}
return;
}
#[test]
fn registry_pubkeys_match_their_owned_base58_values() {
for entry in crate::entries() {
assert_eq!(entry.pubkey(), crate::Pubkey::from_str_const(entry.program_id()));
}
return;
}
#[test]
fn filters_combine_domain_family_protocol_subfamily_version_and_kind() {
let bpf_v2 = crate::program_ids(
crate::ProgramIdFilter::new()
.with_domain("solana")
.with_family("loader")
.with_protocol("solana")
.with_subfamily("bpf")
.with_program_version("v2")
.with_kind(crate::ProgramIdKind::Loader),
)
.collect::<std::vec::Vec<_>>();
assert_eq!(bpf_v2.len(), 1);
assert_eq!(bpf_v2[0].program_id(), crate::PRGID_SOLANA_LOADER_BPF_V2);
return;
}
#[test]
fn family_views_cover_expected_core_groups() {
assert_eq!(crate::program_ids_by_family("runtime").count(), 5);
assert_eq!(crate::program_ids_by_family("consensus").count(), 3);
assert_eq!(crate::program_ids_by_family("loader").count(), 5);
assert_eq!(crate::program_ids_by_family("precompile").count(), 3);
assert_eq!(crate::program_ids_by_family("proof").count(), 2);
return;
}
#[test]
fn direct_lookup_supports_text_and_typed_program_ids() {
let by_text = crate::find_program_id(crate::PRGID_SOLANA_SLASHING);
let by_pubkey = crate::find_program_pubkey(&crate::PRGIDPK_SOLANA_SLASHING);
assert_eq!(by_text.map(crate::ProgramIdEntry::code), std::option::Option::Some("solana.slashing"));
assert_eq!(by_pubkey.map(crate::ProgramIdEntry::code), std::option::Option::Some("solana.slashing"));
return;
}
#[test]
fn non_program_well_known_accounts_are_absent() {
assert!(crate::find_program_id("1nc1nerator11111111111111111111111111111111").is_none());
assert!(crate::find_program_id("StakeConfig11111111111111111111111111111111").is_none());
assert!(crate::find_program_id("SysvarC1ock11111111111111111111111111111111").is_none());
return;
}