0.3.16-pre.005
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-postgres-lib/unit_tests/raw_transaction.rs
|
||||
// version: 11
|
||||
// version: 12
|
||||
|
||||
fn network() -> ksp_store_api::RawNetworkId {
|
||||
return match ksp_store_api::RawNetworkId::new("devnet") {
|
||||
@@ -458,7 +458,7 @@ fn v0_3_15_pre_014_log_messages_conflict_diagnostic_distinguishes_prefix_truncat
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_15_pre_014_fix_001_incoming_truncated_logs_are_compatible_only_when_missing_middle_is_proven() {
|
||||
fn v0_3_16_pre_005_shared_comparator_accepts_only_proved_incoming_truncation_in_postgres_path() {
|
||||
let stored = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Program log: detail-a","Program log: detail-b","Program Vote111 success"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
@@ -466,10 +466,15 @@ fn v0_3_15_pre_014_fix_001_incoming_truncated_logs_are_compatible_only_when_miss
|
||||
);
|
||||
let incoming = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated","Program Vote111 success"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
8,
|
||||
);
|
||||
assert!(super::raw_transaction_incoming_truncated_log_messages_compatible(&stored, &incoming));
|
||||
let relation = ksp_store_api::compare_raw_transaction_variants(&stored, &incoming);
|
||||
let relation = match relation {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_eq!(relation.relation(), ksp_store_api::RawTransactionVariantRelation::CompatibleLessComplete);
|
||||
let mut stored_row = transaction_row("full");
|
||||
stored_row.signature = stored.reference().signature().as_bytes().to_vec();
|
||||
stored_row.slot_text = stored.slot().to_string();
|
||||
@@ -479,12 +484,12 @@ fn v0_3_15_pre_014_fix_001_incoming_truncated_logs_are_compatible_only_when_miss
|
||||
stored_row.content_hash = stored.payload().content_hash().as_bytes().to_vec();
|
||||
stored_row.payload = std::option::Option::Some(stored.payload().bytes().to_vec());
|
||||
let comparison = super::compare_existing_transaction(&network(), stored_row, &incoming);
|
||||
assert!(matches!(comparison, std::result::Result::Ok(super::ExistingTransactionMatch::ActiveIncomingTruncatedLogs)));
|
||||
assert!(matches!(comparison, std::result::Result::Ok(super::ExistingTransactionMatch::ActiveCompatibleLessComplete)));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_15_pre_014_fix_001_truncated_log_compatibility_rejects_unproven_or_reverse_changes() {
|
||||
fn v0_3_16_pre_005_shared_comparator_rejects_unproved_shapes_and_defers_more_complete_promotion() {
|
||||
let stored = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Program log: detail-a","Program log: detail-b","Program Vote111 success"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
@@ -492,34 +497,52 @@ fn v0_3_15_pre_014_fix_001_truncated_log_compatibility_rejects_unproven_or_rever
|
||||
);
|
||||
let bad_prefix = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: changed","Log truncated","Program Vote111 success"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: changed","Log truncated"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
8,
|
||||
);
|
||||
assert!(!super::raw_transaction_incoming_truncated_log_messages_compatible(&stored, &bad_prefix));
|
||||
let post_marker_material = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated","Program Other111 success"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
8,
|
||||
);
|
||||
assert!(super::raw_transaction_incoming_truncated_log_messages_compatible(&stored, &post_marker_material));
|
||||
let other_meta = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5001,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated","Program Vote111 success"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5001,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
8,
|
||||
);
|
||||
assert!(!super::raw_transaction_incoming_truncated_log_messages_compatible(&stored, &other_meta));
|
||||
let non_exact_marker = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated by provider"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
8,
|
||||
);
|
||||
assert!(!super::raw_transaction_incoming_truncated_log_messages_compatible(&stored, &non_exact_marker));
|
||||
for candidate in [&bad_prefix, &post_marker_material, &other_meta, &non_exact_marker] {
|
||||
let relation = match ksp_store_api::compare_raw_transaction_variants(&stored, candidate) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_ne!(relation.relation(), ksp_store_api::RawTransactionVariantRelation::CompatibleLessComplete);
|
||||
assert_ne!(relation.relation(), ksp_store_api::RawTransactionVariantRelation::CompatibleMoreComplete);
|
||||
}
|
||||
let stored_truncated = raw_transaction(
|
||||
9,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated","Program Vote111 success"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
br#"{"transaction":["AQID","base64"],"meta":{"err":null,"fee":5000,"logMessages":["Program Vote111 invoke [1]","Program log: stable","Log truncated"],"rewards":[]},"version":0,"transactionIndex":7}"#,
|
||||
8,
|
||||
);
|
||||
assert!(!super::raw_transaction_incoming_truncated_log_messages_compatible(&stored_truncated, &stored));
|
||||
let more = match ksp_store_api::compare_raw_transaction_variants(&stored_truncated, &stored) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_eq!(more.relation(), ksp_store_api::RawTransactionVariantRelation::CompatibleMoreComplete);
|
||||
let mut stored_row = transaction_row("full");
|
||||
stored_row.signature = stored_truncated.reference().signature().as_bytes().to_vec();
|
||||
stored_row.slot_text = stored_truncated.slot().to_string();
|
||||
stored_row.block_time_unix_millis = stored_truncated.block_time().and_then(|value| return i64::try_from(value.unix_millis()).ok());
|
||||
stored_row.format_id = stored_truncated.payload().format_id().as_str().to_owned();
|
||||
stored_row.format_version = i64::from(stored_truncated.payload().format_version());
|
||||
stored_row.content_hash = stored_truncated.payload().content_hash().as_bytes().to_vec();
|
||||
stored_row.payload = std::option::Option::Some(stored_truncated.payload().bytes().to_vec());
|
||||
let comparison = super::compare_existing_transaction(&network(), stored_row, &stored);
|
||||
assert!(matches!(comparison, std::result::Result::Err(error) if error.phase() == "raw_acquisition_content_conflict"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user