54 lines
2.6 KiB
Rust
54 lines
2.6 KiB
Rust
// file: crates/ksp-onchain-transport-lib/unit_tests/rpc_accounts.rs
|
|
// version: 1
|
|
|
|
#[test]
|
|
fn account_config_serializes_all_common_fields() {
|
|
let config = crate::SolanaAccountInfoConfig::new(
|
|
std::option::Option::Some(crate::SolanaAccountEncoding::Base64),
|
|
std::option::Option::Some(crate::SolanaDataSliceConfig::new(8, 32)),
|
|
std::option::Option::Some(crate::SolanaCommitment::Finalized),
|
|
std::option::Option::Some(99),
|
|
);
|
|
assert_eq!(
|
|
config.to_json_value(),
|
|
serde_json::json!({"encoding":"base64","dataSlice":{"offset":8,"length":32},"commitment":"finalized","minContextSlot":99})
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn program_accounts_config_preserves_filter_variants_and_flags() {
|
|
let filters = std::vec![
|
|
crate::SolanaProgramAccountFilter::DataSize(165),
|
|
crate::SolanaProgramAccountFilter::Memcmp(crate::SolanaMemcmpFilter::new(4, crate::SolanaMemcmpBytes::Base64("AQID".to_owned()))),
|
|
crate::SolanaProgramAccountFilter::TokenAccountState,
|
|
];
|
|
let config = crate::SolanaProgramAccountsConfig::new(crate::SolanaAccountInfoConfig::default(), filters, std::option::Option::Some(true), std::option::Option::Some(true));
|
|
assert_eq!(
|
|
config.to_json_value(),
|
|
serde_json::json!({
|
|
"filters":[{"dataSize":165},{"memcmp":{"offset":4,"bytes":"AQID","encoding":"base64"}},"tokenAccountState"],
|
|
"withContext":true,
|
|
"sortResults":true
|
|
})
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn account_wire_fixture_preserves_legacy_encoded_and_json_parsed_data() {
|
|
let values: std::vec::Vec<serde_json::Value> = serde_json::from_str(include_str!("../fixtures/http/account_data.variants.json")).expect("fixture must decode");
|
|
let legacy = crate::SolanaAccount::decode_wire("fixture", values[0].clone()).expect("legacy account must decode");
|
|
assert!(matches!(legacy.data(), crate::SolanaAccountData::LegacyBinary(_)));
|
|
assert_eq!(legacy.space(), std::option::Option::None);
|
|
let encoded = crate::SolanaAccount::decode_wire("fixture", values[1].clone()).expect("encoded account must decode");
|
|
assert!(matches!(encoded.data(), crate::SolanaAccountData::Encoded { encoding: crate::SolanaAccountEncoding::Base64Zstd, .. }));
|
|
let parsed = crate::SolanaAccount::decode_wire("fixture", values[2].clone()).expect("parsed account must decode");
|
|
match parsed.data() {
|
|
crate::SolanaAccountData::JsonParsed(value) => {
|
|
assert_eq!(value.program(), "spl-token");
|
|
assert_eq!(value.space(), 165);
|
|
assert_eq!(value.parsed()["type"], serde_json::json!("account"));
|
|
}
|
|
_ => assert!(false, "jsonParsed fixture must retain parsed data"),
|
|
}
|
|
}
|