use cryochamber::daemon::RetryState;
#[test]
fn test_retry_state_provider_rotation_advances() {
let mut retry = RetryState::new(5, 3); assert_eq!(retry.provider_index, 0);
let wrapped = retry.rotate_provider();
assert!(!wrapped);
assert_eq!(retry.provider_index, 1);
let wrapped = retry.rotate_provider();
assert!(!wrapped);
assert_eq!(retry.provider_index, 2);
}
#[test]
fn test_retry_state_provider_rotation_wraps() {
let mut retry = RetryState::new(5, 3);
retry.rotate_provider(); retry.rotate_provider(); let wrapped = retry.rotate_provider(); assert_eq!(retry.provider_index, 0);
assert!(wrapped); }
#[test]
fn test_retry_state_rotation_resets_attempt() {
let mut retry = RetryState::new(5, 3);
retry.record_failure();
retry.record_failure();
assert_eq!(retry.attempt, 2);
retry.rotate_provider();
assert_eq!(retry.attempt, 0); assert_eq!(retry.provider_index, 1);
}
#[test]
fn test_retry_state_reset_clears_provider_index() {
let mut retry = RetryState::new(5, 3);
retry.rotate_provider();
retry.rotate_provider();
assert_eq!(retry.provider_index, 2);
retry.reset();
assert_eq!(retry.attempt, 0);
assert_eq!(retry.provider_index, 0);
}
#[test]
fn test_retry_state_single_provider_no_rotation() {
let mut retry = RetryState::new(5, 1);
let wrapped = retry.rotate_provider();
assert_eq!(retry.provider_index, 0);
assert!(wrapped); }
#[test]
fn test_retry_state_no_providers() {
let mut retry = RetryState::new(5, 0);
let wrapped = retry.rotate_provider();
assert_eq!(retry.provider_index, 0);
assert!(wrapped);
}