felixctl 0.6.0

Command-line tool for Felix: publish, subscribe, read caches, manage the control plane and run benchmarks
use super::*;

fn change(value: Option<&[u8]>) -> CacheChange {
    CacheChange {
        key: "user-1".into(),
        value: value.map(bytes::Bytes::copy_from_slice),
        offset: 12,
        expires_at_millis: 0,
    }
}

#[test]
fn a_change_prints_as_key_and_value() {
    assert_eq!(
        change_line(false, "sessions", None, &change(Some(b"in"))),
        b"user-1\tin"
    );
    assert_eq!(
        change_line(false, "sessions", None, &change(None)),
        b"user-1\t(deleted)"
    );
}

#[test]
fn a_change_as_json_names_its_shard_and_offset() {
    let line = change_line(true, "sessions", Some(2), &change(Some(b"in")));
    let value: serde_json::Value = serde_json::from_slice(&line).expect("json");
    assert_eq!(
        value,
        serde_json::json!({
            "cache": "sessions", "shard": 2, "key": "user-1",
            "offset": 12, "deleted": false, "value": "in",
        })
    );
    let line = change_line(true, "sessions", None, &change(None));
    let value: serde_json::Value = serde_json::from_slice(&line).expect("json");
    assert_eq!(value["deleted"], true);
    assert!(value.get("value").is_none());
}