// file: crates/ksp-worker-api/unit_tests/snapshot.rs // version: 1 #[test] fn pre_002_snapshot_sequence_advances_strictly_and_orders_positions() { let first = crate::WorkerSnapshotSequence::initial(); assert_eq!(first.value(), 0); 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!(second.value(), 1); assert!(second.is_after(first)); assert!(!first.is_after(second)); assert!(!first.is_after(first)); return; } #[test] fn pre_002_snapshot_sequence_exhaustion_is_explicit_and_non_wrapping() { let exhausted = super::exhausted_snapshot_sequence(); let result = exhausted.next(); assert!(result.is_err()); let error = match result { std::result::Result::Err(value) => value, std::result::Result::Ok(_) => return, }; assert_eq!(error.code(), crate::ERROR_CODE_WORKER_SNAPSHOT_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_002_snapshot_preserves_exact_common_dimensions() { let id = crate::WorkerId::new("worker-001"); let kind = crate::WorkerKindCode::new("example_worker"); 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 snapshot = crate::WorkerSnapshot::new( id, kind, crate::WorkerSnapshotSequence::initial(), crate::WorkerState::Running, crate::WorkerHealth::Healthy, crate::WorkerActivity::Active, ); assert_eq!(snapshot.id().as_str(), "worker-001"); assert_eq!(snapshot.kind().as_str(), "example_worker"); assert_eq!(snapshot.sequence().value(), 0); assert_eq!(snapshot.state(), crate::WorkerState::Running); assert_eq!(snapshot.health(), crate::WorkerHealth::Healthy); assert_eq!(snapshot.activity(), crate::WorkerActivity::Active); return; }