36 lines
1.6 KiB
Rust
36 lines
1.6 KiB
Rust
// file: kb-lib/tests/external_solana_program_metadata_account_api.rs
|
|
// version: 1
|
|
|
|
//! Downstream-style compilation contract for Solana Program Metadata account decoders.
|
|
|
|
#[test]
|
|
fn external_consumers_decode_accounts_only_through_crate_root_exports() {
|
|
let account = solana_pubkey::Pubkey::new_from_array([17_u8; 32]);
|
|
let program = solana_pubkey::Pubkey::new_from_array([18_u8; 32]);
|
|
let authority = solana_pubkey::Pubkey::new_from_array([19_u8; 32]);
|
|
let seed = kb_lib::DcMetadataSpmSeed::from_bytes([20_u8; 16]);
|
|
let mut data = vec![0_u8; kb_lib::DC_METADATA_SPM_BUFFER_HEADER_BYTES];
|
|
data[0] = kb_lib::DcMetadataSpmAccountDiscriminator::Buffer.wire_value();
|
|
data[1..33].copy_from_slice(&program.to_bytes());
|
|
data[33..65].copy_from_slice(&authority.to_bytes());
|
|
data[65] = 1;
|
|
data[66..82].copy_from_slice(seed.as_bytes());
|
|
data.extend_from_slice(&[21_u8, 22_u8]);
|
|
let result = kb_lib::decoder_metadata_solana_program_metadata_decode_account(
|
|
account.to_string().as_str(),
|
|
kb_program_ids::METADATA_SOLANA_PROGRAM_METADATA_PROGRAM_ID,
|
|
&data,
|
|
);
|
|
assert!(result.is_ok());
|
|
if let std::result::Result::Ok(kb_lib::DcMetadataSpmAccountSnapshot::Buffer(snapshot)) = result
|
|
{
|
|
assert_eq!(snapshot.account, account.to_string());
|
|
assert_eq!(snapshot.program, std::option::Option::Some(program.to_string()));
|
|
assert_eq!(snapshot.authority, std::option::Option::Some(authority.to_string()));
|
|
assert_eq!(snapshot.data, vec![21_u8, 22_u8]);
|
|
} else {
|
|
return;
|
|
}
|
|
assert_eq!(kb_lib::DC_METADATA_SPM_MAX_ACCOUNT_BYTES, 10_485_760);
|
|
}
|