diff --git a/crates/radicle/src/node/sync/announce.rs b/crates/radicle/src/node/sync/announce.rs index 1a5681a3..74e2864b 100644 --- a/crates/radicle/src/node/sync/announce.rs +++ b/crates/radicle/src/node/sync/announce.rs @@ -183,7 +183,6 @@ impl Announcer { fn is_target_reached(&self) -> Option { let SuccessCounts { preferred, synced } = self.success_counts(); - if !self.target.preferred_seeds.is_empty() && preferred >= self.target.preferred_seeds.len() { Some(SuccessfulOutcome::PreferredNodes { @@ -607,6 +606,32 @@ mod test { ); } + #[test] + fn preferred_seeds_already_synced() { + let local = arbitrary::gen::(0); + let seeds = arbitrary::set::(6..=6); + + let preferred_seeds = seeds.iter().take(2).copied().collect::>(); + let already_synced = preferred_seeds.clone(); // Preferred seeds already synced + let regular_unsynced = seeds.iter().skip(2).copied().collect::>(); + + let config = AnnouncerConfig::public( + local, + ReplicationFactor::must_reach(4), + preferred_seeds.clone(), + already_synced.clone(), + regular_unsynced.clone(), + ); + + assert_eq!( + Announcer::new(config).err(), + Some(AnnouncerError::AlreadySynced(AlreadySynced { + preferred: 2, + synced: 2 + })) + ); + } + #[test] fn announcer_reached_min_replication_target() { let local = arbitrary::gen::(0);