v0.3.6-pre.003
This commit is contained in:
81
crates/ksp-job-api/unit_tests/notification.rs
Normal file
81
crates/ksp-job-api/unit_tests/notification.rs
Normal file
@@ -0,0 +1,81 @@
|
||||
// file: crates/ksp-job-api/unit_tests/notification.rs
|
||||
// version: 1
|
||||
|
||||
fn sequence(value: u64) -> crate::JobNotificationSequence {
|
||||
let mut sequence = crate::JobNotificationSequence::initial();
|
||||
for _ in 0..value {
|
||||
sequence = match sequence.next() {
|
||||
std::result::Result::Ok(next) => next,
|
||||
std::result::Result::Err(_) => return sequence,
|
||||
};
|
||||
}
|
||||
return sequence;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_003_notification_sequence_advances_strictly_and_orders_positions() {
|
||||
let mut first = crate::JobNotificationSequence::initial();
|
||||
for _ in 0..41 {
|
||||
let next = first.next();
|
||||
assert!(next.is_ok());
|
||||
first = match next {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
}
|
||||
let second = first.next();
|
||||
assert!(second.is_ok());
|
||||
let second = match second {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_eq!(first.value(), 41);
|
||||
assert_eq!(second.value(), 42);
|
||||
assert!(second.is_after(first));
|
||||
assert!(!first.is_after(second));
|
||||
assert!(second > first);
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_003_notification_sequence_exhaustion_is_explicit_and_non_wrapping() {
|
||||
let exhausted = super::exhausted_notification_sequence().next();
|
||||
assert!(exhausted.is_err());
|
||||
let error = match exhausted {
|
||||
std::result::Result::Err(value) => value,
|
||||
std::result::Result::Ok(_) => return,
|
||||
};
|
||||
assert_eq!(error.code(), crate::ERROR_CODE_JOB_NOTIFICATION_SEQUENCE_EXHAUSTED);
|
||||
assert_eq!(error.context().len(), 1);
|
||||
assert_eq!(error.context()[0].key(), "sequence");
|
||||
assert_eq!(error.context()[0].value(), u64::MAX.to_string());
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_003_notification_preserves_complete_value_and_redacts_snapshot_debug() {
|
||||
let id = crate::JobId::new("job-notify-001");
|
||||
let kind = crate::JobKindCode::new("backfill_raw");
|
||||
assert!(id.is_ok());
|
||||
assert!(kind.is_ok());
|
||||
let id = match id {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let kind = match kind {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let notification =
|
||||
crate::JobNotification::new(id.clone(), kind.clone(), sequence(7), crate::JobState::Running, "RAW-PAYLOAD-MUST-NOT-APPEAR-IN-DEBUG".to_string());
|
||||
assert_eq!(notification.id(), &id);
|
||||
assert_eq!(notification.kind(), &kind);
|
||||
assert_eq!(notification.sequence().value(), 7);
|
||||
assert_eq!(notification.state(), crate::JobState::Running);
|
||||
assert_eq!(notification.snapshot(), "RAW-PAYLOAD-MUST-NOT-APPEAR-IN-DEBUG");
|
||||
let debug = std::format!("{notification:?}");
|
||||
assert!(debug.contains("JobNotification"));
|
||||
assert!(debug.contains("<redacted>"));
|
||||
assert!(!debug.contains("RAW-PAYLOAD-MUST-NOT-APPEAR-IN-DEBUG"));
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user