// 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::>(); 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; }