felixctl 0.6.0-preview

Command-line tool for Felix: publish, subscribe, read caches, inspect the control plane and run benchmarks
use serde_json::json;

use super::*;

#[test]
fn owners_are_the_named_streams_or_caches_assignments() {
    let assignment = |name: &str, kind: Option<&str>, shard: u32| {
        let mut value = json!({
            "tenant_id": "t1", "namespace": "default", "stream": name,
            "shard": shard, "leader": "b1",
        });
        if let Some(kind) = kind {
            value["kind"] = kind.into();
        }
        value
    };
    let all = vec![
        assignment("orders", Some("stream"), 0),
        assignment("orders", None, 1),
        assignment("orders", Some("cache"), 0),
        assignment("other", Some("stream"), 0),
    ];
    let streams = shard_owners(all.clone(), "t1", "default", "orders", "stream");
    assert_eq!(streams.len(), 2, "an assignment with no kind is a stream's");
    let caches = shard_owners(all.clone(), "t1", "default", "orders", "cache");
    assert_eq!(caches.len(), 1);
    assert!(shard_owners(all, "t2", "default", "orders", "stream").is_empty());
}