v0.3.4-pre.006

This commit is contained in:
2026-08-30 22:31:02 +02:00
parent 50d4142797
commit fccb7d876c
10 changed files with 364 additions and 35 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/unit_tests/raw_account.rs
// version: 2
// version: 3
fn network() -> ksp_store_api::RawNetworkId {
return match ksp_store_api::RawNetworkId::new("devnet") {
@@ -322,3 +322,57 @@ fn pre_005_account_origin_encoding_is_exact_and_static() {
}
return;
}
#[test]
fn pre_006_additional_observation_input_guard_rejects_wrong_network_before_io() {
let backend = network();
let foreign = match ksp_store_api::RawNetworkId::new("mainnet-beta") {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => panic!("valid foreign network rejected: {error:?}"),
};
let observation = match super::decode_raw_account_observation_row(&foreign, observation_row()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => panic!("valid foreign account observation rejected: {error:?}"),
};
let error = super::ensure_observation_write_input(&backend, &observation).err();
assert_eq!(error.map(|value| return value.kind()), std::option::Option::Some(crate::PostgresBackendErrorKind::WrongNetwork));
return;
}
#[test]
fn pre_006_additional_observation_race_and_cancellation_contract_is_transaction_bounded() {
let source = include_str!("../src/raw_account.rs");
let start = match source.find("pub(crate) async fn record_raw_account_observation") {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("record_raw_account_observation function missing"),
};
let tail = &source[start..];
let end = match tail.find("fn raw_account_observation_db_row") {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("record_raw_account_observation boundary missing"),
};
let function = &tail[..end];
let begin = match function.find("client.transaction().await") {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("additional observation transaction begin missing"),
};
let key_share = match function.find("LOCK_ACCOUNT_REFERENCE_SQL") {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("additional observation reference lock missing"),
};
let persist = match function.find("persist_account_observation_row") {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("additional observation insert/compare missing"),
};
let commit = match function.find("sql_transaction.commit().await") {
std::option::Option::Some(value) => value,
std::option::Option::None => panic!("additional observation commit missing"),
};
assert!(begin < key_share);
assert!(key_share < persist);
assert!(persist < commit);
assert!(!function.contains("tokio::spawn"));
assert!(!function.contains("std::mem::forget"));
assert!(!function.contains("ON CONFLICT DO UPDATE"));
return;
}