use tsoracle_core::{Epoch, PeerEndpoint};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum LeaderState {
Leader { epoch: Epoch },
Follower {
leader_endpoint: Option<PeerEndpoint>,
leader_epoch: Option<Epoch>,
},
Unknown,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn leader_state_payload_aware_equality() {
let l1 = LeaderState::Leader { epoch: Epoch(1) };
let l2 = LeaderState::Leader { epoch: Epoch(2) };
assert_ne!(l1, l2, "different epochs must compare unequal");
assert_eq!(l1, LeaderState::Leader { epoch: Epoch(1) });
let f_known = LeaderState::Follower {
leader_endpoint: Some(PeerEndpoint::try_from("node-2:50051").unwrap()),
leader_epoch: Some(Epoch(4)),
};
let f_unknown = LeaderState::Follower {
leader_endpoint: None,
leader_epoch: None,
};
assert_ne!(
f_known, f_unknown,
"follower-leader-changes must surface as inequality",
);
let f_epoch_5 = LeaderState::Follower {
leader_endpoint: Some(PeerEndpoint::try_from("node-2:50051").unwrap()),
leader_epoch: Some(Epoch(5)),
};
assert_ne!(f_known, f_epoch_5, "epoch must discriminate followers");
assert_ne!(f_known, LeaderState::Unknown);
assert_eq!(LeaderState::Unknown, LeaderState::Unknown);
let rendered = format!("{l1:?}");
assert!(rendered.contains("Leader"));
}
}