v0.3.8-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-postgres-lib/unit_tests/raw_transaction.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
fn network() -> ksp_store_api::RawNetworkId {
|
||||
return match ksp_store_api::RawNetworkId::new("devnet") {
|
||||
@@ -169,6 +169,105 @@ fn pre_004_retention_and_tombstone_decoding_is_exact() {
|
||||
return;
|
||||
}
|
||||
|
||||
fn inspection_row(
|
||||
retention_state: &str,
|
||||
hot_payload_present: bool,
|
||||
archive_payload_present: bool,
|
||||
payload_size_bytes: std::option::Option<i64>,
|
||||
block_time_unix_millis: std::option::Option<i64>,
|
||||
) -> super::RawInspectionDbRow {
|
||||
return super::RawInspectionDbRow {
|
||||
archive_payload_present: std::option::Option::Some(archive_payload_present),
|
||||
block_time_unix_millis,
|
||||
content_hash: std::option::Option::Some(vec![7; 32]),
|
||||
filtered_count_text: "3".to_owned(),
|
||||
format_id: std::option::Option::Some("ksp.raw.transaction".to_owned()),
|
||||
format_version: std::option::Option::Some(1),
|
||||
hot_payload_present: std::option::Option::Some(hot_payload_present),
|
||||
page_present: true,
|
||||
payload_size_bytes,
|
||||
retention_state: std::option::Option::Some(retention_state.to_owned()),
|
||||
signature: std::option::Option::Some(vec![9; 64]),
|
||||
slot_text: std::option::Option::Some(u64::MAX.to_string()),
|
||||
total_count_text: "4".to_owned(),
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_8_pre_004_inspection_window_rejects_unrepresentable_limit_and_offset_before_io() {
|
||||
let normal_limit = match ksp_store_api::RawPageLimit::new(100) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid inspection page limit rejected: {error:?}"),
|
||||
};
|
||||
let normal = super::raw_transaction_inspection_sql_window(ksp_store_api::RawInspectionPageRequest::new(25, normal_limit));
|
||||
assert_eq!(normal, std::result::Result::Ok((100, 25)));
|
||||
let huge_limit = match ksp_store_api::RawPageLimit::new(u64::MAX) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("API unexpectedly rejected backend-physical limit fixture: {error:?}"),
|
||||
};
|
||||
let limit_error = super::raw_transaction_inspection_sql_window(ksp_store_api::RawInspectionPageRequest::new(0, huge_limit));
|
||||
assert_eq!(
|
||||
limit_error.err().map(|value| return (value.kind(), value.phase())),
|
||||
std::option::Option::Some((crate::PostgresBackendErrorKind::PageLimitUnsupported, "raw_transaction_inspection_limit")),
|
||||
);
|
||||
let offset_error = super::raw_transaction_inspection_sql_window(ksp_store_api::RawInspectionPageRequest::new(u64::MAX, normal_limit));
|
||||
assert_eq!(
|
||||
offset_error.err().map(|value| return (value.kind(), value.phase())),
|
||||
std::option::Option::Some((crate::PostgresBackendErrorKind::QueryInvalid, "raw_transaction_inspection_offset")),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_8_pre_004_inspection_summary_decoding_handles_full_archived_and_purged_without_payload_bytes() {
|
||||
let network = network();
|
||||
let full = super::decode_raw_inspection_summary(
|
||||
&network,
|
||||
inspection_row("full", true, false, std::option::Option::Some(4), std::option::Option::Some(1_700_000_000_000)),
|
||||
);
|
||||
let full = match full {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid full inspection summary rejected: {error:?}"),
|
||||
};
|
||||
assert_eq!(full.slot(), u64::MAX);
|
||||
assert_eq!(full.payload_size_bytes(), std::option::Option::Some(4));
|
||||
assert_eq!(full.retention_state(), ksp_store_api::RawRetentionState::Full);
|
||||
let archived = super::decode_raw_inspection_summary(
|
||||
&network,
|
||||
inspection_row("archived", false, true, std::option::Option::Some(5), std::option::Option::Some(1_700_000_000_000)),
|
||||
);
|
||||
let archived = match archived {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid archived inspection summary rejected: {error:?}"),
|
||||
};
|
||||
assert_eq!(archived.payload_size_bytes(), std::option::Option::Some(5));
|
||||
assert_eq!(archived.retention_state(), ksp_store_api::RawRetentionState::Archived);
|
||||
let purged = super::decode_raw_inspection_summary(&network, inspection_row("purged", false, false, std::option::Option::None, std::option::Option::None));
|
||||
let purged = match purged {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid purged inspection summary rejected: {error:?}"),
|
||||
};
|
||||
assert_eq!(purged.payload_size_bytes(), std::option::Option::None);
|
||||
assert_eq!(purged.block_time(), std::option::Option::None);
|
||||
assert_eq!(purged.retention_state(), ksp_store_api::RawRetentionState::Purged);
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_8_pre_004_inspection_summary_rejects_physical_retention_shape_residue() {
|
||||
let network = network();
|
||||
for malformed in [
|
||||
inspection_row("full", true, true, std::option::Option::Some(4), std::option::Option::Some(1)),
|
||||
inspection_row("archived", true, true, std::option::Option::Some(4), std::option::Option::Some(1)),
|
||||
inspection_row("purged", false, true, std::option::Option::None, std::option::Option::None),
|
||||
inspection_row("purged", false, false, std::option::Option::None, std::option::Option::Some(1)),
|
||||
] {
|
||||
let result = super::decode_raw_inspection_summary(&network, malformed);
|
||||
assert_eq!(result.err().map(|value| return value.kind()), std::option::Option::Some(crate::PostgresBackendErrorKind::DataInvalid));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_004_wrong_network_is_rejected_by_the_private_pre_io_guard() {
|
||||
let backend_network = network();
|
||||
|
||||
Reference in New Issue
Block a user