v0.3.8-pre.009

This commit is contained in:
2026-09-03 20:44:21 +02:00
parent 8c23625fee
commit 32c4b67541
25 changed files with 1319 additions and 44 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/tests/hardening_completeness.rs
// version: 21
// version: 22
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -302,15 +302,17 @@ fn pre_009_live_raw_transaction_proof_is_opt_in_isolated_and_secret_safe() {
}
#[test]
fn v0_3_8_pre_005_raw_capability_implementation_inventory_is_exactly_twelve() {
fn v0_3_8_pre_009_raw_capability_implementation_inventory_is_exactly_fourteen() {
let runtime = include_str!("../src/runtime.rs");
let capability_impls = [
"impl ksp_store_api::RawAccountObservationInspectionRead for PostgresBackend",
"impl ksp_store_api::RawAccountObservationRead for PostgresBackend",
"impl ksp_store_api::RawAccountObservationWrite for PostgresBackend",
"impl ksp_store_api::RawAccountStateInspectionRead for PostgresBackend",
"impl ksp_store_api::RawAccountStateRead for PostgresBackend",
"impl ksp_store_api::RawAccountStateWrite for PostgresBackend",
"impl ksp_store_api::RawTransactionInspectionRead for PostgresBackend",
"impl ksp_store_api::RawTransactionObservationInspectionRead for PostgresBackend",
"impl ksp_store_api::RawTransactionObservationRead for PostgresBackend",
"impl ksp_store_api::RawTransactionObservationWrite for PostgresBackend",
"impl ksp_store_api::RawTransactionRead for PostgresBackend",
@@ -321,7 +323,7 @@ fn v0_3_8_pre_005_raw_capability_implementation_inventory_is_exactly_twelve() {
for implementation in capability_impls {
assert_eq!(runtime.matches(implementation).count(), 1, "unexpected PostgreSQL capability implementation inventory: {implementation}");
}
assert_eq!(runtime.matches("impl ksp_store_api::Raw").count(), 12);
assert_eq!(runtime.matches("impl ksp_store_api::Raw").count(), 14);
let migration = include_str!("../src/migration.rs");
assert!(migration.contains("raw_account_state"));
assert!(migration.contains("crate::V002_RESOURCES"));
@@ -394,13 +396,77 @@ fn v0_3_8_pre_004_transaction_inspection_sql_is_single_statement_payload_free_co
}
assert!(ascending.contains("ORDER BY transaction_row.slot ASC, transaction_row.signature ASC"));
assert!(descending.contains("ORDER BY transaction_row.slot DESC, transaction_row.signature DESC"));
assert_eq!(source.matches(" OFFSET ").count(), 2);
assert!(source.contains("raw_transaction_inspection_sql_window(query.page())"));
assert!(source.contains("raw_transaction_inspection_offset"));
assert!(source.contains("raw_transaction_inspection_limit"));
return;
}
#[test]
fn v0_3_8_pre_009_observation_inspection_sql_is_counted_random_access_safe_and_family_local() {
let transaction = include_str!("../src/raw_transaction.rs");
let account = include_str!("../src/raw_account.rs");
let transaction_ascending = transaction.lines().find(|line| return line.starts_with("const INSPECT_OBSERVATIONS_ASC_SQL"));
let transaction_ascending = match transaction_ascending {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("missing ascending transaction-observation inspection SQL"),
};
let transaction_descending = transaction.lines().find(|line| return line.starts_with("const INSPECT_OBSERVATIONS_DESC_SQL"));
let transaction_descending = match transaction_descending {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("missing descending transaction-observation inspection SQL"),
};
for statement in [transaction_ascending, transaction_descending] {
for required in [
"COUNT(*)::TEXT AS filtered_count_text",
"COUNT(*)::TEXT FROM ksp_raw_transaction_observations",
"LEFT JOIN LATERAL",
"transaction_signature = $1",
"LIMIT $2 OFFSET $3",
"received_at_unix_millis",
"observation_key",
] {
assert!(statement.contains(required), "missing transaction-observation inspection SQL contract: {required}");
}
for forbidden in ["ksp_raw_transactions AS", "payload", "archive_payload", "SELECT *"] {
assert!(!statement.contains(forbidden), "transaction-observation inspection leaked unrelated/raw material: {forbidden}");
}
}
assert!(transaction_ascending.contains("ORDER BY received_at_unix_millis ASC, observation_key ASC"));
assert!(transaction_descending.contains("ORDER BY received_at_unix_millis DESC, observation_key DESC"));
let account_ascending = account.lines().find(|line| return line.starts_with("const INSPECT_ACCOUNT_OBSERVATIONS_ASC_SQL"));
let account_ascending = match account_ascending {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("missing ascending account-observation inspection SQL"),
};
let account_descending = account.lines().find(|line| return line.starts_with("const INSPECT_ACCOUNT_OBSERVATIONS_DESC_SQL"));
let account_descending = match account_descending {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("missing descending account-observation inspection SQL"),
};
for statement in [account_ascending, account_descending] {
for required in [
"COUNT(*)::TEXT AS filtered_count_text",
"COUNT(*)::TEXT FROM ksp_raw_account_observations",
"LEFT JOIN LATERAL",
"account_pubkey = $1",
"account_slot = $2::TEXT::NUMERIC",
"account_state_hash = $3",
"LIMIT $4 OFFSET $5",
"received_at_unix_millis",
"observation_key",
] {
assert!(statement.contains(required), "missing account-observation inspection SQL contract: {required}");
}
for forbidden in ["ksp_raw_account_states AS", "account_row.data", "SELECT *"] {
assert!(!statement.contains(forbidden), "account-observation inspection leaked unrelated/raw material: {forbidden}");
}
}
assert!(account_ascending.contains("ORDER BY received_at_unix_millis ASC, observation_key ASC"));
assert!(account_descending.contains("ORDER BY received_at_unix_millis DESC, observation_key DESC"));
return;
}
#[test]
fn pre_010_raw_account_private_sql_is_non_destructive_keyset_and_family_local() {
let source = include_str!("../src/raw_account.rs");
@@ -493,6 +559,5 @@ fn v0_3_8_pre_005_raw_account_keyset_sql_remains_offset_free_while_inspection_is
assert!(statement.contains("account_row.pubkey"));
assert!(statement.contains("account_row.state_hash"));
}
assert_eq!(source.matches(" OFFSET ").count(), 2);
return;
}