radicle: test Announcer::timed_out on success
Ensure that if the Announcer has reached a success case, that if `Announcer::timed_out` is called, it will still return the success.
This commit is contained in:
parent
11156619b3
commit
1b33229dd2
|
|
@ -1104,6 +1104,52 @@ mod test {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn timed_out_after_reaching_success() {
|
||||||
|
let local = arbitrary::gen::<NodeId>(0);
|
||||||
|
let unsynced = arbitrary::set::<NodeId>(3..=3)
|
||||||
|
.into_iter()
|
||||||
|
.collect::<BTreeSet<_>>();
|
||||||
|
|
||||||
|
let config = AnnouncerConfig::public(
|
||||||
|
local,
|
||||||
|
ReplicationFactor::must_reach(2),
|
||||||
|
BTreeSet::new(),
|
||||||
|
BTreeSet::new(),
|
||||||
|
unsynced.clone(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut announcer = Announcer::new(config).unwrap();
|
||||||
|
|
||||||
|
// Sync with enough nodes to reach the target
|
||||||
|
let mut synced_nodes = BTreeMap::new();
|
||||||
|
for node in unsynced {
|
||||||
|
let duration = time::Duration::from_secs(1);
|
||||||
|
synced_nodes.insert(node, SyncStatus::Synced { duration });
|
||||||
|
|
||||||
|
match announcer.synced_with(node, duration) {
|
||||||
|
ControlFlow::Continue(_) => continue,
|
||||||
|
ControlFlow::Break(_) => break, // Reached target
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now call timed_out even though we reached success
|
||||||
|
match announcer.timed_out() {
|
||||||
|
AnnouncerResult::Success(success) => {
|
||||||
|
// Should return Success since target was reached
|
||||||
|
assert_eq!(
|
||||||
|
success.outcome(),
|
||||||
|
SuccessfulOutcome::MinReplicationFactor {
|
||||||
|
preferred: 0,
|
||||||
|
synced: 2
|
||||||
|
},
|
||||||
|
"Should return success outcome even when called via timed_out"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
other => panic!("Expected Success via timed_out, got: {other:?}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cannot_construct_announcer() {
|
fn cannot_construct_announcer() {
|
||||||
let local = arbitrary::gen::<NodeId>(0);
|
let local = arbitrary::gen::<NodeId>(0);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue