Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
radicle: Announcer test AlreadySynced for preferred seeds
Fintan Halpenny committed 8 months ago
commit f79123c1f55c971c39b08100ee360b6f9f46fc22
parent 99070cddbd3f25cd2fbc04e1746770f4b0c6ede8
1 file changed +26 -1
modified crates/radicle/src/node/sync/announce.rs
@@ -183,7 +183,6 @@ impl Announcer {

    fn is_target_reached(&self) -> Option<SuccessfulOutcome> {
        let SuccessCounts { preferred, synced } = self.success_counts();
-

        if !self.target.preferred_seeds.is_empty() && preferred >= self.target.preferred_seeds.len()
        {
            Some(SuccessfulOutcome::PreferredNodes {
@@ -608,6 +607,32 @@ mod test {
    }

    #[test]
+
    fn preferred_seeds_already_synced() {
+
        let local = arbitrary::gen::<NodeId>(0);
+
        let seeds = arbitrary::set::<NodeId>(6..=6);
+

+
        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
+
        let already_synced = preferred_seeds.clone(); // Preferred seeds already synced
+
        let regular_unsynced = seeds.iter().skip(2).copied().collect::<BTreeSet<_>>();
+

+
        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::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(10..=10);