hydra 0.1.40

A framework for writing fault tolerant, highly scalable applications with the Rust programming language.
Documentation
use hydra::HashRing;

#[test]
fn hash_ring_works() {
    let ring: HashRing<u64> = HashRing::new();

    ring.add_node(0, 0xDEADBEEF);
    ring.add_node(1, 0xDEADC0DE);

    let node1 = ring.find_node(0);
    let node2 = ring.find_node(1);
    let node3 = ring.find_node(1337);

    assert_eq!(node1.unwrap(), 0xDEADBEEF);
    assert_eq!(node2.unwrap(), 0xDEADC0DE);

    assert!([0xDEADBEEF, 0xDEADC0DE].contains(&node3.unwrap()));
}

#[test]
fn hash_ring_set_nodes() {
    let ring: HashRing<u64> = HashRing::new();

    ring.add_node(0, 0xDEADBEEF);
    ring.add_node(1, 0xDEADC0DE);

    ring.set_nodes([(0, 0xDEADC0DE), (1, 0xDEADBEEF)]);

    let node1 = ring.find_node(0);
    let node2 = ring.find_node(1);

    assert_eq!(node1.unwrap(), 0xDEADC0DE);
    assert_eq!(node2.unwrap(), 0xDEADBEEF);
}

#[test]
fn hash_ring_clear() {
    let ring: HashRing<u64> = HashRing::new();

    ring.add_node(0, 0xDEADBEEF);
    ring.add_node(1, 0xDEADC0DE);

    assert!(ring.find_node(0).is_some());

    ring.clear();

    assert!(ring.find_node(0).is_none());
}

#[test]
fn hash_ring_overrides() {
    let ring: HashRing<u64> = HashRing::new();

    ring.add_node(0, 0xDEADBEEF);
    ring.add_node(1, 0xDEADC0DE);

    let node1 = ring.find_node(0);

    assert_eq!(node1.unwrap(), 0xDEADBEEF);

    ring.add_override(3, 0xC0DEBEEF);

    let node3 = ring.find_node(3);

    assert_eq!(node3.unwrap(), 0xC0DEBEEF);
}