v0.3.3-pre.007
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-postgres-lib/unit_tests/raw_transaction.rs
|
||||
// version: 3
|
||||
// version: 4
|
||||
|
||||
fn network() -> ksp_store_api::RawNetworkId {
|
||||
return match ksp_store_api::RawNetworkId::new("devnet") {
|
||||
@@ -458,3 +458,114 @@ fn pre_006_page_limit_exposes_only_the_real_postgres_limit_plus_one_boundary() {
|
||||
assert_eq!(rejected.map(|value| return value.kind()), Some(crate::PostgresBackendErrorKind::PageLimitUnsupported));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_retention_transition_decision_matches_compare_and_transition_contract() {
|
||||
assert_eq!(
|
||||
super::retention_transition_decision(
|
||||
ksp_store_api::RawRetentionState::Full,
|
||||
ksp_store_api::RawRetentionState::Full,
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
),
|
||||
std::result::Result::Ok(super::RetentionTransitionDecision::Archive),
|
||||
);
|
||||
assert_eq!(
|
||||
super::retention_transition_decision(
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
ksp_store_api::RawRetentionState::Full,
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
),
|
||||
std::result::Result::Ok(super::RetentionTransitionDecision::AlreadyAtTarget),
|
||||
);
|
||||
assert_eq!(
|
||||
super::retention_transition_decision(
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
ksp_store_api::RawRetentionState::Purged,
|
||||
),
|
||||
std::result::Result::Ok(super::RetentionTransitionDecision::Purge),
|
||||
);
|
||||
assert_eq!(
|
||||
super::retention_transition_decision(
|
||||
ksp_store_api::RawRetentionState::Purged,
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
ksp_store_api::RawRetentionState::Purged,
|
||||
),
|
||||
std::result::Result::Ok(super::RetentionTransitionDecision::AlreadyAtTarget),
|
||||
);
|
||||
assert_eq!(
|
||||
super::retention_transition_decision(
|
||||
ksp_store_api::RawRetentionState::Full,
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
ksp_store_api::RawRetentionState::Purged,
|
||||
),
|
||||
std::result::Result::Ok(super::RetentionTransitionDecision::ExpectedStateMismatch),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_compacted_transitions_are_rejected_by_the_pre_io_guard() {
|
||||
let backend_network = network();
|
||||
let reference = ksp_store_api::RawTransactionReference::new(backend_network.clone(), ksp_store_api::RawTransactionSignature::new([5; 64]));
|
||||
let compact = match ksp_store_api::RawTransactionRetentionTransition::try_new(
|
||||
reference.clone(),
|
||||
ksp_store_api::RawRetentionState::Full,
|
||||
ksp_store_api::RawRetentionState::Compacted,
|
||||
) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid logical compact transition rejected by API: {error:?}"),
|
||||
};
|
||||
let compact_error = super::ensure_retention_transition_inputs(&backend_network, &compact).err();
|
||||
assert_eq!(
|
||||
compact_error.as_ref().map(|value| return value.kind()),
|
||||
std::option::Option::Some(crate::PostgresBackendErrorKind::RetentionCompactionUnsupported),
|
||||
);
|
||||
assert_eq!(compact_error.as_ref().map(|value| return value.phase()), std::option::Option::Some("raw_retention_compaction"));
|
||||
let compact_to_archive = match ksp_store_api::RawTransactionRetentionTransition::try_new(
|
||||
reference,
|
||||
ksp_store_api::RawRetentionState::Compacted,
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid logical compacted archive transition rejected by API: {error:?}"),
|
||||
};
|
||||
let compact_to_archive_error = super::ensure_retention_transition_inputs(&backend_network, &compact_to_archive).err();
|
||||
assert_eq!(
|
||||
compact_to_archive_error.as_ref().map(|value| return value.kind()),
|
||||
std::option::Option::Some(crate::PostgresBackendErrorKind::RetentionCompactionUnsupported),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_retention_transition_pre_io_guard_rejects_wrong_network() {
|
||||
let backend_network = network();
|
||||
let other_network = match ksp_store_api::RawNetworkId::new("mainnet-beta") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid alternate network rejected: {error:?}"),
|
||||
};
|
||||
let reference = ksp_store_api::RawTransactionReference::new(other_network, ksp_store_api::RawTransactionSignature::new([6; 64]));
|
||||
let transition = match ksp_store_api::RawTransactionRetentionTransition::try_new(
|
||||
reference,
|
||||
ksp_store_api::RawRetentionState::Full,
|
||||
ksp_store_api::RawRetentionState::Archived,
|
||||
) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("valid retention transition rejected by API: {error:?}"),
|
||||
};
|
||||
let rejected = super::ensure_retention_transition_inputs(&backend_network, &transition);
|
||||
assert_eq!(rejected.err().map(|value| return value.kind()), std::option::Option::Some(crate::PostgresBackendErrorKind::WrongNetwork));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_retained_payload_shape_rejects_empty_and_oversized_bytes() {
|
||||
assert!(super::validate_retained_payload_bytes(&[1], "test_retention_payload").is_ok());
|
||||
let empty = super::validate_retained_payload_bytes(&[], "test_retention_payload");
|
||||
assert_eq!(empty.err().map(|value| return value.kind()), std::option::Option::Some(crate::PostgresBackendErrorKind::DataInvalid));
|
||||
let oversized = vec![0; ksp_store_api::MAX_RAW_PAYLOAD_BYTES + 1];
|
||||
let oversized = super::validate_retained_payload_bytes(oversized.as_slice(), "test_retention_payload");
|
||||
assert_eq!(oversized.err().map(|value| return value.kind()), std::option::Option::Some(crate::PostgresBackendErrorKind::DataInvalid));
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user