v0.3.4-pre.006
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user