Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
radicle: Announcer test preferred seeds only
Fintan Halpenny committed 8 months ago
commit 376a5566c2918f75a75a8b4a20c18b05ba73f63d
parent 84f11f5e3162e18357d1517f9468b742391ee3d5
1 file changed +55 -0
modified crates/radicle/src/node/sync/announce.rs
@@ -553,6 +553,61 @@ mod test {
    use super::*;

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

+
        // All preferred seeds, no regular seeds in unsynced
+
        let preferred_seeds = seeds.iter().take(3).copied().collect::<BTreeSet<_>>();
+
        let unsynced = preferred_seeds.clone(); // Only preferred seeds to sync with
+

+
        let config = AnnouncerConfig::public(
+
            local,
+
            ReplicationFactor::must_reach(5), // High target that we won't reach with preferred alone
+
            preferred_seeds.clone(),
+
            BTreeSet::new(),
+
            unsynced,
+
        );
+

+
        let mut announcer = Announcer::new(config).unwrap();
+

+
        // Sync with all preferred seeds
+
        let mut synced_count = 0;
+
        let mut result = None;
+
        for &node in &preferred_seeds {
+
            let duration = time::Duration::from_secs(1);
+
            synced_count += 1;
+

+
            match announcer.synced_with(node, duration) {
+
                ControlFlow::Continue(progress) => {
+
                    assert_eq!(
+
                        progress.preferred(),
+
                        synced_count,
+
                        "Preferred count should increment for each preferred seed"
+
                    );
+
                    assert_eq!(
+
                        progress.synced(),
+
                        synced_count,
+
                        "Total synced should equal preferred since all are preferred"
+
                    );
+
                }
+
                ControlFlow::Break(success) => {
+
                    result = Some(success);
+
                    break;
+
                }
+
            }
+
        }
+
        assert_eq!(
+
            result.unwrap().outcome(),
+
            SuccessfulOutcome::PreferredNodes {
+
                preferred: preferred_seeds.len(),
+
                total_nodes_synced: preferred_seeds.len()
+
            },
+
            "Should succeed with PreferredNodes outcome"
+
        );
+
    }
+

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