136 lines
6.1 KiB
Rust
136 lines
6.1 KiB
Rust
// file: crates/ksp-raw-transaction-lib/tests/public_api.rs
|
|
// version: 5
|
|
|
|
//! Integration canaries for the public common RAW Transaction crate-root surface.
|
|
|
|
#[test]
|
|
fn pre_002_common_raw_contract_is_consumable_from_crate_root() {
|
|
assert_eq!(ksp_raw_transaction_lib::RAW_TRANSACTION_FORMAT_ID, "ksp.solana.raw_transaction");
|
|
assert_eq!(ksp_raw_transaction_lib::RAW_TRANSACTION_FORMAT_VERSION, 1);
|
|
assert_eq!(ksp_raw_transaction_lib::MIN_RAW_TRANSACTION_SIGNATURE_TEXT_BYTES, 64);
|
|
assert_eq!(ksp_raw_transaction_lib::MAX_RAW_TRANSACTION_SIGNATURE_TEXT_BYTES, 88);
|
|
let network = match ksp_store_api::RawNetworkId::new("devnet") {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let signature = match ksp_raw_transaction_lib::parse_raw_transaction_signature("1".repeat(64).as_str()) {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let material = ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64(
|
|
network,
|
|
signature,
|
|
5,
|
|
std::option::Option::None,
|
|
"AQID",
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Null,
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Value(ksp_raw_transaction_lib::RawTransactionVersion::Legacy),
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
|
);
|
|
let transaction = ksp_raw_transaction_lib::canonicalize_raw_transaction(material);
|
|
assert!(transaction.is_ok());
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_002_acquisition_assembly_accepts_store_api_producer_owned_metadata() {
|
|
let network = match ksp_store_api::RawNetworkId::new("devnet") {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let signature = match ksp_raw_transaction_lib::parse_raw_transaction_signature("1".repeat(64).as_str()) {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let material = ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64(
|
|
network,
|
|
signature,
|
|
5,
|
|
std::option::Option::None,
|
|
"AQID",
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
|
);
|
|
let transaction = match ksp_raw_transaction_lib::canonicalize_raw_transaction(material) {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let provider = match ksp_store_api::RawProvenanceCode::new("fixture") {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let protocol = match ksp_store_api::RawProvenanceCode::new("fixture.protocol") {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let method = match ksp_store_api::RawProvenanceCode::new("fixture.method") {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let received_at = match ksp_store_api::RawTimestamp::from_unix_millis(1) {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return,
|
|
};
|
|
let provenance = ksp_store_api::RawAcquisitionProvenance::new(provider, protocol, method, ksp_store_api::RawAcquisitionOrigin::Import, received_at);
|
|
let acquisition = ksp_raw_transaction_lib::assemble_raw_transaction_acquisition(transaction, ksp_store_api::RawObservationKey::new([9_u8; 32]), provenance);
|
|
assert_eq!(acquisition.transaction().reference(), acquisition.observation().transaction());
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_004_embedded_signature_and_block_material_contract_are_available_from_crate_root() {
|
|
let encoded = "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
|
|
let signature = ksp_raw_transaction_lib::extract_raw_transaction_signature_from_binary_base64(encoded);
|
|
assert!(signature.is_ok());
|
|
let network = ksp_store_api::RawNetworkId::new("devnet");
|
|
assert!(network.is_ok());
|
|
if let std::result::Result::Ok(network) = network {
|
|
let material = ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64_with_embedded_signature(
|
|
network,
|
|
1,
|
|
std::option::Option::None,
|
|
encoded,
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
|
ksp_raw_transaction_lib::RawTransactionWireField::Value(0),
|
|
);
|
|
assert!(material.is_ok());
|
|
}
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_006_source_neutral_wire_contract_is_available_from_crate_root() {
|
|
let message = ksp_raw_transaction_lib::RawSolanaTransactionMessage::new(
|
|
ksp_raw_transaction_lib::RawSolanaMessageVersion::V1,
|
|
ksp_raw_transaction_lib::RawSolanaMessageHeader::new(1, 0, 0),
|
|
vec![[1_u8; 32]],
|
|
[2_u8; 32],
|
|
vec![ksp_raw_transaction_lib::RawSolanaCompiledInstruction::new(0, vec![0], vec![3])],
|
|
vec![],
|
|
std::option::Option::Some(ksp_raw_transaction_lib::RawSolanaTransactionConfig::default()),
|
|
);
|
|
let wire = ksp_raw_transaction_lib::RawSolanaTransactionWire::new(vec![[4_u8; 64]], message);
|
|
let encoded = ksp_raw_transaction_lib::serialize_solana_transaction_wire_base64(&wire);
|
|
assert!(encoded.is_ok());
|
|
if let std::result::Result::Ok(encoded) = encoded {
|
|
assert!(encoded.starts_with("gQ"));
|
|
assert!(ksp_raw_transaction_lib::extract_raw_transaction_signature_from_binary_base64(encoded.as_str()).is_ok());
|
|
}
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_004_signature_formatter_is_consumable_from_crate_root() {
|
|
let signature = ksp_store_api::RawTransactionSignature::new([0_u8; 64]);
|
|
let text = ksp_raw_transaction_lib::format_raw_transaction_signature(&signature);
|
|
assert_eq!(text, "1".repeat(64));
|
|
let parsed = ksp_raw_transaction_lib::parse_raw_transaction_signature(text.as_str());
|
|
assert!(parsed.is_ok());
|
|
if let std::result::Result::Ok(parsed) = parsed {
|
|
assert_eq!(parsed, signature);
|
|
}
|
|
return;
|
|
}
|