0.3.16-pre.006

This commit is contained in:
2026-09-21 21:17:53 +02:00
parent 8b0fbf831e
commit daab30fcd0
5 changed files with 525 additions and 18 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/tests/v003_variant_persistence.rs
// version: 2
// version: 3
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -59,12 +59,52 @@ fn v0_3_16_pre_004_legacy_observation_without_mapping_is_not_fabricated() {
}
#[test]
fn v0_3_16_pre_005_shared_comparator_is_active_but_durable_conflict_and_promotion_stay_deferred() {
fn v0_3_16_pre_006_shared_comparator_promotes_only_more_complete_and_keeps_conflict_deferred() {
let source = include_str!("../src/raw_transaction.rs");
assert!(source.contains("ksp_store_api::compare_raw_transaction_variants"));
assert!(source.contains("ksp_store_api::RawTransactionVariantRelation::CompatibleLessComplete"));
assert!(source.contains("ksp_store_api::RawTransactionVariantRelation::CompatibleMoreComplete"));
assert!(source.contains("ExistingTransactionMatch::ActiveCompatibleLessComplete"));
assert!(source.contains("ExistingTransactionMatch::ActiveCompatibleMoreComplete"));
assert!(source.contains("promote_more_complete_transaction_variant"));
assert!(source.contains("UPDATE ksp_raw_transaction_canonical_selectors SET canonical_variant_id"));
assert!(source.contains("canonical_revision = $5::TEXT::NUMERIC"));
assert!(source.contains("UPDATE ksp_raw_transactions SET slot = $2::TEXT::NUMERIC"));
assert!(source.contains("PostgreSQL Store committed a proved RAW transaction canonical promotion"));
assert!(!source.contains("log_raw_transaction_compatible_more_complete_log_messages"));
assert!(!source.contains("INSERT INTO ksp_raw_transaction_conflicts"));
assert!(!source.contains("UPDATE ksp_raw_transaction_canonical_selectors SET canonical_variant_id"));
return;
}
#[test]
fn v0_3_16_pre_006_promotion_is_inside_acquisition_transaction_and_preserves_previous_canonical() {
let source = include_str!("../src/raw_transaction.rs");
let start = source.find("pub(crate) async fn persist_raw_transaction_acquisition(");
let end = source.find("pub(crate) async fn record_raw_transaction_observation(");
let (start, end) = match (start, end) {
(std::option::Option::Some(start), std::option::Option::Some(end)) if start < end => (start, end),
_ => panic!("pre.006 acquisition function markers are missing"),
};
let body = &source[start..end];
let persist_variant = body.find("persist_or_reuse_native_transaction_variant");
let promote = body.find("promote_more_complete_transaction_variant");
let observation = body.find("persist_observation_row");
let commit = body.rfind("sql_transaction.commit().await");
let transition_log = body.find("log_raw_transaction_canonical_promotion_committed");
assert!(matches!(
(persist_variant, promote, observation, commit, transition_log),
(Some(persist_variant), Some(promote), Some(observation), Some(commit), Some(transition_log))
if persist_variant < promote && promote < observation && observation < commit && commit < transition_log
));
let promotion_start = source.find("async fn promote_more_complete_transaction_variant(");
let promotion_end = source.find("async fn persist_transaction_variant_link(");
let (promotion_start, promotion_end) = match (promotion_start, promotion_end) {
(std::option::Option::Some(start), std::option::Option::Some(end)) if start < end => (start, end),
_ => panic!("pre.006 promotion helper markers are missing"),
};
let promotion = &source[promotion_start..promotion_end];
assert!(promotion.contains("preserve_previous_canonical_variant"));
assert!(promotion.contains("DELETE_ARCHIVE_PAYLOAD_SQL"));
assert!(promotion.contains("UPDATE_CANONICAL_TRANSACTION_PROJECTION_SQL"));
assert!(promotion.contains("UPDATE_TRANSACTION_VARIANT_SELECTOR_SQL"));
assert!(promotion.contains("next_transaction_canonical_revision"));
return;
}