rings-core 0.20.0

Chord DHT implementation with ICE
Documentation
use super::*;
use crate::dht::Did;
use crate::ecc::SecretKey;

fn did() -> Did {
    SecretKey::random().address().into()
}

#[test]
fn test_peer_quality_evidence_classifies_unknown_healthy_and_degraded() {
    let thresholds = PeerQualityThresholds::new(3, 10, 10);
    assert_eq!(
        PeerQualityEvidence::new(0, 0, 0, 0, 0, 0).classify(thresholds),
        PeerQuality::Unknown
    );
    assert_eq!(
        PeerQualityEvidence::new(1, 0, 0, 0, 0, 0).classify(thresholds),
        PeerQuality::Healthy
    );
    assert_eq!(
        PeerQualityEvidence::new(1, 3, 0, 0, 0, 0).classify(thresholds),
        PeerQuality::Degraded
    );
    assert_eq!(
        PeerQualityEvidence::new(1, 0, 0, 10, 0, 0).classify(thresholds),
        PeerQuality::Degraded
    );
    assert_eq!(
        PeerQualityEvidence::new(1, 0, 0, 0, 0, 10).classify(thresholds),
        PeerQuality::Degraded
    );
}

#[test]
fn test_order_peers_by_quality_is_stable_permutation() {
    let degraded = did();
    let unknown_a = did();
    let healthy = did();
    let unknown_b = did();

    let ordered = order_peers_by_quality([
        (degraded, PeerQuality::Degraded),
        (unknown_a, PeerQuality::Unknown),
        (healthy, PeerQuality::Healthy),
        (unknown_b, PeerQuality::Unknown),
    ]);

    assert_eq!(ordered, vec![healthy, unknown_a, unknown_b, degraded]);
}