use tokio::sync::mpsc;
#[test]
fn test_leader_change_listener_registration() {
let (tx, mut rx) = mpsc::unbounded_channel::<(Option<u32>, u64)>();
tx.send((Some(1), 5)).unwrap();
let (leader_id, term) = rx.try_recv().expect("Should receive notification");
assert_eq!(leader_id, Some(1));
assert_eq!(term, 5);
}
#[test]
fn test_multiple_listeners() {
let (tx1, mut rx1) = mpsc::unbounded_channel::<(Option<u32>, u64)>();
let (tx2, mut rx2) = mpsc::unbounded_channel::<(Option<u32>, u64)>();
tx1.send((Some(2), 10)).unwrap();
tx2.send((Some(2), 10)).unwrap();
let (leader1, term1) = rx1.try_recv().expect("Listener 1 should receive");
let (leader2, term2) = rx2.try_recv().expect("Listener 2 should receive");
assert_eq!(leader1, Some(2));
assert_eq!(term1, 10);
assert_eq!(leader2, Some(2));
assert_eq!(term2, 10);
}
#[test]
fn test_no_leader_notification() {
let (tx, mut rx) = mpsc::unbounded_channel::<(Option<u32>, u64)>();
tx.send((None, 15)).unwrap();
let (leader_id, term) = rx.try_recv().expect("Should receive notification");
assert_eq!(leader_id, None);
assert_eq!(term, 15);
}
#[test]
fn test_channel_closed() {
let (tx, rx) = mpsc::unbounded_channel::<(Option<u32>, u64)>();
drop(rx);
let result = tx.send((Some(1), 5));
assert!(result.is_err(), "Send should fail when receiver is dropped");
}