use cortex_store::verify::{
verify_rollback_fork_refusal, ForkMarker, RollbackForkFailure, RollbackForkState,
RollbackForkStateLocation,
};
#[test]
fn rollback_fork_missing_metadata_passes() {
let current = RollbackForkState::default();
let candidate = RollbackForkState::default();
let report = verify_rollback_fork_refusal(¤t, &candidate);
assert!(report.is_ok(), "unexpected failures: {report:?}");
}
#[test]
fn rollback_fork_schema_version_rollback_fails_closed() {
let current = RollbackForkState {
schema_version: Some(2),
fork_marker: None,
};
let candidate = RollbackForkState {
schema_version: Some(1),
fork_marker: None,
};
let report = verify_rollback_fork_refusal(¤t, &candidate);
assert_eq!(
report.failures,
vec![RollbackForkFailure::SchemaVersionRollback {
current: 2,
candidate: 1,
}]
);
assert_eq!(
report.failures[0].invariant(),
"rollback.schema_version.not_decreased"
);
}
#[test]
fn rollback_fork_candidate_fork_marker_fails_closed() {
let current = RollbackForkState {
schema_version: Some(2),
fork_marker: None,
};
let candidate = RollbackForkState {
schema_version: Some(2),
fork_marker: Some(ForkMarker::new("fork-B")),
};
let report = verify_rollback_fork_refusal(¤t, &candidate);
assert_eq!(
report.failures,
vec![RollbackForkFailure::ForkMarkerPresent {
location: RollbackForkStateLocation::Candidate,
marker: "fork-B".into(),
}]
);
assert_eq!(report.failures[0].invariant(), "fork.marker.absent");
}
#[test]
fn rollback_fork_current_fork_marker_fails_closed() {
let current = RollbackForkState {
schema_version: Some(2),
fork_marker: Some(ForkMarker::new("fork-A")),
};
let candidate = RollbackForkState {
schema_version: Some(2),
fork_marker: None,
};
let report = verify_rollback_fork_refusal(¤t, &candidate);
assert_eq!(
report.failures,
vec![RollbackForkFailure::ForkMarkerPresent {
location: RollbackForkStateLocation::Current,
marker: "fork-A".into(),
}]
);
assert_eq!(report.failures[0].invariant(), "fork.marker.absent");
}