v0.3.10-pre.006-fix.001
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-job-backfill-lib/tests/yellowstone_raw_parity.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
struct FixtureStream<T> {
|
||||
receiver: tokio::sync::mpsc::Receiver<T>,
|
||||
@@ -320,10 +320,14 @@ fn solana_pubkey_bytes(value: &ksp_core_lib::Pubkey) -> [u8; 32] {
|
||||
}
|
||||
|
||||
fn projection_error(field: &'static str) -> ksp_core_lib::Error {
|
||||
return ksp_core_lib::Error::new("KSP-RAW-TRANSACTION-PRE-006-PROJECTION", "Yellowstone fixture field does not fit common wire")
|
||||
return ksp_core_lib::Error::new(ksp_core_lib::ErrorCode::new("test", "yellowstone_raw_projection"), "Yellowstone fixture field does not fit common wire")
|
||||
.with_context("field", field);
|
||||
}
|
||||
|
||||
fn error_code_text(error: &ksp_core_lib::Error) -> std::string::String {
|
||||
return format!("{}.{}", error.code().domain(), error.code().code());
|
||||
}
|
||||
|
||||
fn expected_v1_wire() -> ksp_raw_transaction_lib::RawSolanaTransactionWire {
|
||||
let message = ksp_raw_transaction_lib::RawSolanaTransactionMessage::new(
|
||||
ksp_raw_transaction_lib::RawSolanaMessageVersion::V1,
|
||||
@@ -358,14 +362,14 @@ async fn pre_006_yellowstone_transaction_and_block_preserve_exact_v1_wire_and_bl
|
||||
let settings = match fixture_settings(server.endpoint_url.as_str()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("fixture settings failed: {}", error.code()));
|
||||
fail_test(format!("fixture settings failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
let channel = match ksp_onchain_transport_lib::YellowstoneGrpcChannel::connect(&settings).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("fixture channel connect failed: {}", error.code()));
|
||||
fail_test(format!("fixture channel connect failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
@@ -373,14 +377,14 @@ async fn pre_006_yellowstone_transaction_and_block_preserve_exact_v1_wire_and_bl
|
||||
let mut session = match channel.open_standard_subscribe(request).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("fixture subscribe failed: {}", error.code()));
|
||||
fail_test(format!("fixture subscribe failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
let expected = match ksp_raw_transaction_lib::serialize_solana_transaction_wire(&expected_v1_wire()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("expected V1 wire serialization failed: {}", error.code()));
|
||||
fail_test(format!("expected V1 wire serialization failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
@@ -391,7 +395,7 @@ async fn pre_006_yellowstone_transaction_and_block_preserve_exact_v1_wire_and_bl
|
||||
return;
|
||||
},
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("transaction update decode failed: {}", error.code()));
|
||||
fail_test(format!("transaction update decode failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
@@ -408,14 +412,14 @@ async fn pre_006_yellowstone_transaction_and_block_preserve_exact_v1_wire_and_bl
|
||||
let transaction_wire = match project_wire(transaction.transaction().transaction()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("transaction projection failed: {}", error.code()));
|
||||
fail_test(format!("transaction projection failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
let transaction_bytes = match ksp_raw_transaction_lib::serialize_solana_transaction_wire(&transaction_wire) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("transaction V1 wire serialization failed: {}", error.code()));
|
||||
fail_test(format!("transaction V1 wire serialization failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
@@ -427,7 +431,7 @@ async fn pre_006_yellowstone_transaction_and_block_preserve_exact_v1_wire_and_bl
|
||||
return;
|
||||
},
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("block update decode failed: {}", error.code()));
|
||||
fail_test(format!("block update decode failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
@@ -445,14 +449,14 @@ async fn pre_006_yellowstone_transaction_and_block_preserve_exact_v1_wire_and_bl
|
||||
let block_wire = match project_wire(block.transactions()[0].transaction()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("block transaction projection failed: {}", error.code()));
|
||||
fail_test(format!("block transaction projection failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
let block_bytes = match ksp_raw_transaction_lib::serialize_solana_transaction_wire(&block_wire) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
fail_test(format!("block V1 wire serialization failed: {}", error.code()));
|
||||
fail_test(format!("block V1 wire serialization failed: {}", error_code_text(&error)));
|
||||
return;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-raw-transaction-lib/src/wire.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
use base64::Engine; // rust-rules: trait-import
|
||||
|
||||
@@ -408,10 +408,10 @@ fn validate_transaction(transaction: &crate::RawSolanaTransactionWire) -> ksp_co
|
||||
return std::result::Result::Err(crate::material_error("wire"));
|
||||
}
|
||||
}
|
||||
if let std::option::Option::Some(heap_size) = message.config().and_then(crate::RawSolanaTransactionConfig::heap_size) {
|
||||
if !(32_768..=262_144).contains(&heap_size) || heap_size % 1_024 != 0 {
|
||||
return std::result::Result::Err(crate::material_error("wire"));
|
||||
}
|
||||
if let std::option::Option::Some(heap_size) = message.config().and_then(crate::RawSolanaTransactionConfig::heap_size)
|
||||
&& (!(32_768..=262_144).contains(&heap_size) || heap_size % 1_024 != 0)
|
||||
{
|
||||
return std::result::Result::Err(crate::material_error("wire"));
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-raw-transaction-lib/unit_tests/wire.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
const LEGACY_GOLDEN_BASE64: &str = "AREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREBAAECISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExAQEBAAKquw==";
|
||||
const V0_GOLDEN_BASE64: &str = "ARISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhKAAQAAASMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIBAAEBAcwBJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQBAAA=";
|
||||
@@ -69,10 +69,10 @@ fn pre_006_legacy_v0_and_v1_wire_goldens_are_exact() {
|
||||
let v0 = crate::serialize_solana_transaction_wire_base64(&v0_wire());
|
||||
let v1 = crate::serialize_solana_transaction_wire_base64(&v1_wire());
|
||||
let v1_empty = crate::serialize_solana_transaction_wire_base64(&v1_empty_config_wire());
|
||||
assert_eq!(legacy.as_deref(), std::result::Result::Ok(LEGACY_GOLDEN_BASE64));
|
||||
assert_eq!(v0.as_deref(), std::result::Result::Ok(V0_GOLDEN_BASE64));
|
||||
assert_eq!(v1.as_deref(), std::result::Result::Ok(V1_GOLDEN_BASE64));
|
||||
assert_eq!(v1_empty.as_deref(), std::result::Result::Ok(V1_EMPTY_CONFIG_GOLDEN_BASE64));
|
||||
assert!(matches!(legacy.as_deref(), std::result::Result::Ok(value) if value == LEGACY_GOLDEN_BASE64));
|
||||
assert!(matches!(v0.as_deref(), std::result::Result::Ok(value) if value == V0_GOLDEN_BASE64));
|
||||
assert!(matches!(v1.as_deref(), std::result::Result::Ok(value) if value == V1_GOLDEN_BASE64));
|
||||
assert!(matches!(v1_empty.as_deref(), std::result::Result::Ok(value) if value == V1_EMPTY_CONFIG_GOLDEN_BASE64));
|
||||
let v1_bytes = crate::serialize_solana_transaction_wire(&v1_wire());
|
||||
assert!(v1_bytes.is_ok());
|
||||
if let std::result::Result::Ok(v1_bytes) = v1_bytes {
|
||||
|
||||
Reference in New Issue
Block a user