0.3.16-pre.008
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-postgres-lib/tests/v003_variant_persistence.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
#![warn(missing_docs)]
|
||||
#![deny(unreachable_pub)]
|
||||
@@ -145,3 +145,50 @@ fn v0_3_16_pre_006_promotion_is_inside_acquisition_transaction_and_preserves_pre
|
||||
assert!(promotion.contains("next_transaction_canonical_revision"));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_16_pre_008_conflict_path_never_mutates_canonical_projection_or_selector() {
|
||||
let source = include_str!("../src/raw_transaction.rs");
|
||||
let start = source.find("ExistingTransactionMatch::ActiveConflict(variant_comparison) => {");
|
||||
let end = source.find("ExistingTransactionMatch::Purged => {");
|
||||
let (start, end) = match (start, end) {
|
||||
(std::option::Option::Some(start), std::option::Option::Some(end)) if start < end => (start, end),
|
||||
_ => panic!("pre.008 conflict branch markers are missing"),
|
||||
};
|
||||
let branch = &source[start..end];
|
||||
assert!(branch.contains("persist_or_reuse_native_transaction_variant"));
|
||||
assert!(branch.contains("open_or_update_raw_transaction_conflict"));
|
||||
assert!(branch.contains("RawTransactionVariantWriteOutcome::QuarantinedConflict"));
|
||||
assert!(!branch.contains("promote_more_complete_transaction_variant"));
|
||||
assert!(!branch.contains("UPDATE_CANONICAL_TRANSACTION_PROJECTION_SQL"));
|
||||
assert!(!branch.contains("UPDATE_TRANSACTION_VARIANT_SELECTOR_SQL"));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_16_pre_008_variant_transition_helpers_cannot_commit_independently() {
|
||||
let source = include_str!("../src/raw_transaction.rs");
|
||||
let promotion_start = source.find("async fn promote_more_complete_transaction_variant(");
|
||||
let promotion_end = source.find("async fn preserve_previous_canonical_variant(");
|
||||
let conflict_start = source.find("async fn open_or_update_raw_transaction_conflict(");
|
||||
let conflict_end = source.find("async fn promote_more_complete_transaction_variant(");
|
||||
let (promotion_start, promotion_end, conflict_start, conflict_end) = match (promotion_start, promotion_end, conflict_start, conflict_end) {
|
||||
(Some(promotion_start), Some(promotion_end), Some(conflict_start), Some(conflict_end))
|
||||
if promotion_start < promotion_end && conflict_start < conflict_end =>
|
||||
{
|
||||
(promotion_start, promotion_end, conflict_start, conflict_end)
|
||||
},
|
||||
_ => panic!("pre.008 transition helper markers are missing"),
|
||||
};
|
||||
let promotion = &source[promotion_start..promotion_end];
|
||||
let conflict = &source[conflict_start..conflict_end];
|
||||
for helper in [promotion, conflict] {
|
||||
assert!(helper.contains("&deadpool_postgres::Transaction<'_>"));
|
||||
assert!(!helper.contains(".commit().await"));
|
||||
}
|
||||
assert!(source.contains("const LOCK_TRANSACTION_SQL: &str = \"SELECT"));
|
||||
assert!(source.contains("WHERE signature = $1 FOR UPDATE\";"));
|
||||
assert!(source.contains("canonical_variant_id = $2::TEXT::NUMERIC AND canonical_revision = $3::TEXT::NUMERIC"));
|
||||
assert!(source.contains("AND revision = $8::TEXT::NUMERIC"));
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user