v0.4.8-pre.005
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
// file: kb-lib/tests/external_solana_program_metadata_instruction_api.rs
|
||||
// version: 1
|
||||
|
||||
//! Downstream-style compilation contract for the Solana Program Metadata instruction decoder.
|
||||
|
||||
#[test]
|
||||
fn external_consumers_decode_instructions_only_through_crate_root_exports() {
|
||||
let account = solana_pubkey::Pubkey::new_from_array([31_u8; 32]).to_string();
|
||||
let authority = solana_pubkey::Pubkey::new_from_array([32_u8; 32]).to_string();
|
||||
let placeholder = kb_program_ids::METADATA_SOLANA_PROGRAM_METADATA_PROGRAM_ID;
|
||||
let account_keys = serde_json::json!([
|
||||
{
|
||||
"accountIndex": 0,
|
||||
"accountKey": account,
|
||||
"source": "static",
|
||||
"signer": false,
|
||||
"writable": true
|
||||
},
|
||||
{
|
||||
"accountIndex": 1,
|
||||
"accountKey": authority,
|
||||
"source": "static",
|
||||
"signer": true,
|
||||
"writable": false
|
||||
},
|
||||
{
|
||||
"accountIndex": 2,
|
||||
"accountKey": placeholder,
|
||||
"source": "static",
|
||||
"signer": false,
|
||||
"writable": false
|
||||
},
|
||||
{
|
||||
"accountIndex": 3,
|
||||
"accountKey": placeholder,
|
||||
"source": "static",
|
||||
"signer": false,
|
||||
"writable": false
|
||||
}
|
||||
]);
|
||||
let instruction_accounts = serde_json::json!([
|
||||
{"accountIndex": 0, "accountKey": account},
|
||||
{"accountIndex": 1, "accountKey": authority},
|
||||
{"accountIndex": 2, "accountKey": placeholder},
|
||||
{"accountIndex": 3, "accountKey": placeholder}
|
||||
]);
|
||||
let input_result = kb_lib::MdCoreInstructionReplayInput::new(
|
||||
"spm:external:extend",
|
||||
"signature",
|
||||
42,
|
||||
"0",
|
||||
placeholder,
|
||||
false,
|
||||
std::option::Option::None,
|
||||
account_keys,
|
||||
instruction_accounts,
|
||||
std::option::Option::Some(serde_json::json!({"dataBase64": "CAEA"})),
|
||||
std::option::Option::None,
|
||||
serde_json::json!([]),
|
||||
serde_json::json!([]),
|
||||
serde_json::json!([]),
|
||||
serde_json::json!([]),
|
||||
);
|
||||
assert!(input_result.is_ok());
|
||||
let input: kb_lib::MdCoreInstructionReplayInput;
|
||||
if let std::result::Result::Ok(value) = input_result {
|
||||
input = value;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
let decoder = kb_lib::DcMetadataSolanaProgramMetadataDecoder;
|
||||
let recognition = kb_lib::DcApiInstructionDecoder::recognize(&decoder, &input);
|
||||
assert!(recognition.compatible);
|
||||
assert!(recognition.exact);
|
||||
assert_eq!(recognition.entry_code.as_deref(), std::option::Option::Some("extend"));
|
||||
let result = kb_lib::DcApiInstructionDecoder::decode(&decoder, &input);
|
||||
assert_eq!(result.status, kb_lib::DcApiDecoderOutcomeStatus::Decoded);
|
||||
assert_eq!(result.recognized_entry_code.as_deref(), std::option::Option::Some("extend"));
|
||||
assert_eq!(result.observations.len(), 1);
|
||||
assert_eq!(result.observations[0].payload_json["parameters"]["length"], 1);
|
||||
}
|
||||
Reference in New Issue
Block a user