v0.3.8-pre.004

This commit is contained in:
2026-09-03 12:32:53 +02:00
parent 009b957523
commit c4198ac656
17 changed files with 902 additions and 46 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/tests/postgres_raw_transaction_live.rs
// version: 5
// version: 6
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -183,6 +183,7 @@ async fn run_raw_transaction_scenario(admin: &mut tokio_postgres::Client, uri: &
prove_atomic_insert_and_reads(&backend).await,
prove_additional_observation_and_atomic_rollback(&backend).await,
prove_pagination(&backend).await,
prove_inspection(&backend).await,
prove_retention_and_rehydrate(&backend).await,
] {
if let std::result::Result::Err(error) = proof {
@@ -476,6 +477,57 @@ async fn prove_pagination(backend: &ksp_store_postgres_lib::PostgresBackend) ->
return std::result::Result::Ok(());
}
async fn prove_inspection(backend: &ksp_store_postgres_lib::PostgresBackend) -> std::result::Result<(), LiveFailure> {
let ascending_query =
match inspection_query(ksp_store_api::RawSortDirection::Ascending, 1, 2, std::option::Option::Some(9_000), std::option::Option::Some(9_002)) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let ascending = match backend.inspect_raw_transactions(&ascending_query).await {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::result::Result::Err(LiveFailure::new("inspection_ascending_query")),
};
if ascending.filtered_items() != 5 || ascending.total_items() < ascending.filtered_items() || ascending.items().len() != 2 {
return std::result::Result::Err(LiveFailure::new("inspection_ascending_counts"));
}
if ascending.items()[0].reference().signature().as_bytes()[0] != 51 || ascending.items()[1].reference().signature().as_bytes()[0] != 52 {
return std::result::Result::Err(LiveFailure::new("inspection_ascending_order"));
}
for item in ascending.items() {
if item.payload_size_bytes() != std::option::Option::Some(4) || item.retention_state() != ksp_store_api::RawRetentionState::Full {
return std::result::Result::Err(LiveFailure::new("inspection_ascending_summary"));
}
}
let descending_query =
match inspection_query(ksp_store_api::RawSortDirection::Descending, 1, 2, std::option::Option::Some(9_000), std::option::Option::Some(9_002)) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let descending = match backend.inspect_raw_transactions(&descending_query).await {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::result::Result::Err(LiveFailure::new("inspection_descending_query")),
};
if descending.filtered_items() != 5 || descending.items().len() != 2 {
return std::result::Result::Err(LiveFailure::new("inspection_descending_counts"));
}
if descending.items()[0].reference().signature().as_bytes()[0] != 53 || descending.items()[1].reference().signature().as_bytes()[0] != 52 {
return std::result::Result::Err(LiveFailure::new("inspection_descending_order"));
}
let empty_query =
match inspection_query(ksp_store_api::RawSortDirection::Ascending, 99, 25, std::option::Option::Some(9_000), std::option::Option::Some(9_002)) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let empty = match backend.inspect_raw_transactions(&empty_query).await {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::result::Result::Err(LiveFailure::new("inspection_empty_query")),
};
if empty.filtered_items() != 5 || !empty.items().is_empty() {
return std::result::Result::Err(LiveFailure::new("inspection_empty_page"));
}
return std::result::Result::Ok(());
}
async fn prove_retention_and_rehydrate(backend: &ksp_store_postgres_lib::PostgresBackend) -> std::result::Result<(), LiveFailure> {
let transaction = match raw_transaction(70, 7_000, 70) {
std::result::Result::Ok(value) => value,
@@ -750,6 +802,29 @@ async fn collect_pages(
return std::result::Result::Ok(output);
}
fn inspection_query(
direction: ksp_store_api::RawSortDirection,
offset: u64,
limit: u64,
start: std::option::Option<u64>,
end: std::option::Option<u64>,
) -> std::result::Result<ksp_store_api::RawTransactionInspectionQuery, LiveFailure> {
let network = match network("devnet") {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let slots = match ksp_store_api::RawSlotRange::new(start, end) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::result::Result::Err(LiveFailure::new("inspection_slot_range")),
};
let limit = match ksp_store_api::RawPageLimit::new(limit) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::result::Result::Err(LiveFailure::new("inspection_page_limit")),
};
let page = ksp_store_api::RawInspectionPageRequest::new(offset, limit);
return std::result::Result::Ok(ksp_store_api::RawTransactionInspectionQuery::new(network, slots, direction, page));
}
fn page_query(
direction: ksp_store_api::RawSortDirection,
cursor: std::option::Option<ksp_store_api::RawPageCursor>,